我有一个3字节的数组,通过串口缓冲传入的字节。一旦它被填满,我想使用这些字节调用一个需要一个字节和一个整数作为参数的函数。理论上来说这不应该是个问题,但由于某种原因,这些字节没有正确地转换成整数。以下是我写的代码:
// 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;
这是类型转换问题吗?我是否漏掉了什么重要细节?
argument |= buffer[2];
这里应该是想用buffer[0]
吧? - wildplasser