如何解决ARM Thumb-2 WFE指令
我正在使用Cortex M3 ARM处理器。因此,我有一个这样的主循环;
while(true){
foo();
System_Watchdog_Refresh();
__ASM("wfe");//System wait for event...
}
因此,制造商公司对我说过; 如果您不想从wdt(看门狗计时器)重置程序,则应每1毫秒设置一个空计时器ISR。
这里对我来说是个问题,因为ı已使用“ System_Watchdog_Refresh();”功能,并且处理器在每个循环中都运行此功能。看门狗定时器如何在此状态下重置处理器?
请注意:
-
System_Watchdog_Refresh():重置wdt计时器
-
Wtt不能禁用
-
foo()函数对此状态无关紧要
-
当ı删除“ __ASM(“ wfe”);“时处理器无法从wdt重置
谢谢...
解决方法
WFE将处理器设置为待机状态,直到下一个中断(或事件)为止。因此,即使您刷新了看门狗,处理器也会在此之后立即进入睡眠状态,并且在没有任何其他事件的情况下,它将保持该状态,直到看门狗到期并重置处理器为止。为了避免这种情况,您将需要定期触发中断的内容(例如制造商建议的空计时器),以确保处理器唤醒并恢复执行,从而刷新看门狗。
计时器间隔应该与看门狗超时相当接近,但要远小于看门狗超时,以确保您获得省电和可靠性的理想组合。
(将我的评论移至答案,因为OP表示对他有用。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。