历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2019年03月08日 | Cortex-M3栈内存操作

2019-03-08 来源:eefocus

访问堆栈用堆栈指针,并且PUSH指令和POP指令默认使用SP。


堆栈的PUSH与POP

堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针组成,用于实现”后进先出“的缓冲区。其最典型的应用,就是在数据处理前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的这些值。 

 

注:寄存器的PUSH和POP操作永远都是4字节对齐的。原因是:堆栈指针的最低两位永远是0。


栈内存操作 

 在Cortex-M3中,除了可以使用PUSH和POP指令来处理堆栈外,内核还会在异常处理的始末自动PUSH和POP操作。 

 

堆栈的基本操作 

 堆栈的功能就是把寄存器的数据临时备份在内存中,以便将来能恢复之——在一个任务或一段子程序执行完毕后恢复。


.....(主程序)

; R0, R1=Y, R2=Z

BL   Fx1

                  Fx1

                    PUSH {R0}   ;把R0存入栈&调整SP

                    PUSH {R1}   ;把R1存入栈&调整SP

                    PUSH {R2}   ;把R2存入栈&调整SP

                    .....       ;执行Fx1的功能,中途可以改变R0-R2的值

                    POP  {R2}   ;恢复R2早先的值&再次调整SP

                    POP  {R1}   ;恢复R1早先的值&再次调整SP

                    POP  {R0}   ;恢复R0早先的值&再次调整SP

                    BX   LR     ;返回

;返回主程序

;R0=X,R1=Y.R2=Z(调用Fx1的前后R0-R2的值完好无损)


PUSH/POP指令足够体贴,支持一次操作多个寄存器。



Cortex-M3的堆栈实现 

Cortex-M3使用的是”向下生长的满栈“模型。堆栈指针SP指向一个被压入堆栈的32位数值。在下一次压栈时,SP先自减4,在存入新的数值。如下图:


这里写图片描述


Cortex-M3的双堆栈机制 

堆栈分为两个:主堆栈和进程堆栈,CONTROL[1]决定如何选择。 

当CONTROL[1]=0时,只使用MSP,此时用户程序和异常handler共享同一个堆栈。 


这里写图片描述


当CONTROL=[1]=1时,线程模式将不再使用MSP,而改用PSP(handler模式永远使用MSP)。 


这里写图片描述


 这样的好处是:在使用OS的环境下,只要OS内核仅在handler模式下执行,用户应用程序仅在用户模式下执行,这样就可以防止用户程序的堆栈错误破坏OS使用的堆栈。 


 通过读取PSP的值,OS就能够获取用户应用程序使用的堆栈,进一步地知道了在发生异常时,被压入寄存器的内容,而且还可以把其它寄存器进一步压栈。

推荐阅读

史海拾趣

Crocus Technology公司的发展小趣事

在成立初期,Crocus Technology专注于IP存储模块的研发与销售。这一时期,公司通过不断的技术创新和市场调研,成功开发出了一系列具有竞争力的产品。这些产品不仅满足了市场对高性能存储解决方案的需求,还为公司积累了宝贵的市场经验和客户资源。

法思特(FAST)公司的发展小趣事
有序启动可以确保每个热水器都有足够的时间来加热和稳定水温,从而保证水温的均匀性。
Global Mixed-Mode Technology Inc公司的发展小趣事
三相缺相报警灯电路在需要稳定三相电源供电的场合下非常重要。例如,在工业生产中,三相电动机、变压器等设备对电源的稳定性要求很高,一旦发生缺相,可能会导致设备损坏或生产事故。因此,在这些场合下需要安装三相缺相报警灯电路来及时监测并报警缺相情况。
Daniel Woodhead公司的发展小趣事

随着技术的不断进步,Daniel Woodhead公司开始将目光投向更广阔的市场。公司推出了一系列基于自家微处理器的电子产品,如个人计算机、服务器和工作站等。这些产品凭借其出色的性能和稳定性,在市场上获得了良好的口碑。同时,公司还加大了品牌宣传力度,通过赞助科技展会和举办技术研讨会等活动,进一步提升了品牌影响力。

