From 37cec353ecc7bcaf987c9ed100a9c4f4a462a0cd Mon Sep 17 00:00:00 2001 From: Kilian Bracher Date: Wed, 28 May 2025 15:36:54 +0200 Subject: [PATCH] fix critical section --- .../Core/Lib/ADBMS6830B_Driver/Inc/ADBMS_Intern.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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() {