FreerRTOS学习录
文章平均质量分 81
嵌揍式
摆子一个
展开
-
FreeRTOS实现调度器
此函数将pxCurrentTCB指向的将要执行的任务栈中信息传入相应寄存器,然后更新psp指针指向r0,在SVC中断服务函数退出前向r14寄存器或上0x0d,让中断返回时后使用PSP栈指针(在中断退出前,内核会检查r14最后四位来判断中断返回后使用那个指针,通常情况下默认使用MSP),然后bx r14跳转,此时会自动根据栈指针(此时使用的是PSP)将r0—xPSR寄存器值更新,最后PSP指向任务栈栈底。此时,任务开始运行了。接下来调用SVC产生SVC中断,在SVC中断服务函数里面真正的启动我们第一个函数。原创 2023-11-24 00:21:31 · 161 阅读 · 2 评论 -
FreeRTOS任务的定义与任务切换
在裸机系统中,如果有全局变量,有函数调用,在中断发生时,全局变量以及函数内部信息怎么存放,我们并不关心,因为硬件会自动操作,中断产生就保存函数内部信息,中断返回就将保存的信息恢复到ARM的相关寄存器里,但是在裸机系统里面,每次中断产生最多只能产生一个,所以硬件保存只能保存一个函数的内部信息,但是在RTOS中,任务(也就是函数)之间是不断来回切换执行的,如果再交给硬件处理,那么函数的内部信息保存与恢复就会错乱导致函数执行不成功,这时就需要我们自己定义函数栈,在任务切换时手动保存信息和恢复信息。原创 2023-11-20 19:31:37 · 139 阅读 · 0 评论 -
FreeRTOS列表与列表项详细讲解
2,pxIndex指向链表节点,用于遍历节点。3,xListEnd一个MiniListItem_t类型链表节点(MiniListItem_t类型下面讲解),这个节点就是链表的尾节点,但链表是首尾相连,所以也是首节点。通过xItemValue以及利用for循环查找所属位置并插入,如果和尾节点序号一样,则 插在尾节点前面,同时更新节点统计数,pvContainer指向根节点,表明节点所属链表。将节点与精简节点(尾节点)相连同时更新节点统计数,pvContainer指向根节点,表明节点所属链表。原创 2023-11-19 03:06:46 · 158 阅读 · 1 评论