FreeRTOS任务调度之运行、就绪、阻塞、挂起表

pxCurrentTCB:记录现在运行的任务;
pxReadyTasksLists:记录处于ready状态,等待被调度运行的任务,这是一个链表数组,ready list安装优先级进行分类,这样在调度时就可以从优先级高的readylist中先进行调度,是调度器直接操作对象。

xDelayedTaskList1:定义了一个delay的task链表,这两个是阻塞表
xDelayedTaskList2:定义了一个delay的task链表,delay的task链表是指调用了taskdelay()或者因为阻塞动作被延时的任务,延时的单位为tick。Delaylist按照delay的tick时间进行排序,之所以定义了两个,是为了防止xTickCount发生反转时,一个list无法完全标识。

xTickCount:无符号数字,标识运行后到现在的系统产生的tick数,每个tick发生时,xTickCount++,当xTickCount发生翻转时,pxDelayedTaskList和pxOverflowDelayedTaskList进行对调,Overflowlist变为正常的delay list。
pxDelayedTaskList和pxOverflowDelayedTaskList是链表指针,分包指向xDelayedTaskList1和xDelayedTaskList2。

xPendingReadyList:任务进入就绪状态,但是没有放入readylist链表。这种情况发生在调度器被停止时,有些任务进入到ready状态,这时就讲任务加入到xPendingReadyList,等待调度器开始时,从新进行一次调度。
我们知道任何操作系统都有临界区或者在执行某段代码时不想被打断,防止破坏某些关键操作的完整性。Freertos可以采取多种方式避免,如果是不希望被中断打断,需要调用:

xPendingReadyList就是在调度器被暂停时,新的任务进入了ready状态,因此先保存起来,在xTaskResumeAll时再加入到相应的ready list中。
xTasksWaitingTermination:表示等待结束的任务,注意是为了释放这些任务的资源,在任务删除时会有详细的介绍。
xSuspendedTaskList:表示被暂停的任务列表,调用tasksuspend函数。
xIdleTaskHandle:表示空闲任务的句柄,freertos默认为我们创建了一个IDLE函数,一般优先级为0,即最低。
uxCurrentNumberOfTasks:目前所有的任务数。
xTickCount:系统开始后所有的tick计数。
uxTopReadyPriority:记录当前ready list中优先级最高的任务,这个是个32位的无符号整形数据,如果你使能了configUSE_PORT_OPTIMISED_TASK_SELECTION,uxTopReadyPriority使用bit mask的方式标识就绪状态的最高优先级(freertos最大优先级数为32),前提是你的C运行库支持__builtin_clz(返回某个数据的前导0个数),这个功能一般会开启,因此就限制了最大优先级为32。如果不开启configUSE_PORT_OPTIMISED_TASK_SELECTION,最大优先级没有限制,但是会增大ready list占用的资源。
xSchedulerRunning:调度器是否运行。
uxPendedTicks:前面讲到的vTaskSuspendAll,暂停了调度器,如果这期间tick的timer发送中断,这时uxPendedTicks记录了未被处理的ticks个数。
xYieldPending:在某种临界状态下,任务状态发生改变,需要等待从新调度。
xNumOfOverflows:记录tick计数翻转的次数。
uxTaskNumber:用来记录全局任务数,为新建的任务分配一个task number。
xNextTaskUnblockTime:记录了延时链表中,第一个需要被唤醒的任务时间点。
uxSchedulerSuspended:调度器暂定标志。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值