欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Cortex-M3中的寄存器组

发布时间:2025/4/5 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Cortex-M3中的寄存器组 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • 1 Cortex-M3中的寄存器组
      • 1.1 寄存器组
      • 1.2 MSP和PSP
      • 1.3 Cortex-M3中的堆栈
      • 1.4 程序状态寄存器
      • 1.5 异常屏蔽寄存器

1 Cortex-M3中的寄存器组

1.1 寄存器组


(上图中说双堆栈寄存器R13基于特权级是错误的)。

这些寄存器中:

  • R15指明了当前任务执行的指令位置。
  • R13指明当前任务所用的堆栈位置。
  • R0~R3主要用于程序调用时,参数的传递;执行程序时局部变量的存储。

1.2 MSP和PSP

对于上图,除了简单了解其有R0~R15外,还要特别注意双堆栈寄存器R13,用于实现中断/异常所用的栈与任务所用的栈相分离,互不干扰。简单来说,一般在RTOS中,异常/中断发生时,硬件自动切换到MSP指向的堆栈来配合执行相应的处理程序,而退出后,自动切换到PSP指向的堆栈空间再执行任务代码(需要我们通过改变LR寄存器的值来完成)。

PSP和MSP重要知识:
对于一般的RTOS来说,当处理器复位之后,使用MSP。即main函数刚开始执行时使用MSP,当发生第一次任务切换后,任务就使用PSP,而异常处理程序依然使用MSP。如何从MSP切换到PSP,需要我们在异常处理程序中更改EXC_RETURN的值。

1.3 Cortex-M3中的堆栈

Cortex-M3使用的是向下生长的满栈模型,采用双堆栈机制。

每次压栈,堆栈地址递减。且堆栈指针SP(MSP/PSP)总是指向最后压栈的单元,不是下一个空闲的堆栈单元。这就是所谓的满栈。

压栈操作:

出栈操作:

1.4 程序状态寄存器

1.5 异常屏蔽寄存器


参考资料:

  • 【李述铜】从0到1自己动手写嵌入式操作系统
  • 总结

    以上是生活随笔为你收集整理的Cortex-M3中的寄存器组的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。