ARM启动代码中_main 与用户主程序main()的区别
STM32启动代码主要是分配堆栈及设置向量表,然后跳转到__main函数。
跳转具体到代码段部分如下:
Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main LDR R0, = __main BX R0 ENDP
当您看到__main函数时,估计应该有不少人认为这个是main函数的别名或是编译之后的名字,否则在启动代码中再也无法找到和main相关的字眼了。可事实是,__main和main是完全两个不同的函数,并且你无法找到__main代码,因为这个是编译器自动创建的。
查看MDK的文档,会发现有这么一句说明:It is automatically created by the linker when it sees a definition of main()。简单点来说,当编译器发现定义了main函数,那么就会自动创建__main。
程序经过汇编启动代码,执行到__main(),之后会执行两个大的函数:
__scatterload():负责把RW/RO输出段从装载域地址复制到运行域地址,并完成了ZI运行域的初始化工作。
__rt_entry():负责初始化堆栈,完成库函数的初始化,最后自动跳转向main()函数。
注意:有些应用中会要求在进入main函数之前先初始化一些外设或者变量区,如:初始化时钟、初始化SDRAM。在初始化他们的时候一定不要使用全局变量,部分库函数,HAL库。因为在__main之前,全局变量还没有初始化,使用会异常,甚至发生内存错误。因此建议使用寄存器来初始化。
ARM启动代码中_main 与用户主程序main()的区别相关推荐
- Linux中main和初启函数,ARM启动代码中_main 与用户主程序main()的区别
//wings: 汇总如下: 1._main是编译系统提供的库函数,main()是用户自己编写的主函数: 2._main主要做了三件事: ①将code/RW搬到ram中: ②初始化ZI数据: ...
- 嵌入式ARM启动代码的工作
嵌入式ARM启动代码的工作 (1)定义代码的初始入口点:初始入口点是指代码运行时的起始点,它在每个映像文件中是唯一的,也是每个可执行的映像文件 所必须含有的,而且必须位于映像文 ...
- ARM Cortex-M底层技术(2)—单片机的启动代码详解
提示:若转载请备注来源,谢谢 文章目录 启动文件 1. 什么是启动代码 2. 启动代码主要干了什么 启动文件分析 一.设置堆栈 二.定义中断向量表 三.初始化系统时钟 总结 启动文件 1. 什么是启动 ...
- ARM Cortex-M底层技术(四)编写自己的启动代码
编写自己的启动代码 上一篇扯了一些关于启动代码的应用方面的内容,列举了4种我自己遇到过的常见的启动代码应用,当然实际的应用肯定不止上一篇文章中提到的那几种,关键是大家懂了原理后根据实际的需求添加自己的 ...
- cortex m0启动代码详解
转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...
- sparc处理器开发工具_SPARC处理器启动代码的分析与编程
SPARC 处理器启动代码的分析与编程 吴景红 ; 李朋 ; 刘柳柳 [期刊名称] <机电产品开发与创新> [年 ( 卷 ), 期] 2008(021)006 [摘要] 优秀的启动代码的编 ...
- LPC11C14 启动代码分析
启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程序. ARM复位后程序从0x00地址开始 ...
- 嵌入式系统启动流程和启动代码的作用 !
嵌入式系统启动流程启动代码的作用 一般嵌入式开发流程就是先建立一个工程,再编写源文件,然后进行编译,把所有的*.s 文件和*.c 文件编译成一个*.o 文件,再对目标文件进行链接和定位,编译成功后会生 ...
- tensorflow代码中tf.app.run()什么意思
# 前面的代码省略了... ... ... ... def main(argv=None):mnist = input_data.read_data_sets("F:\mydata\Tens ...
最新文章
- github/python/ show me the code 25题(一)
- 推荐几个开源类库,超好用,远离996!
- Dapr + .NET 实战(八)服务监测
- 用一个简单的例子来演绎事件委托
- Cesium入门-2-增加地形
- 掉电有点快!iOS15.4翻车:iPhone11/12/13更新后续航直接崩了
- 中汽中心软件测评中心与紫光国微达成芯片认证合作
- 申报表计算机代码是什么,金税盘的维护费在申报表上面有一个要填写减免性质代码怎么填啊 ?那个代码是什么呢?...
- 深入浅出推荐系统(四):召回:向量化的潮流
- Android apk签名-apksigner签名工具
- 十大编程语言的优劣对比简述
- 小米mini php,小米路由器mini刷华硕固件的教程
- [麻将] 麻将的一些概率计算
- (CVPR 2017)VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
- 知识图谱文献综述(第二章 知识表示学习)
- P4 compiler(p4factory) 的安装和使用
- vim编辑了没有写权限的文件如可不退出保存
- dnsmasq.conf配置
- OSChina 周四乱弹 ——前两天BUG还没改完啊?老子不改了!
- TZC 高中信息技术(Python)必修题单————题解
热门文章
- echart横轴文字显示省略号_echarts X轴显示不全 有省略
- 腾讯微博qq说说备份导出工具_10年了!腾讯微博宣布关停,宜昌90后的青春不再!...
- 6174C语言编程,C语言验证6174数学问题
- EMD算法原理与python实现
- eeglab中文教程系列(15)-绘制独立成分ERP贡献
- python列表怎么创建_python怎么创建列表
- 3D打印「心脏」体外存活超6个月,心肌组织带有规律性搏动,来自中科院清华...
- 嬴彻科技完成L4级重卡无人驾驶路测
- 查看HTML代码却被当黑客,记者好心报告漏洞,反遭美国州长起诉
- 150名打工人被AI判定“效率低”遭开除,网友:属实是人工智能,能治工人