问题:板子复位之后重启,不希望变量重新初始化,尝试加NOINIT不管用
如果希望所有变量都不初始化为0,可以keil->options->Target中NoInit勾上
如果是个别变量不希望初始化为0,如下步骤
1. 定义变量buf, 放在段NOINIT中(段名随意起,这里只是为了方便阅读)
Compiler6写法如下
#pragma clang section bss = "NOINIT"
uint8_t buf[16];
#pragma clang section bss =""
Compiler5写法如下
#pragma arm section zidata = "NOINIT"
uint8_t buf[16];
#pragma arm section zidata =""
2. 下面内容放到ram.sct文件内
LR_IROM1 0x00000000 0x0008000 { ; load region size_region
ER_IROM1 0x00000000 0x0008000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_2 0x20000000 UNINIT 0x0300 {
main.o (NOINIT)
}
RW_IRAM3 0x20000300 {
.ANY (+RW +ZI)
}
}
3. 然后keil里面options->Linker->Scatter File选择ram.sct
之后就能看到变量buf不再清0
|