历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2020年01月09日 | STM32的启动堆栈初始化

2020-01-09 来源:eefocus

有几个问题,众多博文中抄来抄去,内容一样,却没有解释清楚


上电初始化堆栈,在进入_main后又说初始化堆栈,有什么不同

堆栈的地址是怎么得出来的

关于这两个问题,先借用一下要标准的启动流程

一般而言,系统上电后第一个执行的是由汇编所编写的启动文件,其主要工作为一下五部分:


  (1)、初始化堆栈指针SP=_initial_sp


  (2)、初始化PC指针,令其=Reset_Handler


  (3)、初始化中断向量表


  (4)、配置系统时钟

  

  (5)、调用C库函数_main初始化用户堆栈,从而最终调用main函数进入C的世界


STM32的中断向量表规定每一行必须是SP地址,第二行是复位中断入口地址,上电后,CPU首先就会读这两个值,分别存为SP和PC寄存器。上述流程第一行_initial_sp就是SP地址。

那么_initial_sp的值是怎么得到的呢?这是根据STM32的SRAM分配规则计算的,SRAM从规定的地址开始分别存付已初始全局和静态变量、未初化全局和静态变量、堆、栈,其中变量的长度是你写程序后就固定了,堆和栈的长度则是在启动代码中定义的,那么把它们加起来就会得于_initial_sp的值,编译后,_initial_sp就被替代为上述计算好的地址。


第二个问题,上电已经初始了SP,为什么后边又初始化堆栈?因为上电只是将_initial_sp值存入了SP寄存器,这只是一个栈顶指针,但堆的大小和栈的大小并没有初始化,所以在_main中要把在启动文件中定义好的值传给C库进行堆栈大小的初始化。无论是带系统的,还是裸机程序,都要管理堆栈的大小,这就是会产生堆栈溢出的原因。


另外,对于有MMU的系统,在进入保护模式后,地址切换到虚拟地址,还要对SP重新赋值,因为上电时的地址是实模式下真实的物理地址,而MMU是虚拟线性地址

推荐阅读

史海拾趣

台湾兆欣(EMTEK)公司的发展小趣事

随着科技的不断进步和市场需求的不断变化,兆欣始终保持对新技术和新应用的敏锐洞察力。他们不断推出创新产品和技术解决方案,引领着行业的发展方向。同时,兆欣还积极与高校和科研机构合作,共同推动电子行业的创新和发展。这种持续的创新精神是兆欣在电子行业中保持领先地位的关键所在。

请注意,以上故事是基于兆欣公司的发展历程和事实进行创作的,但具体细节和数据可能因时间和市场变化而有所不同。

Evans Capacitor Company公司的发展小趣事

随着环保意识的日益提高,ECC积极响应国家号召,致力于绿色环保产品的研发和生产。公司投入大量资金研发环保型电容器,采用环保材料和工艺,减少生产过程中的污染排放。此外,ECC还积极参与公益事业,捐款支持环保组织和慈善机构。

High Voltage Semiconductor Inc公司的发展小趣事

进入21世纪,美高测持续加大在技术研发上的投入,成功研发出具有自主知识产权的VLF(超低频)测试技术,并应用于变电站设备、中高压电力电缆等关键领域的测试。这项技术不仅提高了测试的准确性和效率,还降低了操作风险,迅速获得了市场的广泛认可。公司借此机会,在全球范围内建立了多个销售和服务中心,进一步巩固了其在高压半导体测试市场的领先地位。

ECI公司的发展小趣事

ECI公司自成立以来,一直致力于技术创新和研发。在电子行业的早期,ECI就投入巨资研发先进的半导体技术,成功推出了多款高性能、低功耗的芯片产品。这些产品迅速在市场上获得认可,为公司赢得了良好的口碑。随着技术的不断进步,ECI公司不断推出更加先进的电子产品,引领了电子行业的发展趋势。

