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

STM32中的main函数入口

[复制链接]
蓝凌风 发布时间:2015-1-21 09:48

昨天在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反汇编去深究下


收藏 评论14 发布时间:2015-1-21 09:48

举报

14个回答
wxh0000mm 回答时间:2015-1-21 09:51:05
谢谢分享
lkl0305 回答时间:2015-1-21 09:52:29
多谢分享,学习下
xulay 回答时间:2015-1-21 09:53:09
简单的事情说复杂了。
zjczm 回答时间:2015-1-21 09:54:28
看见汇编,就想回避
数码小叶 回答时间:2015-1-21 10:08:45
看见汇编,就想回避
大秦正声 回答时间:2015-1-21 11:18:06
初始化+跳转
stary666 回答时间:2015-1-22 09:46:59
stary666 回答时间:2015-1-22 09:47:34
多谢共享!!!!!!!!!!!!!!!!!
stary666 回答时间:2015-1-22 10:10:28
12下一页

所属标签

STM32团队

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


最新内容

相似分享

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