zoukankan      html  css  js  c++  java
  • Cortex-M3 双堆栈指针(MSP&PSP)

    【双堆栈指针(MSP&PSP)】

    • Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。
    • 复位后处于线程模式特权级,默认使用MSP。
    • 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。
    • 通过设置CONTROL寄存器的bit[1]选择使用哪个堆栈指针。CONTROL[1]=0选择主堆栈指针;CONTROL[1]=1选择进程堆栈指针。
    • Handler模式下,只允许使用主堆栈指针MSP。

    【双堆栈指针在OS中的应用】
    典型的OS环境中,MSP和PSP的用法如下:

    • MSP用于OS内核和异常处理。
    • PSP用于应用任务。

    【双堆栈指针的初始化】

    • 系统复位时从0x00000000处读出MSP的初始值。
    • 在OS初始化时,对PSP进行初始化。


    【PSP指针在不同任务间切换】

    • 用任务A的SP执行入栈操作,并保存任务A的SP。
    • 设置PSP指向任务B的栈空间,用任务B的SP执行出栈,随后开始执行任务B。

     


      参考摘录:

    《Cortex-M内核系列和STM32-讲座2教程.pdf》

    《ARM Cortex-M3权威指南.pdf》

  • 相关阅读:
    【洛谷P1082】同余方程
    【总结】数论相关
    【模板】扩展欧拉定理
    【模板】贝祖定理
    【SPOJ116】Intervals
    【CF1141E】Superhero Battle
    【CF1141F2】Same Sum Blocks
    【CF1141F1】Same Sum Blocks
    【CF1141G】Privatization of Roads in Treeland
    【洛谷P1198】最大数
  • 原文地址:https://www.cnblogs.com/utank/p/11264175.html
Copyright © 2011-2022 走看看