Я хотел бы быть придиркой: мы говорим на C или C ++?
Если C, я охотно откладываю ответ Криса (и я хотел бы удалить тег C ++).
Если C ++, я советую не использовать эти мерзкие C-броски и #define
в целом.
Идиоматический способ C ++ - использовать глобальную переменную:
volatile unsigned int& UART0 = *((volatile unsigned int*)0x4000C000);
volatile unsigned int& UART0CTL = *(&UART0 + 0x0C);
Я объявляю типизированную глобальную переменную, которая будет подчиняться правилам области (в отличие от макросов).
Его можно легко использовать (не нужно использовать *()
), и поэтому он еще короче!
UART0CTL &= ~1; // no need to dereference, it's already a reference
Если вы хотите, чтобы это был указатель, то это будет:
volatile unsigned int* const UART0 = 0x4000C000; // Note the const to prevent rebinding
Но какой смысл использовать указатель const
, который не может быть нулевым? Это семантически, почему ссылки были созданы для.