ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1221202 Топик полностью
Aleksey_75 (06.07.2022 11:32, просмотров: 274) ответил Dingo на Неплохой вариант. Можно попробовать от итераций избавиться через тернарный "?", который при малейшей оптимизации будет выкидываться, кроме результата. Спасибо за точку старта.
можно и через "?" но мне никогда не требовалось, при любой оптимизации все на месте.. у меня по такому принципу половина периферии настраивается 

вот gpio

#define ADC_KEY_N (gpio_set_t){PINA_0, GPIO_Mode_AIN, DEF_LOW_LVL }

#define ADC_KEY_P (gpio_set_t){PINA_1, GPIO_Mode_AIN, DEF_LOW_LVL }

#define ADC_VBAT (gpio_set_t){PINA_2, GPIO_Mode_AIN, DEF_LOW_LVL }

#define OUT2 (gpio_set_t){PINA_3, GPIO_Mode_Out_PP, DEF_LOW_LVL }

#define LIN2_SLP (gpio_set_t){PINA_4, GPIO_Mode_Out_PP, DEF_LOW_LVL }

#define SPI_SCK (gpio_set_t){PINA_5, GPIO_Mode_AF_PP, DEF_LOW_LVL }

#define SPI_MISO (gpio_set_t){PINA_6, GPIO_Mode_IPU, DEF_LOW_LVL }

#define SPI_MOSI (gpio_set_t){PINA_7, GPIO_Mode_AF_PP, DEF_LOW_LVL }

.....


const gpio_set_t pin_arr[] =

{

// PORT A

ADC_KEY_N,

ADC_KEY_P,

ADC_VBAT,

OUT2,

LIN2_SLP,

SPI_SCK,

SPI_MISO,

SPI_MOSI,

.......


init 

for (i = 0; pin_arr[i].port != END_PIN_ARR; i ++)

{

// clock enable

crm_periph_clock_enable(MCU_PORT_RCC(pin_arr[i].port), TRUE);

if (pin_arr[i].port != NC_PIN)

{

pin_init(pin_arr[i]);

set_pin_inactive(pin_arr[i]);

}

}