历史上的今天
返回首页

历史上的今天

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

正在发生

2020年01月09日 | STM32堆栈整理

2020-01-09 来源:eefocus

STM32的堆栈大小在官方文件已经定义好了,分别是: 

Heap_Size EQU 0x00000200 一共512字节 

Stack_Size EQU 0x00000400 一共1K字节 

/***********************************************************************************/ 

但是STM32在keil环境下每次编译后的堆栈起始地址并不是固定的(就算事先已经定义好了堆栈的大小),因为栈的起始地址是由用户程序中事先定义好的变量数目决定的(实测是如此)。但欣慰的是,一旦这次编译之后,堆栈的首地址就不会再发生改变了,换言之,就是在烧完程序之后,堆栈的地址就永远不变了。 

/***********************************************************************************/ 

要关心STM32的堆栈关系,首先无法避免的就是下面这两幅图片了: 

 这里写图片描述 
这里写图片描述

图一:MDK环境下,STM32 Bulid Output窗口部分截图 

图二:MDK环境下,STM32的.map文件中关于堆栈地址的说明(绿色高亮部位) 

/***********************************************************************************/ 

STM32的内部sram的首地址为0x20000000,图二中的__initial_sp既为栈的高地址(也就是栈的首地址)(STM32的堆栈地址在MDK下的配置默认是连续的,栈的地址高于堆的地址,栈的生长方向为从高地址向低地址生长,栈的地址为从低地址向高地址生长,最后两者生长到了一起,也就是“头碰头”)图二中的HEAP既为堆的低地址,STACK既为最后头碰头的地址(注意并不是栈的起始地址而是结束地址,因为栈相对于堆是逆向生长的) 

/***********************************************************************************/ 

那么问题来了,__initial_sp的值是怎么来的呢?这就要看图一了。 

首先抛出结论:__initial_sp = 0x20000000+RW+ZI 

RW:Read/Write 可读可写的数据段。就是那些在任务初始化时就已经被赋值了的变量,MDK一般将这种类型的数据保存在STM32的SRAM中。(“全局变量”存在“普通意义上的”SRAM 中)(“局部变量”存储在“栈”中)(“局部的static变量”在存储上等价于全局变量) 

ZI:Zero Initial 初始化为0的变量,也就是直接初始化并没有赋值的变量


可以这么认为:在STM32的片内SRAM中,__initial_sp-0x20000000为用户已经使用了的SRAM空间,从高地址到低地址依次为“栈Stack”“堆Heap”“全局变量” 

/***********************************************************************************/ 

至此,图二中绿色高亮部分的STACK和HEAP的数值也就不难理解了 

STACK = __initial_sp - 0x400(栈的大小) 

HEAP = STACK - 0x200(堆的大小) 

/***********************************************************************************/


推荐阅读

史海拾趣

Aborn Electronics Inc公司的发展小趣事

随着电子行业的快速发展,Aborn Electronics意识到只有不断创新才能在竞争中保持领先。公司加大了对研发的投入,引进了一批高素质的研发人才,并在多个技术领域取得了重要突破。其中,一项关于高效能电源管理技术的创新成果,不仅提高了产品的能效比,还为公司带来了可观的经济效益。这一技术的成功应用,进一步提升了Aborn Electronics在行业内的影响力。

Atlantic Microwave Ltd公司的发展小趣事

近年来,电子行业面临着技术更新迅速、市场竞争日益激烈等挑战。Atlantic Microwave Ltd公司敏锐地察觉到行业变革的趋势,及时调整了公司的战略方向。公司加大了对新兴技术的研发投入,积极拥抱数字化转型,优化生产流程和管理模式,提高了公司的运营效率和市场竞争力。

协顺电子(Finecables)公司的发展小趣事

在品质和创新的支撑下,协顺电子开始积极拓展市场。公司通过参加各类展会、举办技术交流会等方式加强与客户的沟通和交流,同时也不断完善自己的销售网络和售后服务体系。此外,协顺电子还注重品牌建设,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的市场份额不断扩大,品牌影响力也逐渐增强。

FRIWO公司的发展小趣事

