继续之前的问题,首先需要知道的是任务是如何添加到任务队列中去的。讲道理来说,应该是new一个新任务的时候,就会添加到任务链表里去。因此首先,需要看一下的便是应该是这个
但是找不到svcThreadNew()。
插句题外话,__attribute__关键字主要是用来在函数或数据声明中设置其属性。给函数赋给属性的主要目的在于让编译器进行优化。比如说没有返回值,或者是可以直接返回上一次的结果,不要再进行运算(const)。
继续,在RTOS的库里找到了这个:
嗯想想两个实现其实应该是差不多的,我的猜测是里面两个肯定是互相连接的。在这个函数里面需要注意的是,栈空间的分配,在new一个任务的时候,可以自行决定这个栈的大小。进而进入 rt_tsk_create()这个函数,来了解一下。
这里就能看到这次的目的地了。那就是***os_active_TCB[]***这个数组就是活动的任务的表,那么在调度的时候就可以检查这个表(不是,还是链表,这个作用是啥,还暂时不清楚)来进行了。继续看下下面的分发函数:
这个就是就是你在加入新任务之后,需要和正在运行的任务的优先级进行比较,抢占什么的。否则调用放到以优先级排序的链表里。链表里的结构是:
os_rdy就是那个整体上看上去的这个链表,也就是链表头。
到这里就和day1所看到那些形成了闭环。
还有时间没时间研究透彻呢。加油!
CMSIS RTOS2学习笔记day2
最新推荐文章于 2023-04-20 16:18:21 发布