⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
3个帖子/ 0个新帖子
最后发表
wenzhe
离线
最后看到:5个月1个星期前
加入:2020-03-27十六12
Uart仅收到16字节

嗨,对话框中,

我遵循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);

}

设备:
wenzhe
离线
最后看到:5个月1个星期前
加入:2020-03-27十六12
我得到了它。

我得到了它。

在回调调用的函数中有一个使用uart2的Debug打印,这会减慢回调的执行。移除调试打印,问题修复。

PM_Dialog
离线
最后看到:1天9小时前
工作人员
加入:2018-02-08 11:03
嗨wenzhe,

嗨wenzhe,

我为迟来的回复道歉。谢谢你的提示,很高兴你解决了。

谢谢,PM_Dialog