MCU-Common
Modules useful for embedded (MCU) programming
Critical section macros

Target-specific critical section macros. More...

Macros

#define CRITICAL_ENTER()
 Enters critical section (ARM Cortex-M). More...
 
#define CRITICAL_EXIT()
 Exits critical section (ARM Cortex-M). More...
 

Detailed Description

Target-specific critical section macros.

Only ARM Cortex-M (ARMv6-M, ARMv7-M, ARMv7E-M) is currently supported. For other architectures, the CRITICAL_ENTER() and CRITICAL_EXIT() macros expand to empty stubs.

Macro Definition Documentation

◆ CRITICAL_ENTER

#define CRITICAL_ENTER ( )
Value:
do { \
uint32_t _prm; \
__asm__ volatile ("mrs %0, primask" : "=r" (_prm)); \
__asm__ volatile ("cpsid i" ::: "memory")

Enters critical section (ARM Cortex-M).

Must be followed by CRITICAL_EXIT().

◆ CRITICAL_EXIT

#define CRITICAL_EXIT ( )
Value:
__asm__ volatile ("msr primask, %0" :: "r" (_prm) : "memory"); \
} while(0)

Exits critical section (ARM Cortex-M).

Must be preceded by CRITICAL_ENTER().