打印
[技术问答]

keil中如何不初始化变量

[复制链接]
929|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2022-8-2 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
板子复位之后重启,不希望变量重新初始化,尝试加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

使用特权

评论回复
沙发
晚晚皆安| | 2022-11-29 04:40 | 只看该作者
这个我还没这么弄过,一般我都是写在存储里了

使用特权

评论回复
板凳
极客晨星| | 2022-11-29 05:12 | 只看该作者
这还是用个flash,写在flash里比较合适吧

使用特权

评论回复
地板
一枝香| | 2022-11-29 05:44 | 只看该作者
这种初始化变量的话,这是不是得全局变量才行啊?

使用特权

评论回复
5
热爱童话世界| | 2022-11-29 06:16 | 只看该作者
请问一下,局部变量也是OK的么?

使用特权

评论回复
6
热爱童话世界| | 2022-11-29 06:16 | 只看该作者
请问一下,局部变量也是OK的么?

使用特权

评论回复
7
偷吻月亮| | 2022-11-29 06:48 | 只看该作者
想知道,这种做**不会出现问题啊?就是比如程序跑飞,变量会变化之类的吗?

使用特权

评论回复
8
笨蛋无需搭理| | 2022-11-29 07:44 | 只看该作者
挺好的办法,如果要是没有这种功能,还得用个外部存储,成本就增加了的

使用特权

评论回复
9
占得人间第一春| | 2022-11-29 08:16 | 只看该作者
感觉这种操作挺好的,有机会我也试试,看看效果如何

使用特权

评论回复
10
风吻过你的不羁| | 2022-11-29 08:48 | 只看该作者
这个和外部存储的方式相比,那个比较好啊?

使用特权

评论回复
11
銀河| | 2022-11-29 09:20 | 只看该作者
想知道这种会占用比较多的MCU存储么?还是与正常一样?

使用特权

评论回复
12
地下縱情搖擺| | 2022-11-29 10:20 | 只看该作者
感觉还不错,到时候也能正常赋值呗,就断电之前的值被保存下来,不会改变么?

使用特权

评论回复
13
plsbackup| | 2022-12-1 18:30 | 只看该作者
不初始化变量,有可能会报错的。              

使用特权

评论回复
14
jkl21| | 2022-12-1 18:39 | 只看该作者
所有的变量都是需要初始化的。              

使用特权

评论回复
15
burgessmaggie| | 2022-12-3 13:59 | 只看该作者
上电以后,变量都是为0的。
              

使用特权

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

本版积分规则

410

主题

1540

帖子

3

粉丝