进入main之前,都干了什么,老实招来

经常有程序猿会说软件上电后从main函数开始执行,其实是不对的,在进入main之前,经历了好多,今天就带你来熟识下IAR环境下,应用软件系统的main函数之前的启动过程,有图有真相。

启动过程

在系统启动过程期间,在进入main函数之前会执行系统时序,主要是初始化一些硬件目标板和C/C++运行环境。硬件的相关初始化如下图所示:

当CPU复位后,执行系统初始化,数据段初始化,从程序的入口点__iar_program_start开始执行系统启动代码。

__low_level_init函数会被调用,如果你提前定义了,这个函数的执行会给应用程序一个提前初始化的机会。

对于C/C++环境的初始化如下图所示:

从图上可以看出,静态型变量初始化为零的变量会被清零,初始化为其他值得变量会被从ROM拷贝到RAM,构建C++对象,调用main函数,启动应用程序。debug跟踪过程如图所示

经过跟踪系统的启动过程可以清楚的了解系统在执行到main函数之前的整个过程,为理解程序的boot过程以及后续的开发提供了帮助,小猿在这里强烈建议对启动过程不是很清楚的猿友,一定要自己动手debug跟踪一下整个过程,一定会对你的嵌入式开发有很大帮助。

原文发布于微信公众号 - 嵌入式程序猿(InterruptISR)

原文发表时间:2015-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Web行业观察

事件驱动引擎会取代多线程编程吗

事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是...

24040
来自专栏跟着阿笨一起玩NET

从XML文件乱码问题,探寻其背后的原理

加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的;如果对xml文件进行修改了,其中包含中文字符的内容,另存...

17320
来自专栏Bug生活2048

小程序云开发使用体验

这里发现直接更新有点慢,直接下载最新版然后覆盖比较快,打开最新的开发者工具之后会发现多了个云开发:

70620
来自专栏贾老师の博客

Linux 系统监控

43420
来自专栏Golang语言社区

Golang学习--GroupCache的使用

groupcache 是 Brad Fitzpatrick 最新的作品,目标在于取代一部分memcached的功能。以官方的说明是:groupcache ...

59190
来自专栏鸿的学习笔记

事务处理的数据存储

在上篇文章我们讨论了数据模型,今天试着讨论更基础的数据存储和搜索。数据存储根据开发者使用,可以分为一般的事务处理和数据分析,因为这两者面临的情况不一样。事务处理...

12430
来自专栏Python中文社区

Python爬虫:模拟登录知乎完全详解

專 欄 ❈ sunhaiyu,Python中文社区专栏作者 专栏地址: http://www.jianshu.com/u/4943cb2c6ea4 ❈ 这几天...

81890
来自专栏瓜大三哥

Auraro UFC(用户流量控制)

UFC 接口是在启用UFC 生成IPCORE 时创建的。UFCs_axi_ufc_tx_tvalid 和TX 侧的s_axi_ufc_tx_tready 端口启...

17930
来自专栏yang0range

内存溢出和内存泄露

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了...

21710
来自专栏Crossin的编程教室

【Python 第64课】python shell

各位好久不见,我终于又更新了:D。今天抽空来讲点非常非常基础的东西,关于在哪里写 python。 如果你已经编写过自己的程序,相信对这些内容已经熟悉。但很多刚刚...

358100

扫码关注云+社区

领取腾讯云代金券