ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
451524
1111111 (07.10.2013 14:05, просмотров: 2836)
Не догоню, можно ли в принципе из x-macro выковырять отдельный элемент? т.е. для вот такого классиеского применения #define PIN_DEFINES \ X ( "Реле", Relay_Port, GPIOA, 1, 0, GPIO_MODE_OUT_2M | GPIO_MODE_OUT_PUSHPULL )\ X ( "Светодиод", Led_Port, GPIOA, 2, 0, GPIO_MODE_OUT_2M | GPIO_MODE_OUT_PUSHPULL ) #define X( String_Name, Enum_Name, PORTX, BIT, DEF_LEVEL, MODE ) Enum_Name, enum PIN_ENUM { PIN_DEFINES }; #undef X void Set_Pin( enum PIN_ENUM Pin, U8 State ) { switch( Pin ) { #define X( String_Name, Enum_Name, PORTX, BIT, DEF_LEVEL, MODE )\ case( Enum_Name ):\ if( State )\ PORTX -> BSRR = GPIO_BSRR_BS0 << (BIT);\ else\ PORTX -> BSRR = GPIO_BSRR_BR0 << (BIT);\ break; PIN_DEFINES #undef X default: while(1); } } превратить Set_Pin из функции в макро, напрямую стукающее по нужному порту - чтобы не было перебора энумов итд тормозщих действий