arduino 的union数据测试
void setup()
{
union {
struct{uint8_t a1;uint16_t a2;uint32_t a3;uint8_t a4;uint16_t a5;}bak;
struct{uint16_t b1;uint32_t b2;uint8_t b3;uint32_t b4;}rec;
uint8_t b[26]={0,1,2,3,4,5,6,7,8,9,10};
}dev;
Serial.begin(115200);
Serial.print("TEST:\t");
Serial.print("a1:");Serial.println(dev.bak.a1, HEX);
Serial.print("a2:");Serial.println(dev.bak.a2, HEX);
Serial.print("a3:");Serial.println(dev.bak.a3, HEX);
Serial.print("a4:");Serial.println(dev.bak.a4, HEX);
Serial.print("a5:");Serial.println(dev.bak.a5, HEX);
Serial.print("b1:");Serial.println(dev.rec.b1, HEX);
Serial.print("b2:");Serial.println(dev.rec.b2, HEX);
Serial.print("b3:");Serial.println(dev.rec.b3, HEX);
Serial.print("b4:");Serial.println(dev.rec.b4, HEX);
Serial.println("\n\nDone...");
}
void loop()
{
}
运行结果:
16:10:06.598 -> a1:0
16:10:06.598 -> a2:302
16:10:06.598 -> a3:7060504
16:10:06.598 -> a4:8
16:10:06.598 -> a5:A
16:10:06.598 -> b1:100
16:10:06.598 -> b2:7060504
16:10:06.598 -> b3:8
16:10:06.598 -> b4:0
结论:Arduino的union的是依数据类型分组进行,uint8_t是一个字节一组,uint16_t是两个字节一组,uint32_t是四个字节一组,每种数据排列是固定的。
上例中union的11个数据{0,1,2,3,4,5,6,7,8,9,10}
对应uint8_t依次是(HEX) 0,1,2,3,4,5,6,7,8,9,a;
对应uint16_t依次是(HEX) 0100,0302,0504,0706,0908,000a;

浙公网安备 33010602011771号