作为全球化的技术型企业,FRIWO在全球范围内设立了研发、生产和营销部门,以满足不同市场的需求。FRIWO的电源解决方案业务部(FPS)专注于为客户量身订做电源解决方案,其客户群遍布医疗科技、IT通讯、家用电器、移动工具以及工业应用等多个领域。为了更好地服务本地客户,FRIWO在不同地区设立了分支机构,确保能够快速响应客户需求并提供专业的技术支持和服务。这种全球化布局与本地化服务的策略,使得FRIWO在激烈的市场竞争中保持了强劲的竞争力。

GISMA Steckverbinder GmbH公司的发展小趣事

随着技术的不断进步,GISMA持续加大研发投入,不断推出新产品以满足市场需求。其产品线从最初的几个系列扩展到如今的16个系列,涵盖了超过15000种不同类型的连接器。这些连接器不仅具有高电气性能和出色的防水性能,还能够在恶劣的水下环境中保持稳定的工作状态。GISMA的技术创新能力和产品线拓展策略,为其在电子行业中的持续发展奠定了坚实基础。

Electronic公司的发展小趣事

特斯拉,虽然是一家电动汽车公司,但其在电子行业的发展中也展现出了强大的跨界创新能力。特斯拉通过自主研发和生产电池、电机等核心零部件,成功将电动汽车的性能和品质提升到了新的高度。同时,特斯拉还积极探索自动驾驶、智能交通等前沿技术,不断推动电动汽车行业的变革和发展。特斯拉的跨界创新不仅颠覆了传统汽车行业的格局,也为电子行业带来了新的机遇和挑战。

请注意,以上故事框架仅供参考,具体细节和数据可能需要根据实际情况进行调整和补充。同时,由于篇幅限制,每个故事的字数可能无法满足500字以上的要求。

问答坊 | AI 解惑

LCD屏驱动电路

LCD屏驱动电路 附件中以第二个为准 [ 本帖最后由 呱呱 于 2008-6-30 13:17 编辑 ]…

查看全部问答>

电子科技大学的单片机课件

电子科技大学的单片机课件,感觉很不错,需要的下下来看看~~~…

查看全部问答>

DIY电视机红外遥控小车,会学习的

分享下:DIY电视机红外遥控小车,会学习任何电视机遥控器(6121型) 更多图片: http://item.taobao.com/auction/item_detail.jhtml?item_id=1812139d8b41f528085967e49baeef35&x_id=0db2…

查看全部问答>

第四代光源—白色LED

人类历史上使用的照明光源,第一代是油灯(蜡烛),第二代是爱迪生发明的白炽灯,第三代是荧光灯,现在人们充满期待的是第四代光源—白色LED。这是利用化合物制作而成的世纪固体新光源。 自从1962年GE公司的Nick Holonyak Jr首先开发出第一个实用可 ...…

查看全部问答>

放大器中关于带宽和增益带宽等的主要指标

本帖最后由 paulhyde 于 2014-9-15 08:54 编辑 开环带宽:开环带宽定义为,将一个恒幅正弦小信号输入到运放的输入端,从运放的输出端测得开环电压增益从运放的直流增益下降3db(或是相当于运放的直流增益的0.707)所对应的信号频率。这用于很小信 ...…

查看全部问答>

一个java程序,wince6.0下跑不了,而wince5.0下可以正常运行,为什么?

客户考过来一个java程序,需要在wince6.0下运行。 我进行了测试,在wince5.0/S3C2450下可以正常运行,而在wince6.0/S3C6410下却无法运行! 看了该程序包,里面有很多j2me_xxx.jar的文件,还有phoneme的文件夹,有phoneme\\bin\\cvm.exe及phoneme. ...…

查看全部问答>

wince的directshow哪里下载

如题,include streams.h不通过,没有装directshow,哪里下载呢?…

查看全部问答>

Debug信息不能正常显示?

  本人是个驱动程序的初学者,写了一个简单的NT驱动例子,在其中使用KdPrint输出一些信息,但是信息不能正常显示.   我使用的是XP,   使用注册表的方式在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services子 ...…

查看全部问答>

菜地公告---菜农将开设STM32菜鸟实习栏目

为配合菜农玩一种新的ARM的心理,特此将开设STM32菜鸟实习栏目.在做菜鸟期间,菜农都会做一些"家庭作业"和倒塌STM32的心得体会.虽然逢菜农忙于做PIC24FJ菜鸟期间,但还是抽空学习学习最近的技术.也赶赶时髦,以不被时代抛弃~~~虽然还没接触过S ...…

查看全部问答>