Embedded Planet公司的发展小趣事

作为一家负责任的企业,Embedded Planet公司一直将绿色环保理念融入产品设计和生产过程中。公司积极采用环保材料和技术,努力降低产品对环境的负面影响。同时,公司还倡导员工参与环保活动,共同为地球的可持续发展贡献力量。这些环保实践不仅提升了公司的社会形象,也为公司赢得了更多客户的信任和支持。

Fremont_Micro_Devices_USA公司的发展小趣事

Embedded Planet公司自成立之初就注重技术创新和与业界领导者的合作。通过持续研发,公司成功开发出一款革命性的嵌入式系统解决方案,这一解决方案能够显著提升设备的性能和效率。同时,Embedded Planet积极与卓联半导体公司合作,共同推出了一款伪线模块,该模块能够大幅度降低通过分组网络传送TDM业务的网络设备的复杂性,并缩短开发时间。这一创新产品得到了市场的广泛认可,也为公司赢得了更多的合作机会。

问答坊 | AI 解惑

关于视频系统处理器选择的建议

关于视频系统处理器选择的建议基于ARM核心的Freescale的i.MX系列芯片是视频应用的佼佼者。 比如i.MX27和i.MX31 i.MX27嵌入式开发板是高清视频输入输出的首选,i.mx27芯片提供了更高的灵活性和更强大的多媒体处理能力,成为IP视频和语音(V2IP)、移 ...…

查看全部问答>

关于7行5列LED键盘指示灯的编程,请高手解惑!十万火急!万分感谢!

7行5列的LED键盘指示灯,键按下时相应的LED指示灯也会亮! 灯亮的原则:列为高电平,行为低电平。 我想问的是,如果我知道了第0行第0列的键按下了,想要第0行第0列的灯亮,那么是不是应该让列所在的存储器第0位置1,其余列置0!即将0x01输入到相 ...…

查看全部问答>

自制超级流水灯演示板

单片机的用途非常广阔,各种智能控制的产品中都少不了它的身影,前景看好,因此引起了一阵阵学习单片机的热潮。   相信很多初学单片机的朋友都是从做流水灯开始的,因为流水灯的电路较为简单。看着按照自己的设想做成的流水灯变幻着不同的花样, ...…

查看全部问答>

ARM板上如何增加显卡芯片

如题, 望版主推荐 一直以来,因ARM开发板每次换屏的时候都要重新生成NK,有没人做过在板子上驱动一个显卡IC来驱动LCD? 如果有,IC型号大家了解的有哪些? 如果增加了这个显卡IC,那么原来的Display驱动还要不要? 大家一起讨论讨论,突然想 ...…

查看全部问答>

谁能详细讲讲 uboot smdk2410.h 里面配置信息的含义?

谢谢! 我是初学者,不明白里面都在配置些什么,不明白哪些是最重要的。…

查看全部问答>

关于vs2005开发windows ce 5程序部署到机器的问题

1:首先非常感谢您的帮助,同时我找遍了google和baidu,没有找到,或许是关键字搜索的不好。所以来此提问。 2:问题描述如下    机器是广州市微嵌计算机科技的Arm9 的硬件系统,采用的是windows ce 5.0。该设备有一个特点是会将hwDir目 ...…

查看全部问答>

如何使程序某个功能运行时不响应其它操作

小弟要实现如下功能: 当我点击打印操作时,程序弹出一个对话框,显示正在打印,在打印的过程中,必须使程序无法响应用户的其它任何操作。当打印结束时,显示打印成功或打印失败,然后才让程序可以继续响应用户其它操作。 请问这个如何解决哈? …

查看全部问答>

讨论: 用fread, fwrite存取结构数据安全吗?

同样的软件,平时都用的好好的,但有半天fread出来的数据都不对。于是才产生这个疑问.…

查看全部问答>

压力传感器在汽车空调系统中是如何应用的?

在汽车空调系统中,压力传感器都应用在那部分,又是给那里提供数据,这些数据的作用。请各位大侠指点指点。谢谢!…

查看全部问答>