freertos笔记-各种列表运行原理

红叶何时落水

就绪列表 static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];
延时列表1 static List_t xDelayedTaskList1;
延时列表2 static List_t xDelayedTaskList2;
PRIVILEGED_DATA static List_t * volatile pxDelayedTaskList;
PRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList;
挂起列表 static List_t xPendingReadyList;

添加到就绪列表 prvAddNewTaskToReadyList
1. 任务数++;
2-true. 如果没有任务在运行, pxCurrentTCB指向新添加的这个任务, (这里会造成刚开始的时候,最先运行的是最后一个创建的任务)
                                                              有一个疑问,当节拍间隔比较小时,第一个执行的任务并不是预期的任务,节拍大一点时,才符合逻辑???
                                                              就是说,列表中的第一个任务不是最先执行的,也许是刚一执行就立马遇到了新的切换吗 应该是,经过仿真器逐步调试,发现
                                                              单步运行正常,全速运行不正常
    2.1 prvInitialiseTaskLists 初始化各种列表
2-false. 否则 判断当前运行任务的优先级是否大于要添加的任务优先级
    新添加的任务优先级大,pxCurrentTCB = pxNewTCB;
3. 将任务添加到就绪列表中 prvAddTaskToReadyList()
    3.1 taskRECORD_READY_PRIORITY(uxPriority); == portRECORD_READY_PRIORITY( uxPriority, uxTopReadyPriority )
        3.1.1 ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )
    3.2 vListInsertEnd(xStateListItem) xStateListItem项插入列表尾部,就是pxIndex的前面;
4. 如果系统已经开始运行taskYIELD_IF_USING_PREEMPTION();切换任务  
   等效于portYIELD(),切换上下文 
    4.1 portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;挂起PendSV中断
    会调用中断xPortPendSVHandler();
        4.1.1 读取当前任务的psp=>r0;
        4.1.2 获取当前任务结构体
        4.1.3 当前任务入栈
        sp!, {r3, r14} msp入栈,因为要执行vTaskSwitchContext
        4.1.4 关中断
        4.1.5 vTaskSwitchContext()
            4.1.5.1 更新标志位 xYieldPending
            4.1.5.2 taskSELECT_HIGHEST_PRIORITY_TASK()获取就绪列表最高优先级的任务
                4.1.5.2.1 portGET_HIGHEST_PRIORITY() 获取最高优先级的就绪列表
                4.1.5.2.2 listGET_OWNER_OF_NEXT_ENTRY(pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ]) 
                            pxCurrentTCB == 当前最高优先级列表中pxIndex指向的下一个任务,
        4.1.6 开中断
        sp!, {r3, r14} msp出栈
        4.1.7 获取最新任务的结构体
        4.1.8 新任务出栈,切换PSP, 中断结束
5.结束


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红叶落水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值