STM32中的main函数入口
时间:06-01 10:49 阅读:1393次
*温馨提示:点击图片可以放大观看高清大图
简介: 昨天在某论坛上看到别人STM32的启动文件的详解,里面在讨论到说到是不是可以修改main函数里,_main是不是我们C语言的main函数的入口。其实启动文件里我们只是看到很小一部分的代码很难回答这些问题,我于是反汇编了STM32 的AXF文件,给出了一些解答。
其实启动文件里我们只是看到很小一部分的代码很难回答这些问题,我于是反汇编了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反汇编去深究下。