Указатель на конкретный фиксированный адрес - PullRequest
13 голосов
/ 05 марта 2010

Как назначить конкретный адрес памяти указателю?

Регистры специальных функций в микроконтроллере, такие как AVR m128, имеют фиксированные адреса, AVR GCC определяет SFR в заголовочном файле io.h, но я хочу обработать его сам.

1 Ответ

31 голосов
/ 05 марта 2010

Конечно, нет проблем. Вы можете просто присвоить его непосредственно переменной:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...