我为 Arnuino 编写了一个程序,该程序将一个带有联合的结构发送到 PC 上的程序。结构必须是整数,但我没有得到正确的输出。PC 上的程序使用 boost 库进行串行连接。并且是在 64 位(使用 vs2010)中构建和编译的。
如果我在联合中有一个整数变量,则该代码有效。但是带有联合的结构不起作用。只有一个整数得到数据,而那个数据是错误的。
我可能是 64 位(PC)和 32 位(Ardunio)的问题?任何人都可以帮我解决这个问题。提前致谢。
PC 代码片段(省略了串口设置):
union packed{
struct test{
unsigned int data;
unsigned int data2;
} struc;
unsigned char bytes[8];
}SerialPacked;
SerialPacked.struc.data = 0;
SerialPacked.struc.data2 = 0;
cout << "Data before: " << SerialPacked.struc.data << endl;
cout << "Data2 before: " << SerialPacked.struc.data2 << endl;
read(port,buffer((unsigned char*)&SerialPacked.bytes[0], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[1], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[2], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[3], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[4], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[5], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[6], 1));
read(port,buffer((unsigned char*)&SerialPacked.bytes[7], 1));
cout << "Data after: " << SerialPacked.struc.data << endl;
cout << "Data2 after: " << SerialPacked.struc.data2 << endl;
Arduino代码:
int ledPin = 13;
union packed{
struct test{
unsigned int data;
unsigned int data2;
}struc;
unsigned char bytes[8];
}
SerialPacked;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
SerialPacked.struc.data = 0;
SerialPacked.struc.data2 = 0;
};
void loop() {
while(1){
digitalWrite(ledPin,HIGH);
SerialPacked.struc.data = SerialPacked.struc.data + 1;
SerialPacked.struc.data2 = SerialPacked.struc.data2 + 1;;
for(int i=0;i <8; i++){
Serial.write(SerialPacked.bytes[i]);
};
digitalWrite(ledPin,LOW);
delay(1000);
};
}