1-扩展讲解变量与指针
-
RAM-read/write
-
ROM-read only
-
-
map文件可以看变量的地址和大小
-
不管指针还是普通变量,都是变量,在内存中就需要一个地址存放、
-
const是个常量,在rom中
-
char
一个字节 -
指针对于32位处理器来说,他保存的是个地址,所以一定是4字节/32位的,不管他的类型是什么样的
-
程序在Flash中,由CPU来执行,CPU在Flash中获取程序,然后执行。
-
RAM架构
- 程序只能执行独写操作
- 对于数据的运算在CPU中执行
- CPU中有计算单元ALU和各种寄存器Reg
-
汇编补充
LDR # load读 ADD # add加 STR # store保存
-
CPU都是从低地址开始存储,因此读取出来的值要按照高低位组合在一起
2- CPU与外设
- CPU不知道也不管读取的是内存还是Flash/ROM,由内存管理器通知他
3-C语言的本质
- 一上电创建完栈后就运行
main()
函数,因此需要一个函数,用Flash上的初始值,初始化全局变量-->重定位 - 变量的地址没有“自动“匹配,都是早就已经规定好了
- 由连接器根据ROM和RAM的地址来规定的,要是两者地址更改,分配也会更改
- 可以把程序从Flash复制到RAM
- 跳到RAM执行
- 程序的入口由硬件决定,没法更改
- 程序做什么完全自主
- 存储地址要对齐,效率高
3-C语言本质公开课
- 任何指令都在你写的代码里边定好了
4- 局部变量的分配与初始化
- 全局变量
- 局部变量
- 局部静态变量
堆
- 一块空闲的内存,然后我们在上边实现获取部分空闲内存和释放,这个就是堆。
栈
- 也是一块空闲的内存,用来存放地址
- 栈是向低地址方向增长的,所以每次占用栈,地址都
SP = SP-N
- 幕后英雄-例如以下都保存在栈中
- 函数返回地址会写入栈中,之前会写入LR寄存器
- 连接寄存器(LR)--针对ARM
- 局部变量
- SP是栈寄存器,规定栈大小
- 栈是从高地址向下增长
增加串口打印
- 初始化串口
- 实现fputc()
动态静态创建任务
- 面向对象编程思想
handle
就是TCB_t
的结构体指针----句柄