Cortex-M3的双堆栈MSP和PSP(学习)

这篇具有很好参考价值的文章主要介绍了Cortex-M3的双堆栈MSP和PSP(学习)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

M3的栈,先进后出。
是局部变量内存的开销,函数的调用都离不开栈。

Cortex-M3内核使用了双堆栈,即MSP和PSP。
MSP:Main_Stack_Pointer,即主栈。
PSP:Process_Stack_Pointer,即任务栈。
SP:SP是堆栈指针,指向最后一个被压入元素的地址。

M3的压栈和弹栈过程。

  • 压栈:SP先自减4,然后将待压入的数据存放到SP所指的地址。
  • 弹栈:从SP指针所指的地址读出数据,然后SP指针自增4。

M3内核堆栈生长方向是向下生长,且是32位的。

M3内核何时使用MSP何时使用PSP?

M3双堆栈的意思是两个堆栈,但任何时候只能使用其中一个。
SP寄存器中的值在某一时刻到底是MSP还是PSP?
这是根据CONTROL寄存器的bit1来决定的,当CONTROL的bit1为0使用MSP(默认方式),为1时使用PSP。

控制寄存器有两个用途,其一用于定义特权级别,其二用于选择当前使用哪个堆栈指针。
Cortex-M3的双堆栈MSP和PSP(学习),stm32,学习

设立双指针是为了保护OS的安全性和稳健性。
操作系统和异常事件用MSP。
用户程序(线程)用PSP。
MSP和PSP指针之间的切换会在处理异常事件时自动完成。

区别于用户程序使用PSP,操作系统和异常事件单独使用一个MSP指针的目的,为了保证栈数据不会被用户程序意外访问或栈空间被用户程序占用。
比如,当应用程序发生栈溢出问题时,必须要确保应用程序的故障不会影响到操作系统的运行和异常事件的处理——也就是需要保证始终有栈空间来执行异常事件。

裸机的时候,使用MSP指针。其实OS在上电复位到切换线程之前用的都是MSP指针,也就是线程切换之前都是一个裸机程序的状态。文章来源地址https://www.toymoban.com/news/detail-635390.html

到了这里,关于Cortex-M3的双堆栈MSP和PSP(学习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决stm32芯片锁死 出现Error:Flash Download Failed-“Cortex-M3“

    打开MDK软件使用SW当时连接单片机发现能连接到板子 显示已经连接上 但是再下载的时候出现Error:Flash Download Failed-\\\"Cortex-M3\\\"下载错误 首先排除硬件连接问题,能够连接到stm32说明硬件连接没有问题,再排除软件编译错误,最后预估可能是硬件stm32芯片由于脉冲电平的干扰导致芯

    2024年02月15日
    浏览(95)
  • 【单片机】STM32 ARM Cortex-M0 微控制器特性概述 双排 TSSOP封装好手工焊接的STM32芯片,双排

    STM32F070CB STM32F070RB STM32F070C6 STM32F070F6 在嵌入式系统和物联网应用中,ARM Cortex-M0 微控制器以其强大的性能和丰富的功能而备受瞩目。本文将介绍该微控制器的主要特性,使读者更好地了解其适用范围和潜在应用。 ARM® 32位 Cortex®-M0 CPU 频率高达 48 MHz Flash 存储器 32 到 128 Kbytes

    2024年01月18日
    浏览(48)
  • 在MDK调试STM32出现“could not stop cortex-m device”软件解决办法

    这个问题出现的原因很多,答案最多的都是硬件或配置原因,总结为: 1.BOOT0和BOOT1的接法; 2.NRST引脚在开机过程出现低电平导致片子处于在reset状态; 3.或者是编译选项里你没选器件,或者是下载选项里没选器件; 4.主频超频了; 5.编辑器版本原因; 6.调试过程没关闭看门狗

    2024年02月13日
    浏览(100)
  • STM32F051C8T6 LQFP-48 ARM Cortex-M0 32位微控制器-MCU

    STM32F051C8T6微控制器在物联网领域有诸多应用案例,以下是一些典型的应用场景:   1. 智能家居:在智能家居系统中,STM32F051C8T6可以用于控制智能家电,如智能灯具、智能门锁、智能空调等。通过无线通信模块(如ESP8266)连接到家庭局域网,实现远程控制和智能化管理。  

    2024年04月22日
    浏览(41)
  • STM32芯片flash被锁导致Error Flash Download failed Cortex-M4,解决办法(全)亲测有效

    STM32芯片flash被锁导致Error: Flash Download failed - \\\"Cortex-M4\\\",解决办法(全)亲测有效🤩! 方法1:由于Keil 中debug的仿真器配置出错导致的下载失败(这种问题虽然是低级错误,但我还是觉得非常有必要确认一下自己的配置有没有出错) 方法2:使用第三方烧录软件,通过串口烧录

    2024年02月12日
    浏览(54)
  • 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU规格参数

    一、电路原理图 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU —— 明佳达 二、规格参数 1、 STM32F031K4U6 (16KB)闪存 32UFQFPN 核心处理器:ARM® Cortex®-M0 内核规格:32 位单核 速度:48MHz 连接能力:I²C,IrDA,LINbus,SPI,UART/USART 外设:DMA,I²S,POR,

    2024年02月04日
    浏览(44)
  • 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32】 下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.1 – TRACE32 Practice 脚本 cmm 脚本学习】

    2024年02月04日
    浏览(42)
  • SUB-1G SOC芯片DP4306F 32 位 ARM Cortex-M0+内核替代CMT2380F32

    DP4306F是一款高性能低功耗的单片集成收发机,集成MO核MCU,工作频率可覆盖200MHiz^ 1000MHz。 支持230/408/433/470/868/915频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以对输出功率、频道选择以及数据包格式进行灵活配

    2024年02月07日
    浏览(39)
  • 【ARM Cortex-M 系列 2 -- CPU 之 Cortex-M7 介绍】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 上篇文章:ARM Cortex-M 系列 1 番外篇-- Cortex-M0, M3, M4, M7, M33 , M35P 差异 下篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 Cortex-M7是基于ARMv7架构,ARMv7 架构主要分为以下三类: 其中 Cortex-M 系列应用

    2024年02月17日
    浏览(38)
  • 32位Cortex-M4 MCU:LPC54607J256ET180E、LPC54605J512BD100K 180MHz嵌入式微控制器

    LPC546xx 32 位微控制器(MCU) 具有丰富的外设集、极低的功耗和增强的调试功能。 LPC546xx MCU系列采用ARM® Cortex®-M4内核,可提供以太网支持,并设有一个TFT LCD控制器和两个CAN FD模块。LPC546xx MCU旨在提高灵活性和性能可扩展性,可提供高达180MHz的性能,同时保持低至120uA/MHz的功率效

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包