这里的交易:我工作的一个C函数,配置包含许多成员结构,如* BASE(指向一个struct),ID,MODE; 但基础是可以被定义为(比方说)“结构一”,“结构B”,“...”,根据不同的接口的结构。 这是结构(和一些例子)声明:
typedef unsigned int u32_t;
typedef unsigned char u8_t;
typedef struct _interface_t{
u32_t *BASE;
u8_t ID;
u32_t MODE;
} interface_t;
interface_t USART0_DEV = {AT91C_BASE_US0, AT91C_ID_US0, 0}; // <-- Here we have a AT91C_BASE_US0 struct as *BASE
interface_t USART1_DEV = {AT91C_BASE_US1, AT91C_ID_US1, 0};
interface_t TC0_DEV = {AT91C_BASE_TC0, AT91C_ID_TC0, 0}; // <-- Here we have a AT91C_BASE_TC0 struct as *BASE
interface_t TC1_DEV = {AT91C_BASE_TC1, AT91C_ID_TC1, 0};
interface_t TC2_DEV = {AT91C_BASE_TC2, AT91C_ID_TC2, 0};
interface_t TWI_DEV = {AT91C_BASE_TWI, AT91C_ID_TWI, 0}; // <-- Here we have a AT91C_BASE_TWI struct as *BASE
正如你看到的我用u32_t
而不是结构的,因为我声明了一个指向结构。 后来我有我的函数定义为:
unsigned char ConfigureDevice(interface_t *Interface, u32_t config, u32_t Speed, u32_t IRQ_Trigger, void (*Interface_irq_handler)(void)){
...
Interface->BASE->US_IER = IRQ_Trigger; //Note: US_IER Must receive a vector to a function
...
}
但我得到的错误“US_IER无法解析”。 所以,我想AT91S_USART InterfaceBASE = Interface->BASE; InterfaceBASE->US_IER = IRQ_Trigger;
AT91S_USART InterfaceBASE = Interface->BASE; InterfaceBASE->US_IER = IRQ_Trigger;
代替的Interface->BASE->US_IER = IRQ_Trigger;
并没有得到错误。 但我不能用这个,因为我总是不知道我在处理什么样的接口(直到我读ID件)。
它会变得最糟糕的:当我尝试编译我不断收到conflicting type qualifiers for 'u32_t'
错误u32_t
的typedef和initialization from incompatible pointer type
,并near initialization for USART0_DEV.BASE
各的警告interface_t
定义。
我搜索的论坛,但我想不出我的错误(或多个)进行。 这些那些有点帮助:
- 创建结构内结构
- typedef结构中定义结构
这有什么错我的代码? 我能做些什么来使用类似Interface->BASE->US_IER
编辑:你好!所以现在这是我的了:
typedef struct _Interface_t{
struct PERIPH_BASE * BASE;
u32_t ID;
u32_t MODE;
Interface_t;
Interface_t USART0_DEV = {(struct PERIPH_BASE *)AT91C_BASE_US0, AT91C_ID_US0, 0};
...
unsigned char ConfigureDevice(Interface_t *Interface, u32_t config, u32_t Speed, u32_t IRQ_Trigger,...
...
((AT91S_SYS)Interface->BASE)->AIC_IECR = IRQ_Trigger; //No problems marked by Eclipse Code Editor
....
}
看起来不错,但在编译的时候我被cast to union type from type not present in union
错误...