ARM Thumb-2 WFE 指令
ARM Thumb-2 WFE instruction
我正在使用 Cortex M3 ARM processor.So,我有一个这样的主循环;
while(true){
foo();
System_Watchdog_Refresh();
__ASM("wfe");//System wait for event...
}
所以,厂家公司是这样对我说的;
如果您不想从 wdt(Watchdog Timer) 重置您的程序,您应该每 1 ms 设置一个空定时器 ISR。
这里对我来说有问题,因为我使用了“System_Watchdog_Refresh();”函数和是的处理器 运行 这个函数每个 loop.How 看门狗定时器在这个状态下重置处理器?
注意:
System_Watchdog_Refresh(): 重置 wdt 定时器
Wdt 无法禁用
foo() 函数对此状态无关紧要
当我删除“__ASM("wfe");"处理器未从 wdt
重置
谢谢...
WFE 将处理器设置为待机状态,直到下一个中断(或事件)发生。因此,即使您刷新看门狗,处理器也会在此之后立即进入睡眠状态,并且在没有任何其他事件的情况下,保持该状态直到看门狗到期并重置处理器。为防止这种情况,您将需要一些定期触发中断的东西(如制造商建议的空定时器)以确保处理器唤醒并恢复执行,从而也刷新看门狗。
计时器间隔应合理接近但小于看门狗超时,以确保您获得 power-saving 和可靠性的理想组合。
(将我的评论移至答案,因为 OP 说这对他有用。)
我正在使用 Cortex M3 ARM processor.So,我有一个这样的主循环;
while(true){
foo();
System_Watchdog_Refresh();
__ASM("wfe");//System wait for event...
}
所以,厂家公司是这样对我说的; 如果您不想从 wdt(Watchdog Timer) 重置您的程序,您应该每 1 ms 设置一个空定时器 ISR。
这里对我来说有问题,因为我使用了“System_Watchdog_Refresh();”函数和是的处理器 运行 这个函数每个 loop.How 看门狗定时器在这个状态下重置处理器?
注意:
System_Watchdog_Refresh(): 重置 wdt 定时器
Wdt 无法禁用
foo() 函数对此状态无关紧要
当我删除“__ASM("wfe");"处理器未从 wdt
重置
谢谢...
WFE 将处理器设置为待机状态,直到下一个中断(或事件)发生。因此,即使您刷新看门狗,处理器也会在此之后立即进入睡眠状态,并且在没有任何其他事件的情况下,保持该状态直到看门狗到期并重置处理器。为防止这种情况,您将需要一些定期触发中断的东西(如制造商建议的空定时器)以确保处理器唤醒并恢复执行,从而也刷新看门狗。
计时器间隔应合理接近但小于看门狗超时,以确保您获得 power-saving 和可靠性的理想组合。
(将我的评论移至答案,因为 OP 说这对他有用。)