文章目录
- 一、汇编指令
- 二、启动文件
- 三、流程图
一、汇编指令
这里介绍即几条最常见实用的汇编指令
- LDR R0,[R1]:将R1指定内存地址数据,存储到寄存器R0中。
- STR R0,[R1,#4]:将寄存器R0中数据存储到寄存器R1加上偏移量4的位置。
- MOV r0,#0x01:将立即数0x01存储到r0寄存器。
- POSH {r2-r3,lr}:入栈,先入lr,再入r3,后r2,sp指向r2,即栈顶位置。
二、启动文件
-
1. 上电后执行第一条指令Reset_Handler
直到“b LoopCopyDataInit”,即跳转到标签LoopCopyDataInit 执行 -
2. 在LoopCopyDataInit 标签中,将.data段从Flash拷贝到RAM里面
直到b LoopFillZerobss,即跳转到标签LoopFillZerobss执行 -
3. 在LoopFillZerobss 标签中,将.bss段初始化为0
直到bl SystemInit,即跳转到标签SystemInit执行,并在执行后返回此处 -
4. 在SystemInit 标签中,系统时钟初始化
执行完后,返回到LoopFillZerobss 标签,继续执行bl entry -
5. 在entry标签中,进入到rtthread_startup函数,用于启动 RT-Thread 内核和相关组件
执行完后,返回到LoopFillZerobss 标签,继续执行bx lr -
6. bx lr
将会从保存在 lr 寄存器中的返回地址中读取值,并跳转到该地址继续执行代码。