历史上的今天
返回首页

历史上的今天

今天是: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指针的移动结合内存示意图来更好理解栈在程序的应用。

推荐阅读

史海拾趣

Adafruit公司的发展小趣事

Adafruit Industries是一家总部位于美国纽约的开源硬件公司,致力于设计和制造创意电子产品。以下是该公司发展的五个相关故事:

  1. 公司创立与初期阶段: Adafruit Industries由Limor Fried于2005年创立,起初是一个个人项目。Limor Fried(也被称为Ladyada)是一位热衷于开源硬件和电子制作的工程师,她在创办Adafruit之前就已经是开源硬件社区的活跃成员。最初,Adafruit专注于销售自制的电子配件和模块,并提供相关的教育资源和项目指南。

  2. 开源文化的推动者: Adafruit是开源硬件运动的积极推动者之一,致力于促进开源硬件的发展和普及。公司提倡知识共享和技术开放,通过在GitHub上发布开源硬件项目和提供详细的教程,鼓励更多人参与到电子制作和创客活动中来。

  3. 产品线的不断扩展: 随着市场需求的增长和公司规模的扩大,Adafruit逐渐扩展了产品线,涵盖了各种电子配件、传感器、开发板等。公司还推出了一系列DIY电子套件,旨在帮助用户学习电子制作和编程技能。Adafruit的产品以其高品质和易用性而著称,受到了全球创客和电子爱好者的青睐。

  4. 教育和社区建设: Adafruit积极参与教育和社区建设工作,通过在线教程、视频教程、工作坊等方式,向学生和爱好者传授电子知识和技能。公司还定期举办各种活动和比赛,鼓励创客社区的互动和交流,推动创新和创意的产生。

  5. 持续创新和发展: 作为一家持续创新的公司,Adafruit不断推出新产品和解决方案,不断满足客户不断增长的需求。公司还与各种组织和机构合作,推动开源硬件的发展和应用,努力成为开源硬件领域的领先者和推动者。随着时间的推移,Adafruit将继续秉承其开源和创新的精神,为全球创客社区带来更多的惊喜和机会。

CONTRINEX公司的发展小趣事

自1972年在瑞士成立以来,Contrinex便踏上了成为全球传感器行业领军企业的征程。起初,公司专注于开发工业用的位置判定传感器,凭借其卓越的技术和精准的性能,很快便在市场上崭露头角。随着技术的不断进步和市场的不断扩大,Contrinex逐渐将业务拓展至全球60多个国家,旗下拥有500多名优秀员工,成为一家真正的国际化企业。

Holmes Co Inc公司的发展小趣事

为了进一步提升竞争力,Holmes Electronics采取了一系列并购重组措施。他们首先收购了一家在物联网技术方面具有深厚积累的小型科技公司,通过整合双方资源,迅速在智能家居和智慧城市领域取得突破。随后,公司又成功并购了一家专业的半导体封装测试企业,进一步完善了产业链布局。这些并购重组不仅增强了Holmes Electronics的技术实力和市场地位,还为公司带来了新的增长动力。

Bytesonic Corporation公司的发展小趣事

1984年,台湾的电子行业正迎来蓬勃发展的黄金时期。在这一年的10月,Bytesonic Corporation在台湾台北正式成立,标志着这家电子公司正式踏入竞争激烈的电子市场。初创时期,公司面临着资金短缺、技术匮乏等多重挑战,但凭借着创始人的远见卓识和团队的拼搏精神,公司逐渐在市场中站稳了脚跟。

Fairchild公司的发展小趣事

1965年,Fairchild公司的创始人之一戈登·摩尔提出了著名的“摩尔定律”。该定律预测了集成电路上晶体管数量的增长速度,即每两年翻一番。这一预测在之后的几十年里得到了惊人的验证,并成为了电子行业的重要指导原则。摩尔定律的提出不仅推动了半导体技术的快速发展,也促进了计算机和其他电子设备的不断升级换代。

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司一直注重技术研发和产品创新。公司拥有一支高素质的研发团队,不断在芯片设计、制造和封装等领域取得突破。其中,车规级霍尔传感器芯片XL3600系列和车规级32位微控制器MCU芯片XL6600系列是公司的明星产品。这些产品不仅性能卓越,而且可靠性高,赢得了客户的广泛认可。此外,驰芯微还不断推出新产品,如新能源动力多节电池组监控器BMS AFE芯片XL8812/XL8820系列等,进一步丰富了公司的产品线。

问答坊 | AI 解惑

我们已经开发了PXA310的开发板,还有必要开发三星的6410吗?

随着智能手机和PDA的使用越来越广泛,各大厂家都纷纷推出芯片方案。其中最为脱出还是以Samsung 和Marvell 两家公司。 Marvell自从收购了Intel 的的通信和应用处理器Xscale业务后,非常关注这块业务,并且于2007年12月份发布其新一代的应用处理器— ...…

查看全部问答>

我有5个由中断直接连接的按键,请问如何识别是哪个管脚产生的中断啊?

其中两个键触发的沿是上升沿和下降沿交替触发的,三个按键是下降沿触发的,我把它们放在一个中断服务程序中了,由于其中一个制约其他的发出消息,现在我不知道如何识别是哪个管脚产生的这个沿导致产生的中断,请教各位了。…

查看全部问答>

如何才能支持fopen等I/O操作

请问大侠s:     一个编译器中如何才能支持fopen等I/O操作呢?是不是C库中必须要包含相关的C库,我现在使用MDK的IDE,它内部有个自己的文件系统,但是我在SDRAM中调试运行的时候,发现运行fopen函数后,程序就跑飞了。我怀疑是fopen库函 ...…

查看全部问答>

大功率LED封装工艺及方案的介绍及讨论

各大LED生产商在上游磊晶技术上不断改进,如利用不同的电极设计控制电流密度,利用ITO薄膜技术令通过LED的电流能平均分布等,使在结构上都尽可能产生最多的。再运用各种不同方法去抽出LED发出的每一粒光子,如生产不同外形的芯片;利用芯片周边有效 ...…

查看全部问答>

RTC用内部的LSI,不知道精度怎么样?

                                 一天下来,能偏差多少秒?正在考虑用内部还是用外部的,麻烦用的朋友说一下,多谢!!!…

查看全部问答>

关于FPGA的倍频

据说FPGA可以倍频,我的板子上是EP2CQ8Q208的芯片,50M的外部晶振,请问最大能倍频到多少啊。提前谢过啦…

查看全部问答>

430产生spwm波形问题

用430 产生一个spwm,我用的是规则采样,当载波比设置为129的时候波形正常,一旦超过129就会失真,如果设置成500那正弦波直接变为尖峰。不知道为什么,请教各位大神啊!!!!!!! 下面是我的程序: void Init(){ MyClkInit(); Chang ...…

查看全部问答>

易电源设计心得体会2

易电源试用心得2         对于易电源模块LMZ10504TZ的带载能力非常出色。它的输入是2.95-5.5V,输出是2.5V.因此可以看出该模块的输入电压范围很大,输出电压稳定。从电力电子知识看可以知道这是一种BUCK电路,即降压 ...…

查看全部问答>

怎样能够检查一个开关电源系统的稳定性

在这里需要求助各位哥哥姐姐,怎样能够检查一个开关电源系统的稳定性?…

查看全部问答>