基本上,我從RTOS中的另一個線程獲取數據。這些數據是電路板上的一個引腳。所有IO端口都位於iodefine.h文件中的結構/聯合體中。看到這個例如Micrium如何做它:將類型轉換爲非類型定義的結構
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
我只是在想,但它不是一個錯字,它只是其他IO端口的完全相同的數據結構。感謝您的信息,但現在不行了。 – Davey