你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8 halt指令缺陷

[复制链接]
zh874176706 提问时间:2017-6-15 07:26 /
本帖最后由 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岂不是继续休眠。
收藏 评论18 发布时间:2017-6-15 07:26

举报

18个回答
zh874176706 回答时间:2017-6-15 07:29:19
不知道如何解决这种临界点bug
ic界中lol打的最好的 回答时间:2017-6-15 09:28:37
不是呀,只有当f_sleep=1 才执行halt(),进入中断f_sleep=0了,返回后执行halt()然后继续判断,发现f_sleep=0了,继续执行其他程序。这里把halt()看做延时比较好理解。
zh874176706 回答时间:2017-6-15 21:49:43
ic界中lol打的最好的 发表于 2017-6-15 09:28
不是呀,只有当f_sleep=1 才执行halt(),进入中断f_sleep=0了,返回后执行halt()然后继续判断,发现f_s ...

halt()是休眠指令
ic界中lol打的最好的 回答时间:2017-6-16 09:06:52

应该是根据f_sleep来判断的,所谓休眠就是f_sleep=1持续一段时间,否则  一休眠就醒不来了
Inc_brza 回答时间:2017-6-16 09:18:50
这根hal指令本身有啥关系~
zh874176706 回答时间:2017-6-16 20:59:58
Inc_brza 发表于 2017-6-16 09:18
这根hal指令本身有啥关系~

我的意思是就算在halt()指令与上一条指令之间发生中断也不能让单片机休眠,如何做到。
zcl201207 回答时间:2017-6-19 19:59:35
你有这种担心,那就改成这样啊:
if(sleep==0)
{
   xxxx;
}else
{
   halt();
}
zh874176706 回答时间:2017-6-20 11:18:59
zcl201207 发表于 2017-6-19 19:59
你有这种担心,那就改成这样啊:
if(sleep==0)
{

这没区别呀,在else与halt之间照样可以产生中断。导致中断产生的标志位不能被主循环处理就进入休眠。
lyfly_away 回答时间:2017-6-20 13:53:38
指令并没有缺陷,需要根据具体应用处理好逻辑先后
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版