全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 存储技术 >

arm单片机程序存储和执行的内容是什么

时间:2023-07-27 09:35

人气:

作者:admin

标签: STM32  单片机 

导读:arm单片机程序存储和执行的内容是什么-般MCU包含的存储空间有:片内Flash和片内RAM。其中,Flash存储的数据在系统掉电后也能正常保存;存放在RAM中的数据掉电后丢失。...

本期话题

ARM单片机程序的存储和执行与PC程序存在很大差别,与ARM-A + Linux平台的程序也存在差别。 对于PC来说,可执行文件存储在磁盘上,当执行的时候,将文件内容(代码和数据)加载到内存中去执行。 而对于单片机来说,程序文件存在ROM中,执行的时候,指令代码不用加载到RAM即可执行。 今天,我们就来聊一聊ARM单片机程序存储和执行的相关内容。搞清楚这些,对我们日常开发将有很大的帮助。 聊一聊: 一般MCU包含的存储空间有:片内Flash和片内RAM。其中,Flash存储的数据在系统掉电后也能正常保存;存放在RAM中的数据掉电后丢失。 本文的MCU以STM32为例,MDK编译完成后生成的程序文件包括以下部分内容:

Code:代码段,存放程序的代码部分。

RO-data:只读数据段,存放程序中定义的常量。

RW-data:读写数据段,存放初始化为非0值的全局变量。

ZI-data:0数据段,存放未初始化的全局变量及初始化为0的变量。

编译完成之后,会生成一个.map文件,该文件说明了各个函数占用的空间大小和地址。在文件最后会说明各个字段的关系和大小:

5f10931c-2c15-11ee-a368-dac502259ad0.png

最终生成的文件大小为各个部分的总和:Code + RO Data + RW DATA三部分,ZI Data不占用文件空间,即可执行文件不包含ZI Data。 这个文件一般是bin或者是hex文件,它被烧录进MCU的片内Flash中。 当MCU启动之后,STM32启动文件将RW段中的变量复制到片内RAM中,同时初始化ZI Data所在的RAM空间。 MCU内部的Flash是可以直接运行代码的(通过XIP技术),也就是说,可执行文件的Code和RO Data不会被加载到RAM中。 这就涉及到程序的存储状态了,应用程序具有静止状态和运行状态。静止态的程序被存储在非易失存储器中,如STM32的内部Flash,因而系统掉电后也能正常保存。 但是当程序在运行状态的时候,程序常常需要修改一些暂存数据,由于运行速度的要求,这些数据往往存放在内存中(RAM),掉电后这些数据会丢失。因此,程序在静止与运行的时候它在存储器中的表现是不一样的。

5f5079dc-2c15-11ee-a368-dac502259ad0.png

图中的左侧是应用程序的存储状态,右侧是运行状态,而上方是RAM存储器区域,下方是ROM存储器区域。 程序在存储状态时,RO节(RO section)及RW节都被保存在ROM区。 当程序开始运行时,内核直接从ROM中读取代码,并且在执行主体代码前,会先执行一段加载代码,它把RW节数据从ROM复制到RAM,并且在RAM加入ZI节,ZI节的数据都被初始化为0。加载完后RAM区准备完毕,正式开始执行主体程序。 好了,关于STM32单片机程序的存储和执行,到此就介绍完毕了,希望这篇文章能对大家有所帮助。

编辑:黄飞

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信