因通信协议不确定,可能更改。现在程序中要取出命令字进行判断,不想在代码中充满USARTx_RX_BUF[5],想要代码便于更改和维护,
所以想到结构体。在com1.h中声明结构体
typedef struct {
u8 u1c1;
u8 u2c1;
u8 u3c1;
u8 u4c1;
u8 u1c2;
u8 u2c2;
u8 u3c2;
u8 u4c2;
}recvdef;
在com1.c中定义结构体
recvdef recvC=
{
USART1_RX_BUF[5], //第一个命令字
USART2_RX_BUF[5],
USART3_RX_BUF[5],
USART4_RX_BUF[5],
USART1_RX_BUF[6], //第二个命令字
USART2_RX_BUF[6],
USART3_RX_BUF[6],
USART4_RX_BUF[6]
};
USARTx_RX_BUF[5]是串口收到的数据位置,是第一个命令字
USARTx_RX_BUF[6]是串口收到的数据位置,是第二个命令字
USARTx_RX_BUF[5]和USARTx_RX_BUF[6]是在uart.c中定义的变量,在uart.h中声明
com1.c文件已包含uart.h头文件,
因为结构体成员初始化不能是变量;所以报错expression must have a constant value
除了#define,还有什么办法能解决这个问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
小朋友, 别见到个括号就喊强制转换,强制转换的意思是先前定义后再重新定义的叫强制转换, 找个你稍微懂一点的题再吹哈。
我说的是不是吹的可不是你说了算, 不懂却装早就知道的, 心里明白, 还强制转换呢。
一周热门 更多>