一、
在IAR环境中,您可以通过使用关键字“__no_init”来定义一个变量,在上电时不进行初始化。
这可以用于那些不需要初始化或由硬件或其他软件进行初始化的变量。
以下是定义一个上电不初始化变量的示例:
#pragma location = “MyVarSection”
__no_init volatile uint8_t MyVariable;
在这个例子中,关键字“__no_init”用于告诉编译器,这个变量不需要在上电时进行初始化。
变量声明中的“volatile”关键字是为了确保编译器不会将这个变量优化掉。
另外,通过使用“#pragma location”指令,您可以将这个变量放置在内存中的指定位置,
这样可以更好地控制变量在内存中的位置。
在这个例子中,
指令“#pragma location = “MyVarSection””告诉编译器将这个变量放置在名为“MyVarSection”的内存段中。
实例:
声明:
extern volatile u16 MyVariable;
定义:
#pragma location = 0x20004C00
__no_init volatile u16 MyVariable;
需要注意的是,上电不初始化的变量具有不确定的初始值,因此在使用它们之前,必须先对它们进行初始化。
二、在keil 环境中的操作
NON_INITIALIZED +0 UNINIT 0x00000400 { ; NO_INIT RW data
* (no_init)
}
定义变量:
测试结果:
测试代码:
结合上面的操作,关于变量复位后是否初始化还得主要看自己的应用情况。大多数是不需要此操作的