你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IAR系统启动流程及修改方法

[复制链接]
BMRTECH2017 发布时间:2020-8-6 13:47
默认情况下,直接进入调试状态后程序将停在main函数的开头位置,但其实在进入main函数之前,IAR已经进行了一个系统初始化的过程,本文将介绍在IAR环境中,系统启动流程中将执行哪些步骤,主要包含硬件初始化和软件运行环境初始化两个部分的工作。
一、系统硬件初始化
对于硬件初始化,执行步骤流程如下:
1.png
图‑1
CPU复位时,会从系统启动程序代码cstartup中的__iar_program_start函数入口处开始执行
●  初始化栈指针到栈CSTACK存储块的末尾地址
●  对于ARM 7/9/11、Cortex A、Cortex R内核设备,将另外的堆栈指针初始化为对应存储空间的尾地址处
●  如果用户定义了__low_level_init函数,那么该函数会被系统调用。这也为用户定制系统启动流程提供了方法。
二、C/C++ 程序运行环境初始化
对于软件运行环境,初始化步骤如下:
2.png
图‑2
●  初始化静态和全局变量。以0作为初始值的变量内容会被清除,以非0值为初始值的变量内容会从ROM拷贝到RAM中。如果在硬件初始化过程中,上文提到的_low_level_init函数的返回值为0,那么将忽略这些静态和全局变量的初始化工作。
   ●  构造静态C++对象
    ●  调用用户的main函数,启动应用程序
到上述的第三步才正式跳转到用户撰写的main函数中。在此之前已经完成了硬件和软件运行环境的初始化。
三、修改系统启动流程
在某些情况下,用户可能需要修改默认的系统启动流程。例如,应用程序可能需要初始化内存映射特殊功能寄存器SFRs的内容,或省略掉cstartup代码中默认的数据初始化部分。此时可以由用户提供一个定制版本的_low_level_init程序。
对于Cortex M内核,系统启动代码是保存在arm\src\lib文件夹下的cstartup_M.s和low_level_init.c这两个文件。对于其他的ARM内核,系统启动代码文件则是同文件夹下的cstartup.s和low_level_init.c文件。
为避免默认提供的启动文件被修改,用户可将默认的low_level_init.c文件复制添加到自己的工程中后,再进行修改,避免其他工程受到修改的影响。
注意在low_level_init.c文件中的源码不能使用静态初始化变量,因为此时变量初始化的动作尚未执行。
3.png

收藏 1 评论2 发布时间:2020-8-6 13:47

举报

2个回答
mikecai 回答时间:2020-8-6 16:37:59
学习,感恩
cougarr 回答时间:2020-8-20 16:55:27
学习了

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版