打印
[技术问答]

keil中如何不初始化变量

[复制链接]
616|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
什么是不初始化变量

使用特权

评论回复
5
tail066| | 2022-9-12 10:22 | 只看该作者
为何不初始化变量,c语言哦

使用特权

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

本版积分规则

658

主题

2751

帖子

0

粉丝