[技术问答]

keil中如何不初始化变量

[复制链接]
247|3
手机看帖
扫描二维码
随时随地手机跟帖
flycamelaaa|  楼主 | 2022-8-2 10:35 | 显示全部楼层 |阅读模式
问题:板子复位之后重启,不希望变量重新初始化,尝试加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

使用特权

评论回复
mutable| | 2022-8-2 20:11 | 显示全部楼层
是不是不太现实

使用特权

评论回复
kiwis66| | 2022-8-6 14:01 | 显示全部楼层
这样做的目的是什么了,之前没接触过

使用特权

评论回复
littlelida| | 2022-8-7 13:21 | 显示全部楼层
什么是不初始化变量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则