diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Inc/ADBMS_Intern.h b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Inc/ADBMS_Intern.h index 72376eb..ee2a130 100644 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Inc/ADBMS_Intern.h +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Inc/ADBMS_Intern.h @@ -17,11 +17,15 @@ typedef enum { #define CRITICAL_SECTION_ENTER(counter) do { __disable_irq(); } while(0) #define CRITICAL_SECTION_EXIT(counter) ({do { if (primask_##counter) __enable_irq(); } while(0);}) -#define CRITICAL_SECTION() /* \ - CRITICAL_SECTION_VAR(__COUNTER__); \ +#define _CRITICAL_SECTION_IMPL(counter) \ + CRITICAL_SECTION_VAR(counter); \ asm volatile ("dmb"); \ - CRITICAL_SECTION_ENTER(__COUNTER__); \ - for(int _cs_flag_##__COUNTER__ = 1; _cs_flag_##__COUNTER__; _cs_flag_##__COUNTER__ = 0, CRITICAL_SECTION_EXIT(__COUNTER__)) */ + CRITICAL_SECTION_ENTER(counter); \ + for(int _cs_flag_##counter = 1; _cs_flag_##counter; _cs_flag_##counter = 0, CRITICAL_SECTION_EXIT(counter)) + +#define CRITICAL_SECTION_IMPL(counter) _CRITICAL_SECTION_IMPL(counter) + +#define CRITICAL_SECTION() CRITICAL_SECTION_IMPL(__COUNTER__) [[maybe_unused, gnu::always_inline]] static inline void mcuAdbmsCSLow() {