1、列表和列表项
答:
列表是FreeRTOS中的一个数据结构,概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。
列表项就是存放在列表中的项目。
列表相当于链表,列表项相当于节点,FreeRTOS中的列表是一个双向环形链表。
2、列表(链表)和数组的区别
答:
- 列表的特点:列表项间的地址非连续的,是人为的连接到一起的。列表项的数目是由后期添加或删除的个数决定的,随时可以改变。
- 数组的特点:数组成员地址是连续的,数组在最初确定了成员数量后,后期将无法改变。
3、OS中为什么使用列表
答:在OS中任务的数量是不确定的,并且任务状态是会发生改变的,所以非常适用列表(链表)这种数据结构。

4、列表API函数
5、任务切换的本质
答:
任务切换的本质就是CPU寄存器内容的切换。假设当由任务A切换到任务B时,主要分为两步:
第一步:需暂停任务A的执行,并且将此时任务A寄存器保存到任务堆栈中,这个过程叫做保存现场;
第二步:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场。
对任务A保存现场,对任务B恢复现场,这个过程称为:上下文切换。
6、PendSV中断是如何触发的
答:
1> 滴答定时器中断调用
2> 执行FreeRTOS提供的相关API函数:portYIELD()。
3> 本质是通过中断控制和状态寄存器ICSR的bit28写入1挂起PendSV来启动PendSV中的。
7、FreeRTOS的延时函数
答:FreeRTOS有两种延时函数:相对延时函数 和 绝对延时函数。
- 相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。
- 绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。
注意:一般来说,绝对延时中的主体任务运行所需时间必须比绝对延时时间小。
8、延时函数的流程
答:
- 正在运行的任务。
- 调用延时函数。
- 此时将该任务移除就绪列表,并添加到阻塞列表中。
- 滴答中断里边进行计时。
- 判断阻塞时间是否到达,如果到达将从阻塞列表移除,添加到就绪列表。


1万+

被折叠的 条评论
为什么被折叠?



