原创 STM32中的main函数入口

2014-12-29 21:55 2287 22 25 分类: MCU/ 嵌入式

         昨天在openedv.com论坛上看到别人STM32的启动文件的详解,里面在讨论到说到是不是可以修改main函数里,_main是不是我们C语言的main函数的入口。其实启动文件里我们只是看到很小一部分的代码很难回答这些问题,我于是反汇编了STM32 的AXF文件,给出了一些解答,如下:

      为了让大家更清楚的知道STM32是怎么启动的。这里用到IDA64这个反汇编的利器来找反一下STM32编译出来的AXF文件。

可以看到_main其实是个空函数,实际上进Main之前调用的是start函数。

调用start函数后,经过上面的一系列的函数会进真正的进入到我们C语言中的main函数,这之间的操作就是一个堆栈压栈,为运行C语言建立环境。这些函数全是由编译器内部完成了,所以我们在启动代码中见不到这些代码,不同的编译器自然函数也会不一样,但是作用是一样的。

再继续看真正跳到main函数其实是在rt_enty_postli_1这个函数中,这里用的是BL,说明是调用,调完后还会回来,所以如果main函数中没有死循环,那么main执行完后还会回到rt_enty_postli_1中继续调用exit函数,这样main只会执行一次。

最后看堆栈的内容,这里就是全局的变量的内存区域,我们对全局变量的操作其实就是操作这一片对应的内存。
这里我只是大概了浏览了STM32从_main到main的过程,没有太仔细的深究具体的汇编代码,有兴趣的同学可以自己用IDA64反汇编去深究下

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

mzwhhwj 2015-2-2 18:29

不是自己画的,是IDA64软件自己分析出来的

用户1737577 2015-2-2 09:54

感谢楼主,想问下楼主这个博文里的流程图是拿什么软件画的呢??

残弈悟恩 2015-1-19 19:18

恩恩,什么时候找楼主学习,顶起来。
相关推荐阅读
mzwhhwj 2017-12-07 08:49
物联网前端后台1——一条硬件狗的学习历程
        距上次写MQTT的文章,不知不觉已经过了三个月了,本来打算写自己搭建MQTT Borker的,但这方面的资料只要一百度都有,难度也不大,又加上项目比较忙,一直没时间写文章。从上个月开始...
mzwhhwj 2017-09-12 08:18
物联网核心之MQTT移植
在上一篇文章中,只是讲了MQTT的主要内容,至于怎么移植到STM32上,怎么使用才是最重要的关键。这里使用的平台是RT8711的WIFI SOC,使用的LWIP跟FreeRTOS,移植使用跟STM32...
mzwhhwj 2017-09-12 08:15
打造实用个性的Log输出宏
 我们在调试嵌入式程序的时候,用IDE+调试器是最直接的方式,但是很多时候我们还需要用串口输出来打印一些Debug的信息,来帮助我们调试。串口调试最简单的方式的话,最简单就是用printf来打印。但是...
mzwhhwj 2017-08-24 08:39
物联网核心之MQTT(一)
       MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet、百度的云平台也都支持MQTT的接入。虽然MQTT很...
mzwhhwj 2016-03-18 18:47
硬件狗的浪漫
硬件平台:STM32F4-discovery开发平台:VS2013+VisualGDB5.12   ...
mzwhhwj 2015-11-06 09:24
评论:@sunyzz 博客中提到的“【博客大赛】“虚短”“虚断”两板斧,搞定运算放大器!”
学习了...
EE直播间
更多
我要评论
3
22
关闭 站长推荐上一条 /3 下一条