STM32汇编指令(一)WFI 和 WFE

ARM汇编的调用

嵌入式开发,尤其是编写BSP的时候,非常接近底层,这个时候有可能用一些汇编指令来保证程序的简洁和高效,但是平常编写代码用到的都是C/C++,那么如何使用汇编指令呢?
其实这个问题也很简单,在C/C++中提供了关键字asm或者ASM来内嵌汇编,使用如下:

asm("WFI");

但是这种方法问题比较大,在Cortex-M平台上,这个语句有很大几率编译不通过,因为各家编译器又实现了自己的宏,具体可以在core_cmx.h中看到,如果我们的项目要在不同的编译器上通过,可以考虑使用条件编译来达标,不过这样付出的成本就很大。


另外一种简单的方法是使用intrinsic.h这个头文件,这个头文件把所有的汇编指令都封装成了诸如__Commnad()的函数形式,并且预编译为二进制包,故不必使用条件编译也能达到相同效果

WFI和WFE

这两条指令的作用都是令MCU进入休眠/待机状态以便降低功耗,但是略有区别:

WFI: wait for Interrupt 等待中断,即下一次中断发生前都在此hold住不干活

WFE: wait for Events 等待事件,即下一次事件发生前都在此hold住不干活

所以使用前要掂量好到底是什么会触发MCU唤醒事件

你可能感兴趣的:(STM32,C/C++)