ARM_Cortex_M底层技术学习记录

ARM Cortex-M底层技术

启动代码原理

启动代码的使用

在启动代码中调用函数

在_main之前调用, 参数不能超过4个(因为R0-R3, 第5个参数会被压栈, 由于堆栈尚未初始化, 程序会跑飞).

什么样的函数适合放在启动代码启动或者执行? 与放在main()函数有何区别?

问题的关键是在_main之前执行还是之后执行.

  • FPU(浮点协处理器单元)初始化
  • 片外SRAM/SDRAM初始化
  • 看门狗的开关 / 低压检测的初始化等
  • 时间敏感性任务 / 操作等

.c 预处理 .i 汇编 .s 编译 .o 链接 .exe

编译器内核原理及其应用

不同部分

  • 出现错误可看是汇编器、编译器、链接器哪个出错,确定出错位置

map文件

分散加载的简单介绍

map文件基本结构

  • Code段:表示程序代码部分,就是你编写的各种if-else/switch-case/for/函数……等代码

  • RO-data段:程序定义的所有常量以及const类型数据

  • RW-data段:已经初始化的所有静态变量

  • ZI-data段:未初始化的静态变量

  • RO段:指Code以及RO-data的统称

  • 占用空间汇总
    RW+ZI数据段最终运行时会占用片内SRAM或外扩的RAM存储器,而Code+RO-data+RW-data数据最终会产生对片内Flash的占用或外扩程序存储区的占用。

  • 在分散加载前, 即_main()之前无法使用全局变量.

分散加载的根本目的

  • 把RO-DATA数据段、RW数据段从片内数据存储区(一般是片内flash)搬到片内程序运行区(一般是片内SRAM)。
  • 在片内程序运行区(一般是片内SRAM)内分配ZI数据段并初始化为0
  • 初始化堆栈
  • 对于有些指定要加载到程序运行区的RO数据段,把他们加载到程序运行区。

分散加载的基本结构

  • 加载域、运行域、输入节
  LR_ROM1 0x0000 0x10000 { ; Load region
    ER_ROM1 0x000 0x1000{  ; execute region

    }
    RW_RAM1 0x20000 0x1000{ ;RWdata

    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值