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的结构体指针----句柄
posted on 2024-11-25 14:45  明图  阅读(15)  评论(0)    收藏  举报