Указатель на конкретный фиксированный адрес
Как вы назначаете конкретный адрес памяти указателю?
Регистры специальных функций в микроконтроллере, такие как AVR m128, имеют фиксированные адреса, AVR GCC определяет SFR в заголовочном файле io.h, но я хочу обработать его сам.
1 ответ
Конечно, без проблем. Вы можете просто присвоить его непосредственно переменной:
volatile unsigned int *myPointer = (volatile unsigned int *)0x12345678;
Обычно я объявляю макрос ввода-вывода с отображением в память:
#define mmio32(x) (*(volatile unsigned long *)(x))
А затем определите мои регистры в заголовочном файле:
#define SFR_BASE (0xCF800000)
#define SFR_1 (SFR_BASE + 0x0004)
#define SFR_2 (SFR_BASE + 0x0010)
А затем используйте их:
unsigned long registerValue = mmio32(SFR_1); // read
mmio32(SFR2) = 0x85748312; // write