ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
1320806 Топик полностью
Dingo (16.06.2023 06:01, просмотров: 129) ответил IBAH на Разобрался, не будет это работать... потому что #define TIM2 ((TIM_TypeDef *)TIM2_BASE), при двойных макросах он разворачивает выражения до конца
Склеивайте "_TIM2" c префиксом: человекочитаемо и не развернёт. Устроит такой вариант? 

#include <stdio.h>

#define TIM2 ((void*)0x4000)

#define TIMER_NUM _TIM2

#define _CLUE(U, V) U ## V

#define _XTRA(X) _CLUE( LL_APB1_GRP1_PERIPH , X)

#define TIMER_NUM_ABR1 _XTRA(TIMER_NUM)

/* Original:

#define TIMER_NUM TIM2

#define TIMER_NUM_ABR1 LL_APB1_GRP1_PERIPH_##TIMER_NUM

LL_APB1_GRP1_EnableClock(TIMER_NUM_ABR1);

*/

// Stringify for print //

#define _XSTR(S) #S

#define XSTR(X) _XSTR(X)

int main(void)

{

char *str = XSTR( TIMER_NUM_ABR1 );

printf("%s\n", str);

return 0;

}


https://godbolt.org/z/qdoY7ze6z

Может такой способ пригодится, уже при -O1 структуру убирает, оставляет только необходимое.timers.c