os_cpu_a.asm
(1)在51单片机中有一个code关键字,作用是让常量被分配在ROM上而不是在RAM上从而节省内存。
(2)在STM32上没有code关键字,那怎么实现常量被分配在ROM上而不是RAM上这个功能?用const关键字
(3)OS_SchedNew函数的作用就是通过查表和运算得到当前OSPrioHighRdy
(4)所谓任务切换,就是从原来的任务中离开,转去执行新的任务。任务切换的核心是:保存上下文(要离开的状态保存)、恢复要去执行的任务的上下文、然后跳转到新任务中执行即可。
(5)我们并不能直接跳转到新任务执行,因此CM3引入了一个PendSV的机制来实现任务跳转。
(6)任务跳转面临的难题,以及PendSV如何解决,参考《Cortex-M3权威指南》第7章异常的最后一节,SVC和PendSV。
PendSV讲解
(1)ARM中有2个栈指针(R13),分别叫MSP(main stack pointer主栈指针)和PSP(process stack pointer进程栈指针),设计思路就是OS内核使用MSP,进程(uCOS2中叫任务)使用PSP。也就是说,OS内核和进程使用的栈不同,而且栈指针也都是独立的。这样设计的好处是:OS内核和进程运行切换时SP不用保存,安全。
(2)如何知道当前使用的是PSP还是MSP?其实在CM3设计时就考虑到了,LR寄存器的bit2指示了当前使用的是PSP还是MSP(1表示PSP,0表示MSP)。
https://blog.csdn.net/qq_15391889/article/details/90347036
pendsv
https://blog.csdn.net/xiaohua0877/article/details/89290172