В основном я получаю данные из другого потока в RTOS. Эти данные являются штырем на плате. Все порты ввода-вывода находятся в структурах/объединениях в файле iodefine.h. См. Это, например, о том, как Micrium сделал это:typecast to not typedefined struct
struct st_portd {
union {
unsigned char BYTE;
struct {
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
} BIT;
} DDR;
unsigned char wk0[31];
union {
unsigned char BYTE;
struct {
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
} BIT;
} DR;
unsigned char wk1[31];
union {
unsigned char BYTE;
struct {
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
} BIT;
} PORT;
unsigned char wk2[31];
union {
unsigned char BYTE;
struct {
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
} BIT;
} ICR;
unsigned char wk3[95];
union {
unsigned char BYTE;
struct {
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
} BIT;
} PCR;
};
Очень умный способ, если вы спросите меня. Таким образом, я сохраняю этот вывод как 2 символа в структуре, называемой Порт и Пин.
struct StepperMotor {
CPU_INT32U ID;
CPU_CHAR *EnablePort;
CPU_CHAR EnablePin;
CPU_CHAR *DirectionPort;
CPU_CHAR DirectionPin;
CPU_CHAR *PulsePort;
CPU_CHAR PulsePin;
};
Я хотел бы использовать булавку таким образом:
(struct st_portd)(steppermotor->PulsePort)->DR.BYTE ^= (1 << steppermotor->PulsePin);
шаговый электродвигатель является структурой. Только таким образом я получаю сообщение об ошибке говорящее
запрос для члена «DR» в чем-то не структуры или объединения
Как я в состоянии использовать steppermotor-> PulsePort-> DR. BYTE, не создавая для него новую переменную? Надеюсь, кто-нибудь может мне помочь!
Что такое 'st_port0'? Это опечатка, которая должна быть 'st_portd'? – dasblinkenlight
Я просто думал об этом, но это не опечатка, это точно та же структура данных, что и другой порт ввода-вывода. Спасибо за информацию, хотя, плохо измените ее сейчас. – Davey