From ffcd6462171f0869ab03e4dc63b03fc128dd2d34 Mon Sep 17 00:00:00 2001 From: chrysn Date: Fri, 23 Aug 2024 13:00:49 +0200 Subject: [PATCH] boards/ek-lm4f120x: Change internal LED macro for C2Rust compatibility C preprocessor defines in non-function form are assumed by C2Rust to be constant if they are an expression and not a statement; the LED_PORT was the only place in the code where that was wrong, and led to compiler errors due to the value not being constant. Altering the internal macro to use function form sidesteps that issue. The generally preferred alternative of using a `const` is unavailable in this case because the dereferencing operator is already part of the vendor header file cpu/stellaris_common/include/vendor/cortex-m4-def.h. The changed macro is documented as required by doccheck. The doccheck rule that grandfathered in the LED_PORT macro as allowed undocumented is not removed because it is also used in other board.h files. --- boards/ek-lm4f120xl/include/board.h | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/boards/ek-lm4f120xl/include/board.h b/boards/ek-lm4f120xl/include/board.h index f4acd46b5e..2863d1bac2 100644 --- a/boards/ek-lm4f120xl/include/board.h +++ b/boards/ek-lm4f120xl/include/board.h @@ -46,22 +46,26 @@ extern "C" { #define LED1_PIN GPIO_PIN(5, 2) #define LED2_PIN GPIO_PIN(5, 3) -#define LED_PORT (GPIO_PORTF_DATA_R) +/** + * @brief Port used for `LED0_ON` and similar implementations + * @internal + * */ +#define LED_PORT() (GPIO_PORTF_DATA_R) #define LED0_MASK (1 << 7) #define LED1_MASK (1 << 2) #define LED2_MASK (1 << 1) -#define LED0_ON (LED_PORT |= LED0_MASK) -#define LED0_OFF (LED_PORT &= ~LED0_MASK) -#define LED0_TOGGLE (LED_PORT ^= LED0_MASK) +#define LED0_ON (LED_PORT() |= LED0_MASK) +#define LED0_OFF (LED_PORT() &= ~LED0_MASK) +#define LED0_TOGGLE (LED_PORT() ^= LED0_MASK) -#define LED1_ON (LED_PORT |= LED1_MASK) -#define LED1_OFF (LED_PORT &= ~LED1_MASK) -#define LED1_TOGGLE (LED_PORT ^= LED1_MASK) +#define LED1_ON (LED_PORT() |= LED1_MASK) +#define LED1_OFF (LED_PORT() &= ~LED1_MASK) +#define LED1_TOGGLE (LED_PORT() ^= LED1_MASK) -#define LED2_ON (LED_PORT |= LED2_MASK) -#define LED2_OFF (LED_PORT &= ~LED2_MASK) -#define LED2_TOGGLE (LED_PORT ^= LED2_MASK) +#define LED2_ON (LED_PORT() |= LED2_MASK) +#define LED2_OFF (LED_PORT() &= ~LED2_MASK) +#define LED2_TOGGLE (LED_PORT() ^= LED2_MASK) /** @} */ /**