Вы можете добиться эффекта наличия переменной по какому-либо физическому адресу с помощью макроса, например:
#define a (*(volatile struct duart *)0xdeadbeef)
Это не использует компоновщик; он не объявляет никаких переменных, поэтому вы не увидите a
в объектном файле. Но я думаю, тебе это не нужно.
Примечание * ключевое слово volatile
, которое всегда необходимо при использовании оборудования с отображенной памятью. Часто он работает без volatile
, но иногда - нет, и отладка таких сбоев затруднена - поэтому не забывайте это ключевое слово volatile
Использование:
// I assume the duart structure has fields write_buf and read_buf of type uint8_t
a.write_buf = 0x55; // write data to DUART
a.write_buf = 0xaa; // write more data to DUART
uint8_t byte1 = a.read_buf; // read data from DUART
uint8_t byte2 = a.read_buf; // read more data from DUART