keil中如何不初始化变量

shirley |浏览548次
收藏|2022/07/27 10:35

板子复位之后重启,不希望变量重新初始化,尝试加NOINIT不管用

满意回答

2022/09/05 15:04

如果希望所有变量都不初始化为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


admin

其他回答(0)
0人关注该问题
+1
 加载中...