自定义AT命令,读取的数据不完整
Posted: Tue May 26, 2026 2:34 am
我参考文档(https://docs.espressif.com/projects/esp ... mmand-port),读取未指定长度的数据,收到的数据不完整,是什么原因?下面是循环的代码,比如我在AT port输入了一段数据,主要是"remain_len = esp_at_port_get_data_length();"这里,数据未接收完,为什么remain_len是0?
while (xSemaphoreTake(s_at_sync_sema, portMAX_DELAY)) {
memset(s_buffer, 0, sizeof(s_buffer));
received_len =
esp_at_port_read_data((uint8_t *)s_buffer, sizeof(s_buffer) - 1);
if (received_len == 0)
continue;
if ((received_len == 5 && strncmp(s_buffer, "+++\r\n", 5) == 0) ||
(received_len == 3 && strncmp(s_buffer, "+++", 3) == 0)) {
esp_at_port_exit_specific();
break;
}
s_buffer[received_len] = '\0'; // 确保字符串以 null 结尾
COPY_BUFFER(s_buffer); // 复制s_buffer到另外的buffer
remain_len = esp_at_port_get_data_length();
if (remain_len > 0) { // 数据未完整,继续读取
esp_at_port_recv_data_notify(remain_len, portMAX_DELAY);
} else {
PROCESS_BUFFER(); // 数据完整,处理
}
}
while (xSemaphoreTake(s_at_sync_sema, portMAX_DELAY)) {
memset(s_buffer, 0, sizeof(s_buffer));
received_len =
esp_at_port_read_data((uint8_t *)s_buffer, sizeof(s_buffer) - 1);
if (received_len == 0)
continue;
if ((received_len == 5 && strncmp(s_buffer, "+++\r\n", 5) == 0) ||
(received_len == 3 && strncmp(s_buffer, "+++", 3) == 0)) {
esp_at_port_exit_specific();
break;
}
s_buffer[received_len] = '\0'; // 确保字符串以 null 结尾
COPY_BUFFER(s_buffer); // 复制s_buffer到另外的buffer
remain_len = esp_at_port_get_data_length();
if (remain_len > 0) { // 数据未完整,继续读取
esp_at_port_recv_data_notify(remain_len, portMAX_DELAY);
} else {
PROCESS_BUFFER(); // 数据完整,处理
}
}