在线时间0 小时
UID2070612
ST金币0
蝴蝶豆0
注册时间2014-1-19
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
最近用stm8l151做一个小程序,发现在函数体内定义的静态变量的值会莫名其妙的被清零,有哪位大大知道这个问题的原因?程序如下,Cosmic编译器。
下面这个函数1ms运行一次,结果发现在USI_BUF > 333的情况,大概0.5s的间隔就会发送一次SendStatus(ch, 0x66);,也就是说o_flag被置0了。但是如果将o_flag在函数体外定义,好像不会出现这个问题。
void schema(void){
/* Private variables define inside function will cause some problems */
static u8 i, o_flag;
if (USI_BUF < 333){// in
if (o_flag > 0){
if (++i > 50){
led3 = 3;
o_flag = 0;
i = 0;
SendStatus(ch, 0x65);
}
}
else{
i = 0;
}
}
else{// out
if (o_flag > 0){
i = 0;
}
else{
if (++i > 50){
led3 = 0;
o_flag = 1;
i = 0;
SendStatus(ch, 0x66);// Private variables define outside function
}
}
}
}
} |
|