/* ################### Compiler specific Intrinsics ########################### */ 这些编译器的具体特性
#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
/* ARM armcc specific functions */ ARM 编译器特有功能#define __enable_fault_irq __enable_fiq 使能中断
#define __disable_fault_irq __disable_fiq 失能中断#define __NOP __nop 空指令,用来延时。因为空指令也要占用一次指令周期.
#define __WFI __wfi
- WFI进入则可由任意中断唤醒
- WFE进入则由事件唤醒
- WFI = wait for interrupt 等待中断,即下一次中断发生前都在此hold住不干活
- WFE = wait for event 等待事件,即下一次事件发生前都在此hold住不干活
#define __WFE __wfe
#define __SEV __sev 多处理器环境中向所有的处理器发送事件(包括自身)。在符合CMSIS的设备驱动库中,可以使用“__SEV()”实现该操作
#define __ISB() __isb(0) 指令同步屏障,清除流水线并且确保在新指令执行时,之前的指令都已经执行完毕。在符合CMSIS的设备驱动库中,可以使用“__ISB”函数实现该操作
#define __DSB() __dsb(0) 数据同步屏障,确保在下一条指令开始执行前,所有的存储器访问已经完成。在符合CMSIS的设备驱动库中,可以使用“__DSB”函数实现该操作
#define __DMB() __dmb(0) 数据存储器屏障,确保在新的存储器访问开始之前,所有的存储器访问已经完成。在符合CMSIS的设备驱动库中,可以使用“__DMB”函数实现该操作
#define __REV __rev
#define __RBIT __rbit
#define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr))
#define __LDREXH(ptr) ((unsigned short) __ldrex(ptr))
#define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr))
#define __STREXB(value, ptr) __strex(value, ptr)
#define __STREXH(value, ptr) __strex(value, ptr)
#define __STREXW(value, ptr) __strex(value, ptr)