C ARM Thumb-2 WFE指令

C ARM Thumb-2 WFE指令,c,arm,C,Arm,我正在使用Cortex M3 ARM处理器。所以,我有一个这样的主循环 while(true){ foo(); System_Watchdog_Refresh(); __ASM("wfe");//System wait for event... } 所以,制造商公司对我说:; 如果不想从wdt(看门狗定时器)重置程序,则应为每1ms设置一个空定时器ISR 我在这里遇到了一个问题,因为ı使用了“System_Watchdog_Refresh()”,并且处理器在每个循环中都

我正在使用Cortex M3 ARM处理器。所以,我有一个这样的主循环

while(true){

foo();
System_Watchdog_Refresh();
__ASM("wfe");//System wait for event...

}
所以,制造商公司对我说:; 如果不想从wdt(看门狗定时器)重置程序,则应为每1ms设置一个空定时器ISR

我在这里遇到了一个问题,因为ı使用了“System_Watchdog_Refresh()”,并且处理器在每个循环中都运行这个函数。看门狗定时器如何在这种状态下重置处理器

请注意:

  • 系统看门狗刷新():重置wdt定时器

  • 无法禁用Wdt

  • foo()函数对于这种状态并不重要

  • 当ıremove“uu ASM(“wfe”);”时,处理器不会从wdt重置


谢谢…

WFE将处理器设置为待机状态,直到下一个中断(或事件)发生。因此,即使您刷新了看门狗,处理器也会立即进入睡眠状态,并且在没有任何其他事件的情况下,一直保持该状态,直到看门狗过期并重置处理器。为了防止这种情况,您需要定期触发中断(如制造商建议的空计时器),以确保处理器唤醒并恢复执行,从而刷新看门狗


计时器间隔应该合理地接近但远小于看门狗超时,以确保您获得节能和可靠性的理想组合


(将我的评论移到了一个答案上,因为OP说它适合他。)

WFE将处理器设置为待机状态,直到下一次中断(或事件)。因此,即使您刷新了看门狗,处理器也会立即进入睡眠状态,并且在没有任何其他事件的情况下,一直保持该状态,直到看门狗过期并重置处理器。为了防止这种情况,您需要定期触发中断(如制造商建议的空计时器),以确保处理器唤醒并恢复执行,从而刷新看门狗


计时器间隔应该合理地接近但远小于看门狗超时,以确保您获得节能和可靠性的理想组合


(将我的评论移到了一个答案上,因为OP说它对他有效。)

如果在更长的时间内没有事件发生,那么看门狗期会怎样?我猜制造商公司在这种情况下使用ISR。我不理解调试模式下的这种状态…WFE将处理器设置为待机状态,直到下一个中断(或事件)。因此,即使您刷新了看门狗,处理器也会立即进入睡眠状态,并且在没有任何其他事件的情况下,一直保持该状态,直到看门狗过期并重置处理器。为了防止这种情况,您需要定期触发中断的东西(如制造商建议的空计时器),以确保处理器唤醒并恢复执行,从而刷新看门狗。计时器间隔应合理接近,但远小于,看门狗超时,以确保您获得省电和可靠性的理想组合。@th33lf是的,这个答案对我来说足够了。谢谢…如果在更长的时间内没有事件发生,那么看门狗期怎么办?我猜制造商公司在这种情况下使用ISR。我不理解调试模式下的这种状态…WFE将处理器设置为待机状态,直到下一个中断(或事件)。因此,即使您刷新了看门狗,处理器也会立即进入睡眠状态,并且在没有任何其他事件的情况下,一直保持该状态,直到看门狗过期并重置处理器。为了防止这种情况,您需要定期触发中断的东西(如制造商建议的空计时器),以确保处理器唤醒并恢复执行,从而刷新看门狗。计时器间隔应合理接近,但远小于,看门狗超时,以确保您获得省电和可靠性的理想组合。@th33lf是的,这个答案对我来说足够了。非常感谢。