STM32中的main函数入口

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值