我在低功耗运行模式下从 RAM 运行 c 代码(因此不处理中断)。此模式由代码序列启用:
所以勘误表中描述的 WFE 指令没有问题。这种结构的问题,可能是 CPU 在低功耗等待模式下永远锁定的原因:
while nbit(TIM1_SR1,CC3IF) asm("wfe");
即反汇编为:
000035 720252B602 BTJT TIM1_SR1, #1, 0xB6
00003A 728F WFE
来自定时器的事件具有概率性质,此代码不保证它会在执行 WFE 指令后发生:
我使用手册 PM0044,在第 26 页它包含漂亮的表格:
代码执行在 3 个周期时停滞的情况有 2 种。所以我不确定我的异步唤醒事件不会在 BTJT 和 WFE 指令之间发生。
有没有办法确保严格的逻辑顺序(检查条件> wfe > 唤醒事件)?
最佳答案
OP找到的解决方案:
关于c - STM8 ASM 安全执行 WFE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36377047/