stm8 halt指令缺陷
本帖最后由 zh874176706 于 2017-6-15 09:17 编辑void main(void)
{
while (1)
{
if(f_sleep==0)
{
f_sleep=1;
//其他需要执行的程序;
}
if(f_sleep==1) halt();
}
}
interrupt()
{
f_sleep=0;
}
请问如果在上面的if(f_sleep==1)之后且halt()指令之前产生中断,那stm8岂不是继续休眠。
不知道如何解决这种临界点bug 不是呀,只有当f_sleep=1 才执行halt(),进入中断f_sleep=0了,返回后执行halt()然后继续判断,发现f_sleep=0了,继续执行其他程序。这里把halt()看做延时比较好理解。 ic界中lol打的最好的 发表于 2017-6-15 09:28
不是呀,只有当f_sleep=1 才执行halt(),进入中断f_sleep=0了,返回后执行halt()然后继续判断,发现f_s ...
halt()是休眠指令 zh874176706 发表于 2017-6-15 21:49
halt()是休眠指令
应该是根据f_sleep来判断的,所谓休眠就是f_sleep=1持续一段时间,否则一休眠就醒不来了:P 这根hal指令本身有啥关系~ Inc_brza 发表于 2017-6-16 09:18
这根hal指令本身有啥关系~
我的意思是就算在halt()指令与上一条指令之间发生中断也不能让单片机休眠,如何做到。 你有这种担心,那就改成这样啊:
if(sleep==0)
{
xxxx;
}else
{
halt();
} zcl201207 发表于 2017-6-19 19:59
你有这种担心,那就改成这样啊:
if(sleep==0)
{
这没区别呀,在else与halt之间照样可以产生中断。导致中断产生的标志位不能被主循环处理就进入休眠。 指令并没有缺陷,需要根据具体应用处理好逻辑先后
页:
[1]
2