Cortex-M3启动深度解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Cortex-Mx启动,备忘,以免将来忘记。中断向量表不用说,从重置中断开始吧   LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0   这里一共就执行了两个函数,SystemInit和__main。

Cortex-Mx启动,备忘,以免将来忘记。
中断向量表不用说,从重置中断开始吧

 

LDR     R0, =SystemInit
BLX     R0
LDR     R0, =__main
BX      R0

 

这里一共就执行了两个函数,SystemInit和__main。

我们一般在SystemInit里面配置系统时钟,这里跳过。

__main是我们今天的重点。

 

                 __main:
0x080000C0 4804      LDR      r0,[pc,#16]  ; @0x080000D4
0x080000C2 4685      MOV      sp,r0        #设置栈顶
                 _main_scatterload:
0x080000C4 F000F956  BL.W     __scatterload (0x08000374)        #分散加载(拷贝初始值、清零变量)
                 __main_after_scatterload:
0x080000C8 F000F8D4  BL.W     __cpp_initialize__aeabi_ (0x08000274)        #C++初始化(全局对象构造函数执行)
                 _main_cpp_init:
0x080000CC 4800      LDR      r0,[pc,#0]  ; @0x080000D0
0x080000CE 4700      BX       r0        #进入C++的main函数

 

 

 

分散加载这里将会初始化我们的全局静态变量

 

.text:00000000 __scatterload_rt2
.text:00000000                 LDR     R4, =Region$Table$Base
.text:00000002                 MOVS    R5, #1
.text:00000004                 LDR     R6, =Region$Table$Limit
.text:00000006                 B       loc_14
.text:00000008 ; ---------------------------------------------------------------------------
.text:00000008
.text:00000008 loc_8                                   ; CODE XREF: __scatterload_rt2+16
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
相关文章
|
19天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
39 0
|
19天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
29 0
|
19天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
33 0
|
19天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
45 0
|
2月前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
116 29
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
17天前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
39 5
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
335 37
|
18天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
18天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
19天前
|
存储 Java API
从源码角度解析ArrayList.subList的几个坑!
从源码角度解析ArrayList.subList的几个坑!