关于freeRTOS中的特性,双堆栈、PendSV、SVC

双堆栈     

    在ARM的M4和M3的内核的单片机中有如下通用寄存器,其中R13栈寄存器,又分为MSP和PSP就是主栈寄存器和程序栈寄存器。我们在中断服务程序用的MSP,而任务中里面用的是PSP。 

在keil的生成的.map文件中可以看到SP寄存器保存的地址位置为0x2000418。

 debug后查看寄存器表,R13的值也为0x200418,其中第一行汇编就是SP的值检出64字节,这是为了分配变量字节。

 MSP和PSP的切换示意图。

 当首次进入systick中断时,栈指针有更新为MSP,即在任务中使用MSP,其他时候使用PSP,且栈指针位置从0x200003D8变为0x200003D0

PendSV

     保存任务环境切换到另一个任务中,这个就是PendSV中断所做的事。保存环境就是保存当时寄存器的值。

 SVC

      SVC中执行的是RTOS中的内核相关代码在SVC中执行的

1:

2 :

3: 

  

猜你喜欢

转载自blog.csdn.net/wanglei_11/article/details/131147968