Я использую MSP430G2553, и у меня есть вспомогательный код, определенный в заголовках, которые я использую (msp430g2553.h). Так, например, если я хочу установить направление вывода GPIO 0 порта 1, я могу написать
P1DIR |= BIT0;
Из любопытства я посмотрел, как определяется P1DIR. И я нашел
SFR_8BIT(P1DIR);
, где SFR_8BIT определяется как
#define SFR_8BIT(address) extern volatile unsigned char address
Итак, мы получаем
extern volatile unsigned char P1DIR
Значение P1DIR добавляется во время компоновки и определяется as (в скрипте компоновщика):
P1DIR = 0x0022;
Итак, наконец, мы получаем
extern volatile unsigned char 0x0022;
Итак, мне кажется, что P1DIR - это указатель, а это означает, что нам нужно разыменовать его . Но во всех документах, которые я смотрю, они выполняют побитовые операторы прямо в P1DIR вместо * P1DIR. Как такое возможно?