Ну bitband то ясно. Это, скажем так, наворот конкретного процессора.
Размышляя на уровне языка Си такое вот
Цитата
GPIOA+1
не буде работать как ожидается.
Вы, похоже, так толком и не разобрались с указателями.
Вопрос вам для размышления:
Предположим GPIOA определен как указатель на uint32(а оно так и будет обычно).
т.е. как-то так:
uint32_t *GPIOA = (uint32_t *)0x04;
В памяти регистры расположены подряд(оно обычно тоже так и бывает).
GPIOA - у него например адрес в памяти 0x04, на него сейчас указывает наш указатель.
GPIOB - у него уже адрес в памяти 0x08
далее есть некий указатель. Пусть даже это будет параметр функции. Ну т.е. нечто, что вы собиираетесь передавать куда-то....
Сделаем как вы предложили. Применим +1
uint32_t *p = GPIOA + 1;
На что теперь указывает p?
Если сделать вот так
uintptr_t addr = &*p;
то чему будет равен addr?
После ответов на эти вопросы вы наконец должны понять как работают указатели )
The truth is out there...