历史上的今天
今天是:2025年03月28日(星期五)
2020年03月28日 | 栈在程序中的作用(ARM结构)
2020-03-28 来源:eefocus
大家肯定学习过了栈这一结构,也知道栈的基本特性,可是栈如何在程序中起作用,特别是C语言中,是不多的。所以今天就来分享一下栈在程序中的作用。
首先读这篇文章之前,读者首先要了解两个基本的概念。
1、根据SP指针指向的位置,栈可以分为满栈和空栈
(1)满栈:堆栈指针SP总是指向最后压入堆栈的数据。
(2)空栈:堆栈指针SP总是指向下一个将要放入数据的空位置。
2、根据SP指针移动的方向,栈可以分为升栈和降栈
(1)升栈:随着数据的入栈,SP指针从低地址——>高地址
(2)降栈:随着数据的入栈,SP指针从高地址——>低地址
ARM采用的是 满降栈。
下面是一个栈在程序运用中的实例
第一排为源代码,第二排为汇编代码,第三排为注释
1.主函数

2 子函数

总结: 从以上实例看出,栈在程序中作用有传递参数,保存寄存器的值和保存局部变量。 在传递参数的过程中,如果传递参数少于四个,则直接用寄存器传递。若传递参数多于四个,则使用寄存器+内存传递。
大家可以把SP指针和FP指针的移动结合内存示意图来更好理解栈在程序的应用。
史海拾趣
|
我们已经开发了PXA310的开发板,还有必要开发三星的6410吗? 随着智能手机和PDA的使用越来越广泛,各大厂家都纷纷推出芯片方案。其中最为脱出还是以Samsung 和Marvell 两家公司。 Marvell自从收购了Intel 的的通信和应用处理器Xscale业务后,非常关注这块业务,并且于2007年12月份发布其新一代的应用处理器— ...… 查看全部问答> |
|
我有5个由中断直接连接的按键,请问如何识别是哪个管脚产生的中断啊? 其中两个键触发的沿是上升沿和下降沿交替触发的,三个按键是下降沿触发的,我把它们放在一个中断服务程序中了,由于其中一个制约其他的发出消息,现在我不知道如何识别是哪个管脚产生的这个沿导致产生的中断,请教各位了。… 查看全部问答> |
|
请问大侠s: 一个编译器中如何才能支持fopen等I/O操作呢?是不是C库中必须要包含相关的C库,我现在使用MDK的IDE,它内部有个自己的文件系统,但是我在SDRAM中调试运行的时候,发现运行fopen函数后,程序就跑飞了。我怀疑是fopen库函 ...… 查看全部问答> |
|
各大LED生产商在上游磊晶技术上不断改进,如利用不同的电极设计控制电流密度,利用ITO薄膜技术令通过LED的电流能平均分布等,使在结构上都尽可能产生最多的。再运用各种不同方法去抽出LED发出的每一粒光子,如生产不同外形的芯片;利用芯片周边有效 ...… 查看全部问答> |
|
用430 产生一个spwm,我用的是规则采样,当载波比设置为129的时候波形正常,一旦超过129就会失真,如果设置成500那正弦波直接变为尖峰。不知道为什么,请教各位大神啊!!!!!!! 下面是我的程序: void Init(){ MyClkInit(); Chang ...… 查看全部问答> |
|
易电源试用心得2 对于易电源模块LMZ10504TZ的带载能力非常出色。它的输入是2.95-5.5V,输出是2.5V.因此可以看出该模块的输入电压范围很大,输出电压稳定。从电力电子知识看可以知道这是一种BUCK电路,即降压 ...… 查看全部问答> |




