следующая тема, чувствую, будет опять "как в этой лапше выгадать 3 такта".
Jenya7, предлагаю:
- забыть слово "адресс" (а то придёт Herz, и научит Вас русскому языку)
- написать модуль-прослойку, у которого на входе не некие странные "GPIOA+1", а вполне понятные "вход кнопка 1", "вход XXX". Тогда привязка функции входа к конкретной ноге будет ровно в одном месте.
Не, ну можно, конечно, благо у STM'ок адреса разных портов GPIO различаются аж на 0x400.
Код
uint32_t get_input (uint32_t param)
{
GPIO_TypeDef * port = (GPIO_TypeDef *) (param & ~0x1F);
uint32_t pin = param & 0x1F;
return port->IDR & (1UL << pin);
}
...
get_input (GPIOA | 1);
get_input (GPIOB | 31);
Но всё равно, не надо так делать.