3
我有一个3字节的数组,通过串口缓存传入字节。一旦它满了,我想用字节来调用一个函数,它需要一个字节和一个int作为参数。这在理论上应该不成问题,但由于某些原因,字节不能正确转换为int。这里是我的代码:在Arduino上将字节转换为int时数据丢失
// for serialEvent()
uint8_t buffer[3] = {0, 0, 0};
uint8_t index = 0;
void serialEvent() {
while (Serial.available()) {
if (index > 2) {
// buffer is full so process it
uint16_t argument = (uint16_t)buffer[1];
argument <<= 8;
argument |= buffer[2];
processSerial(buffer[0], argument);
index = 0;
}
buffer[index] = Serial.read();
index++;
}
}
void processSerial(uint8_t action, uint16_t argument) { ... }
的问题似乎是在第一位向左移,以腾出空间为第二个行。我试图再次通过串行端口输出变量,并且在移位操作之后,它是0.
当我尝试用乘法256代替位移操作时(同样的结果)理论上)。
不快,当我分配一个静态值,像这样,一切工作正常:
uint16_t argument = 0x00CD;
argument <<= 8;
这是一个类型转换的问题?我在这里错过了什么吗?
'说法| = buffer [2];'你可能想在这里使用buffer [0]? – wildplasser
除了没有用3个解码字节进行真正的呼叫,直到第4个字节可用,并且在收到第3个字节之后没有立即进行,这是有道理的,我看不到任何明显的奇怪。 –
感谢Joachim,我会重新排列这个功能。缓冲区指数是正确的。 –