Код: Выделить всё
//.h
#define PIN_BUTTON1 A, 7
#define PIN_BUTTON2 A, 6
#define PIN_BUTTON3 A, 5
//.cpp
#define PIOIX_A 0
#define PIOIX_B 1
#define PIOIX_C 2
#define PIOIX_D 3
#define PIOIX_E 4
#define PIOIX_F 5
#define PIOIX_G 6
#define PIOIX_H 7
#define PIOIX_I 8
#define PIOIX_J 9
#define PIOIX_K 10
#define PORT_IX2(port, pin) PIOIX_##port
#define PORT_IX(port_pin) PORT_IX2(port_pin)
#define BTN_PORT_MAP (1u << PORT_IX(PIN_BUTTON1) | 1u << PORT_IX(PIN_BUTTON2) | 1u << PORT_IX(PIN_BUTTON3))
void f()
{
#if BTN_PORT_MAP & 1 << 0
uint iA = GPIOA->IDR;
#endif
#if BTN_PORT_MAP & 1 << 1
uint iB = GPIOB->IDR;
#endif
#if BTN_PORT_MAP & 1 << 2
uint iC = GPIOC->IDR;
#endif
///... повторять по количеству портов в МК
}Код: Выделить всё
_Z1fv: (+1)
00000000 0x.... LDR.N R0,??DataTable23_10 ;; 0x40020000
00000002 0x6900 LDR R0,[R0, #+16]
00000004 0x4770 BX LR}Более на примитивные вопросы не отвечаю. Учимся думать самостоятельно.
[uquote="Adrift",url="/forum/viewtopic.php?p=4648350#p4648350"]ps. Ага, мы битман портов вручную создаем и он будет ассоциирован с нашими пинами? Громоздкий C++ это все автоматически при компиляции делает[/uquote]Пример можно чего там наделает си++? Так, чтобы даже на минимальном уровне оптимизации было не более, чем в том листинге, что я привёл?
Пример в студию!
Добавлено after 5 minutes 23 seconds:
[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4648355#p4648355"]Давайте умники![/uquote]На паперти подадут.
Добавлено after 2 minutes 2 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=4648357#p4648357"]Не все ли равно, сколько раз читать данные с ЛВК в буфер результата (одной операцией с единого порта или собирать в несколько приемов в общий буфер[/uquote]Не всё равно. Смотрим на тот говнокод, что написал ТС и думаем почему.
PS: Ответ "почему" уж был дан ранее.


