861|2

128

帖子

0

资源

一粒金砂(中级)

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

默认情况下,直接进入调试状态后程序将停在main函数的开头位置,但其实在进入main函数之前,IAR已经进行了一个系统初始化的过程,本文将介绍在IAR环境中,系统启动流程中将执行哪些步骤,主要包含硬件初始化和软件运行环境初始化两个部分的工作。

一、系统硬件初始化

对于硬件初始化,执行步骤流程如下:

1.png

‑1

CPU复位时,会从系统启动程序代码cstartup中的__iar_program_start函数入口处开始执行

●  初始化栈指针到栈CSTACK存储块的末尾地址

●  对于ARM 7/9/11Cortex ACortex 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.slow_level_init.c这两个文件。对于其他的ARM内核,系统启动代码文件则是同文件夹下的cstartup.slow_level_init.c文件。

为避免默认提供的启动文件被修改,用户可将默认的low_level_init.c文件复制添加到自己的工程中后,再进行修改,避免其他工程受到修改的影响。

注意在low_level_init.c文件中的源码不能使用静态初始化变量,因为此时变量初始化的动作尚未执行。

3.png

‑3

个人签名

代理IAR开发工具、SEGGER产品


回复

2642

帖子

1

资源

五彩晶圆(初级)

介绍的很深入啊,希望多来点这种深度的干货。

点评

谢谢,有好干货肯定分享~  详情 回复 发表于 2020-8-18 15:57
个人签名人已离开,无事别找,找也找不到。

回复

128

帖子

0

资源

一粒金砂(中级)

freebsder 发表于 2020-8-17 22:23 介绍的很深入啊,希望多来点这种深度的干货。

谢谢,有好干货肯定分享~

个人签名

代理IAR开发工具、SEGGER产品


回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表