闲来无事,研究了下变量在MCU中存储位置
ps:MCU中能存放数据的地方有三处:register、rom、ram
涉及标准C关键字:register:定义和申请一个register级变量
auto::定义自动变量,缺省时为编译器默认
const:定义常量
涉及IAR预定义: __no_init:说明变量不需初始化
section .text段:存放代码
section .rodata段:存放只读数据
section .noinit段:存放不需初始化数据
section .bss段:存放默认初始化数据
section .data段:存放已初始化数据
CSTACK段:栈
HEAP段:堆
//属性:宏变量
//位置:是在预编译期间被汇编进section .text段(一般放在rom里)
//操作:运行中已不存在
#define ro_def 0x11111111UL
//属性:常量,只读变量
//位置:直接存在section .rodata段(一般放在rom里)
//操作:程序中访问时均是在section .rodata段中取(速度较慢)
const uint32_t ro_var = 0x22222222;
//属性:未初始化全局变量
//位置:是存在section .noinit: DATA段(一般放在ram里)<