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

stm8 halt指令缺陷

[复制链接]
zh874176706 提问时间:2017-6-15 07:26 /
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2017-6-15 07:26
18个回答
zcl201207 回答时间:2017-6-20 20:41:43
zh874176706 发表于 2017-6-20 11:18
这没区别呀,在else与halt之间照样可以产生中断。导致中断产生的标志位不能被主循环处理就进入休眠。 ...

是你想多了。。。
如果你觉得这个地方很重要,那么就用汇编啊,过滤你觉得多余的指令。。。
zh874176706 回答时间:2017-6-26 09:49:18
zcl201207 发表于 2017-6-20 20:41
是你想多了。。。
如果你觉得这个地方很重要,那么就用汇编啊,过滤你觉得多余的指令。。。 ...

也许只能用汇编解决这个问题了,所以我觉得这是stm8的一个缺陷
zh874176706 回答时间:2017-6-26 09:49:39
zcl201207 发表于 2017-6-20 20:41
是你想多了。。。
如果你觉得这个地方很重要,那么就用汇编啊,过滤你觉得多余的指令。。。 ...

也许只能用汇编解决这个问题了,所以我觉得这是stm8的一个缺陷。
qinyunti 回答时间:2019-6-24 16:51:43
确实有缺陷,理论上HALT之前要应该能禁止中断,HALT指令能自动使能中断
qinyunti 回答时间:2019-6-24 17:00:45
qinyunti 发表于 2019-6-24 16:51
确实有缺陷,理论上HALT之前要应该能禁止中断,HALT指令能自动使能中断

经过实测HALT指令确实可以自动使能中断,HALT指令没问题。
在使用HALT指令前要关闭中断,避免HALT前产生中断破坏逻辑。
我的一个使用情况,之前版本
  gHaltWakeFlag=0;
  GPIOC->CR2 |=  (uint8_t)((uint8_t)1<<4);  /*PC4 使能输入中断  */
  __asm("HALT");
存在一定概率使能引脚中断配置之后,HALT指令之前马上进入中断,
而我的中断服务函数是进入中断后关闭引脚中断设置标志,唤醒后去查询该标志。
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
  /*关闭中断*/
  GPIOC->CR2 &= (uint8_t)(~(uint8_t)((uint8_t)1<<4));   /*PC4 不使能输入中断*/
  gHaltWakeFlag=1;
}
存在一定概率HALT之前又进入中断服务函数关闭了引脚中断,导致无法唤醒。

修改后如下:  
__disable_interrupt();
  gHaltWakeFlag=0;
  GPIOC->CR2 |=  (uint8_t)((uint8_t)1<<4);  /*PC4 使能输入中断  */
  __asm("HALT");

保证了HALT之前不会产生中断,而HALT指令会自动使能中断允许唤醒
qinyunti 回答时间:2019-6-24 17:04:09
zh874176706 发表于 2017-6-15 07:29
不知道如何解决这种临界点bug

为了避免HALT指令前进入中断破坏逻辑,可以将临界段先关中断保护__diabale_interrupt();
HALT指令会自动使能中断,允许外部中断唤醒。
fubinfeng 回答时间:2019-7-26 10:42:04
我觉得这个根本就没必要去规避,因为概率实在太小了。
butterflyspring 回答时间:2019-7-30 16:07:46
同意qinyunti 的观点。如果预见有这种情况发生就要通过软件逻辑避免。并且测试的HALT指令的功能是正确的。这个功能在手册上也是这样描述滴
HALT instructuin of stm8.PNG
yuanhaiys 回答时间:2019-8-6 09:28:33
看你怎么唤醒了。
12

所属标签

相似问题

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