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()的区别相关推荐

  1. Linux中main和初启函数,ARM启动代码中_main 与用户主程序main()的区别

    //wings: ​汇总如下: ​1._main是编译系统提供的库函数,main()是用户自己编写的主函数: ​2._main主要做了三件事: ​①将code/RW搬到ram中: ​②初始化ZI数据: ...

  2. 嵌入式ARM启动代码的工作

    嵌入式ARM启动代码的工作 (1)定义代码的初始入口点:初始入口点是指代码运行时的起始点,它在每个映像文件中是唯一的,也是每个可执行的映像文件             所必须含有的,而且必须位于映像文 ...

  3. ARM Cortex-M底层技术(2)—单片机的启动代码详解

    提示:若转载请备注来源,谢谢 文章目录 启动文件 1. 什么是启动代码 2. 启动代码主要干了什么 启动文件分析 一.设置堆栈 二.定义中断向量表 三.初始化系统时钟 总结 启动文件 1. 什么是启动 ...

  4. ARM Cortex-M底层技术(四)编写自己的启动代码

    编写自己的启动代码 上一篇扯了一些关于启动代码的应用方面的内容,列举了4种我自己遇到过的常见的启动代码应用,当然实际的应用肯定不止上一篇文章中提到的那几种,关键是大家懂了原理后根据实际的需求添加自己的 ...

  5. cortex m0启动代码详解

    转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...

  6. sparc处理器开发工具_SPARC处理器启动代码的分析与编程

    SPARC 处理器启动代码的分析与编程 吴景红 ; 李朋 ; 刘柳柳 [期刊名称] <机电产品开发与创新> [年 ( 卷 ), 期] 2008(021)006 [摘要] 优秀的启动代码的编 ...

  7. LPC11C14 启动代码分析

    启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程序. ARM复位后程序从0x00地址开始 ...

  8. 嵌入式系统启动流程和启动代码的作用 !

    嵌入式系统启动流程启动代码的作用 一般嵌入式开发流程就是先建立一个工程,再编写源文件,然后进行编译,把所有的*.s 文件和*.c 文件编译成一个*.o 文件,再对目标文件进行链接和定位,编译成功后会生 ...

  9. tensorflow代码中tf.app.run()什么意思

    # 前面的代码省略了... ... ... ... def main(argv=None):mnist = input_data.read_data_sets("F:\mydata\Tens ...

最新文章

  1. github/python/ show me the code 25题(一)
  2. 推荐几个开源类库,超好用,远离996!
  3. Dapr + .NET 实战(八)服务监测
  4. 用一个简单的例子来演绎事件委托
  5. Cesium入门-2-增加地形
  6. 掉电有点快!iOS15.4翻车:iPhone11/12/13更新后续航直接崩了
  7. 中汽中心软件测评中心与紫光国微达成芯片认证合作
  8. 申报表计算机代码是什么,金税盘的维护费在申报表上面有一个要填写减免性质代码怎么填啊 ?那个代码是什么呢?...
  9. 深入浅出推荐系统(四):召回:向量化的潮流
  10. Android apk签名-apksigner签名工具
  11. 十大编程语言的优劣对比简述
  12. 小米mini php,小米路由器mini刷华硕固件的教程
  13. [麻将] 麻将的一些概率计算
  14. (CVPR 2017)VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
  15. 知识图谱文献综述(第二章 知识表示学习)
  16. P4 compiler(p4factory) 的安装和使用
  17. vim编辑了没有写权限的文件如可不退出保存
  18. dnsmasq.conf配置
  19. OSChina 周四乱弹 ——前两天BUG还没改完啊?老子不改了!
  20. TZC 高中信息技术(Python)必修题单————题解

热门文章

  1. echart横轴文字显示省略号_echarts X轴显示不全 有省略
  2. 腾讯微博qq说说备份导出工具_10年了!腾讯微博宣布关停,宜昌90后的青春不再!...
  3. 6174C语言编程,C语言验证6174数学问题
  4. EMD算法原理与python实现
  5. eeglab中文教程系列(15)-绘制独立成分ERP贡献
  6. python列表怎么创建_python怎么创建列表
  7. 3D打印「心脏」体外存活超6个月,心肌组织带有规律性搏动,来自中科院清华...
  8. 嬴彻科技完成L4级重卡无人驾驶路测
  9. 查看HTML代码却被当黑客,记者好心报告漏洞,反遭美国州长起诉
  10. 150名打工人被AI判定“效率低”遭开除,网友:属实是人工智能,能治工人