文章目录
一、学习RTOS
RTOS学习分为三个层次:
- 使用API
- 知道API内部机制
- 彻底掌握代码细节,能移植、改进
我们先提出一个问题:RTOS和裸机开发有什么区别?
当有多个事件需要去执行(比如事件A:吃饭和事件B:回信息),裸机通常使用轮询方式、事件中断和定时器中断这种方式,都不可避免当某个事件运行时间长会影响到其他事件。
这时我们引出RTOS
,把事件拆分成很小的一段轮换运行。当轮换时间片很小就可以认为是事件是同时运行的。
二、ARM架构
2.1 SOC组成
主控芯片SOC一般包括CPU、内存Flash、GPIO模块等,我们写的程序会烧写进flash。CPU运行第一步读取Flash取指令,然后根据指令去做各种操作,我们下面会介绍这些操作的作用。
2.2 分析C函数汇编理解程序本质
什么叫做程序?
程序:①有指令 ②有运行过程中的数据。
例如:CPU在读变量A的时候,会把内存上对应地址的数据存储到CPU寄存器;同样在CPU写数据的时候会把CPU某个寄存器的值写入到内存上。这时候涉及到下面这些简单的汇编指令:
汇编指令 | 作用 | 解释 |
---|---|---|
LDR R0,[R1,#4] | 读内存,(源、目的、长度) | 从源地址 R1+4的位置读取长度 4字节数据,存放到目的地址 为R0的位置 |
STR R0, [R2,#8] | 写内存,(源、目的、长度) | 从源地址 R0的位置读取长度 4字节数据,写到目的地址 为R2+8的位置 |
ADD R0, R1, R2 | 加 | R0=R0+1 |
SUB R0, R0, #1 | 减 | R0=R0-1 |
PUSH {R3, LR} | 入栈 | 把R3,L2的值写入SP所指示内存,同时SP=SP-8 |
POP {R3, PC} | 出栈 | 从SP位置读内存赋值给 |