keil uVision4 调试stm32时变量不能初始化

vodi fun(){
int v1 = 0;
static v2 = 0;

}
我用jlink调试的时候这两个变量都没有初始化,如果把int v1 = 0;写成两句int v1;v1=0;可以初始化,还有静态变量应该会自动初始化为零啊,可是也没有初始化,此外,我定义的全局变量也不会初始化,哪位大神知道是怎么回事啊?

优化使然。
从未用过的局部变量,编译器会将其判定为“写者脑残”从而不会生成相关语句。
至于全局变量未初始化,你检查一下你的初始化方式?声明时赋初值?跟踪一下引导时对非零初始化模块的执行情况。追问

我的局部变量在一个循环中使用到了,用于点亮和熄灭LED,比如
vodi fun(){
int v1 = 0;
while(1){
if(v1 == 10){
LED_ON();
v1 = 0;

} else{
LED_OFF();
}
Delay(1000);//延时1s

}
}
此外,我在keil中设置的优化级别为0,但是V1不能初始化啊,编译器是如何判断我的变量有没有用到啊?

追答

“但是V1不能初始化啊”
你是如何监控V1数值的?是否查看过反汇编的运行情况?

追问

右击变量名,然后加入监事列表,我看到没有初始化;此外我还可以让程序全速运行查看LED状态,发现LED也没有闪烁

追答

“此外我还可以让程序全速运行查看LED状态,发现LED也没有闪烁”
可是按你的程序写法,这LED本来就无法闪烁啊。永远处于关断状态。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答