我有复杂的可变字节数组,我需要使用esp32芯片在arduino,Im中通过串行发送,所以我认为我应该有足够的RAM来处理它。但是我不确定该怎么做,因为有些变量是uint8,有些uint16,我必须通过Serial.write()以1的形式发送它们。虽然所有变量都是uint8,但我没有问题,例如:
void loop() {
uint8_t oil_temp = 0xFF; //lets assume its variable, not constant
uint8_t ambient_temp = 0xFF;
uint8_t coolant_temp = 0xFF;
uint8_t interior_temp = 0xFF;
uint8_t main_array[4] = {oil_temp, ambient_temp, coolant_temp, interior_temp};
Serial.write(main_array, 4); // sends FF FF FF FF
delay(1000);
}
添加uint16变量时出现问题
void loop() {
uint8_t oil_temp = 0xFF; //lets assume its variable, not constant
uint8_t ambient_temp = 0xFF;
uint8_t coolant_temp = 0xFF;
uint8_t interior_temp = 0xFF;
uint16_t engine_speed = 0xAAEE;
uint8_t main_array[6] = {oil_temp, ambient_temp, coolant_temp, interior_temp, engine_speed};
Serial.write(main_array, 6); // sends FF FF FF FF EE 00
delay(1000);
}
如果我尝试Serial.write(main_array, 5);
,它将发送“ FF FF FF FF EE”
我希望获得“ FF FF FF FF AA EE”,因此我可以轻松地在另一端对其进行解析。请帮助
答案 0 :(得分:2)
我认为发生的是来自engine_speed的数据被破坏了,因为在整个分配过程中,它的期望uint8_t值。
我将更明确地构建main_array
以避免出现此类问题。
uint8_t main_array[6];
main_array[0] = oil_temp;
main_array[1] = ambient_temp;
main_array[2] = coolant_temp;
main_array[3] = interior_temp;
main_array[4] = engine_speed >> 8;
main_array[5] = engine_speed & 0xFF;
您可以根据需要使用大字节序还是小字节序来切换“ main_array [4]”和“ main_array [5]”的分配。