嗨,对话框中,
我遵循uart2_loopback_test.c的示例来编写我的uart应用程序,其中我需要从uart外设一行一行地接收字符串。
因此,我调用uart_read读取一个字节,并在接收到一个字节后触发回调;在uart_read_cb()中,一旦检测到符号换行和返回,就发送一条消息,然后调用uart read来强制进行无休止的uart读取。
代码如下所示。
我的问题是这个方法,只接收到16字节,而uart外设发送超过16字节(实际上,让我们说30字节)。
我已经通过一些实验验证了uart外设确实发送了30字节。
您能帮忙理解一下是什么问题吗?
谢谢,
Wenzhe
Static void uart_read_cb(uint8_t status)
{
//将接收到的字节放入环形缓冲区
ring_put_byte (&g_at_ring uart_rxbuf [0]);
如果(uart_rxbuf [0] = = ' \ n ' & & uart_rxbuf [1] = = \ r) {
//发送消息给应用程序任务,指示收到的一行响应
struct lte_atrsp_line_ind *req = KE_MSG_ALLOC_DYN(APP_MSG_LTE_ATRSP, TASK_APP, TASK_APP,
lte_atrsp_line_ind, 0);
申请- > len = ring_get_byte_count (&g_at_ring);
申请- > line_count = ring_get_availble_line_counter (&g_at_ring);
ke_msg_send(要求的);
}
uart_rxbuf [1] = uart_rxbuf [0];
//开始下一个异步读1个字符。
uart_read (uart_rxbuf、大小uart_read_cb);
}
空白ring_init(空白)
{
ring_t *环= &g_at_ring;
环- > BUFFER_SIZE = AT_RING_BUF_SIZE;
环- > buffer_count = 0;
环- > buffer_head = 0;
环- > buffer_tail = 0;
环- > line_count = 0;
MEMSET(环- > buf 0 AT_RING_BUF_SIZE);
LOGD(“开始监控uart”);
uart_read (uart_rxbuf 1 uart_read_cb);
}
我得到了它。
在回调调用的函数中有一个使用uart2的Debug打印,这会减慢回调的执行。移除调试打印,问题修复。
嗨wenzhe,
我为迟来的回复道歉。谢谢你的提示,很高兴你解决了。
谢谢,PM_Dialog