世纪金光(CENGOL)公司的发展小趣事

随着新能源汽车市场的快速发展,世纪金光敏锐地捕捉到了这一领域的巨大潜力。公司迅速组建专项研发团队,基于碳化硅技术开展新能源汽车电机驱动系统的研发工作。经过不懈努力,世纪金光成功开发出基于碳化硅技术的新能源汽车电机驱动系统,并在技术上取得了重要进展。这一成果不仅提升了新能源汽车的性能和效率,也为公司打开了新的市场空间。

E-Mark Inc公司的发展小趣事

GHI公司一直致力于提升产品品质和安全性。为了进入欧洲高端市场,GHI公司决定对其核心产品进行E-Mark认证。在认证过程中,GHI公司不断完善质量管理体系,提升生产工艺水平,确保产品质量的稳定性和可靠性。最终,GHI公司的产品成功获得了E-Mark认证,并在欧洲市场获得了良好的口碑和市场份额。

问答坊 | AI 解惑

输入阻抗和输出阻抗小结

一、输入阻抗 输入阻抗是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。 输入阻抗跟一个普通的电抗元件没什么两样 ...…

查看全部问答>

请教如何提高FPGA采样频率,162M以上跑的了吗?

用的FPGA是EP1C6Q240C8, 对前端一个解码芯片的数据进行采样,现在情况是当解码芯片输出的象素CLK(FPGA就是利用这个CLK采样解码芯片的数据)低于150M的时候图象质量挺好, 但是当CLK调到150,162MHZ时 图象就发现偶偶有不该出现的彩色点闪出,比如 ...…

查看全部问答>

哪位大虾能告诉在下虚拟机到底是干什么用的

经常听到虚拟机这个词确从来没有接触过…………不知道它到底有哪用?和微软的XP,win7 有啥不同的功能…

查看全部问答>

wince开发环境搭建的问题

如题,我电脑上已经安装了VC6.0和VS2008,现在想做wince的应用程序开发,还需要安装哪些东西?越详细分越多,谢谢。…

查看全部问答>

●嵌入式linux入门首选,项目实战体验!

你是否想进入嵌入式高薪领域,却感觉无从下手? 你是否在看书、查资料、论坛提问中缓慢而吃力的前行? 时间便是成本!学习的路上,我们更需要专家系统的指引,这样会事半功倍! 华清远见—嵌入式Linux入门实战免费体验日,一天的时间,解决您的 ...…

查看全部问答>

外资公司招聘cadence高级工程师

NovelChip公司拓展中国业务,现招聘能熟练应用cadence工具进行芯片设计的高级工程师。 工作经历要求5年以上,有意者请联系我们。 eMail: zhangzhuo_ym@sina.com Tel: 010-58818986-810 章先生…

查看全部问答>

ULN2003A中COM端为啥可以悬空?

ULN2003A中COM端为啥可以悬空?可以接高电平吗?接高电平时可以接多大的电压?COM端与各输出端之间的反向二极管起什么作用?当COM端悬空时,该二极管还能发挥作用吗?…

查看全部问答>

FPGA开发板 哪个好!!!!

我想学习一下FPGA,cyclone系列的,我只有一点调试经验,没自己设计过,哪个开发板好啊?多谢!!!…

查看全部问答>

你问我答——钽电容上电短路问题

据说加上“你问我答”的问题会更受关注一些。上正题。 我的PCB上电源输入端和输出端都加上了一个10uF, 16V的钽电容,结果一上电就短路。于是将7.2V输入端的钽电容取下,换成普通电容,又好了。网上找资料,说这是因为钽电容的ESR过小。解决方有 ...…

查看全部问答>

如何让UC3843不工作

用UC3843来设计DC-DC电路,输入电压为24和220V,设计思路如下:当输入为24V时,UC3843工作,当输入电压为220V时,UC3843不工作,请问该怎么控制这个UC3843不工作呢~谢谢~…

查看全部问答>