C++ Arduino字符串在FreeRTOS任务中不工作
我试图使用内置字符串对象读取Arduino Mega 2560上的串行数据,但在FreeRTOS任务中使用时,它不会打印串行数据,如下面的代码C++ Arduino字符串在FreeRTOS任务中不工作,c++,arduino,freertos,C++,Arduino,Freertos,我试图使用内置字符串对象读取Arduino Mega 2560上的串行数据,但在FreeRTOS任务中使用时,它不会打印串行数据,如下面的代码 void TaskSerialIn(void *pvParameters) { String json; for(;;) { while(Serial.available()) { json = Serial.readStringUntil('\n'); Serial.pr
void TaskSerialIn(void *pvParameters)
{
String json;
for(;;) {
while(Serial.available()) {
json = Serial.readStringUntil('\n');
Serial.println(json); // this code not printing anything
}
vTaskDelay(200 / portTICK_PERIOD_MS);
}
}
即使我将字符串声明为全局变量,它也不起作用。
而下面的代码在使用字符数组存储字节时起作用
char serialJson[65];
void TaskSerialIn(void *pvParameters)
{
char * jsonStr;
int i = 0;
for(;;) {
i = 0;
while(Serial.available()) {
char inChar = (char) Serial.read();
serialJson[i++] = inChar;
if(inChar == '\n') {
serialJson[i] = '\0';
Serial.print(serialJson);
}
}
vTaskDelay(200 / portTICK_PERIOD_MS);
}
}
对于如何使用字符串读取串行数据,如有任何帮助,将不胜感激。您所说的“它不工作”是什么意思?您到底看到了什么?当发送方逐字符发送数据而不是像第二个示例中的字符串发送数据时,可以更好地控制在串行端口上读取数据的轮询。第一个示例错误看起来更像是一个同步问题。@TisteAndii我对第一个代码段进行了评论,提到了哪一行在预期打印时没有打印任何内容。我更新了帖子。如果您结合ReadStringTill的超时为1s的事实,并丢弃调用后收集的所有字符,则很可能您只是缺少分隔符。为什么需要使用Arduino字符串?C字符串更高效、更可靠,没有任何潜在的内存问题。你说的“它不工作”是什么意思?您到底看到了什么?当发送方逐字符发送数据而不是像第二个示例中的字符串发送数据时,可以更好地控制在串行端口上读取数据的轮询。第一个示例错误看起来更像是一个同步问题。@TisteAndii我对第一个代码段进行了评论,提到了哪一行在预期打印时没有打印任何内容。我更新了帖子。如果您结合ReadStringTill的超时为1s的事实,并丢弃调用后收集的所有字符,则很可能您只是缺少分隔符。为什么需要使用Arduino字符串?C字符串更高效、更可靠,没有任何潜在的内存问题。