读取不同长度的UART

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
dx3gerst
离线
最后看到:3年10个月前
加入:2017-03-29 35
读取不同长度的UART

嗨,对话框中,

有一个问题读取不同长度的uart -消息从我的传感器。收到的UART的标准长度是4字节,但有时我会收到一个10字节的消息。
输入数组的字节3和4是数据计数器,只有当输入数组大于4字节时,它们才不等于0。

所以我的方法是总是读取长度为4字节的命令:

uart_buf [4];
uart_buf_long [6];

...
ad_uart_read(dev, uart_buf, 4, OS_EVENT_FOREVER);

然后我检查数据计数器-字节:
If (uart_buf[2] !=0 || uart_buf[3] !=0){
ad_uart_read (dev uart_buf_long 6, OS_EVENT_FOREVER);

所以第一部分读4字节工作得很好,但如果我得到10字节uart -消息,我将卡在第二个ad_uart_read例程。
所以你能告诉我如何处理这个问题吗?

谢谢

设备:
MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨dx3gerst,

嗨dx3gerst,

我没有看到任何错误的代码,你已经粘贴,ad_uart_read()将阻塞任务,直到它从UART的数据量,所以只要你从传感器发送6个字节,然后任务应该unblock。如果不工作,那么可能设备已经进入睡眠模式,不能从UART接收任何数据?您是否尝试过在不使用任何睡眠模式的情况下测试代码?你确定传感器会发送你所期望的额外的6字节数据吗?

由于MT_dialog

dx3gerst
离线
最后看到:3年10个月前
加入:2017-03-29 35
嗨,对话框中,

嗨,对话框中,

谢谢你的回答。我的代码是基于ble_multi_link演示。我不认为有任何睡眠模式被执行。分别将睡眠模式的代码放入注释中

/*设置所需的睡眠模式。* /
/ / pm_set_wakeup_mode(真正的);
/ / pm_set_sleep_mode (pm_mode_extended_sleep);

所以设备应该一直处于活动模式,对吧?
是的,我用终端工具检查了传感器发送的字节,它确实发送了10字节,其中包括4个“标准字节”,我总是接收和6个额外的字节。

有没有其他的方法来实现这个功能?

谢谢!

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨dx3gerst,

嗨dx3gerst,

是的,如果注释掉这些函数,那么设备将不会进入睡眠模式,但是,建议设置pm_set_sleep_mode(pm_mode_active);而且pm_set_wakeup_mode(true)与设备的休眠无关,而是与唤醒过程有关,所以它不会影响你的代码。

我没有看到任何错误的代码,我也尝试了它在我的一边,我可以启动BLE活动通过等待10字节从UART使用下面的代码在system_init()函数:

dev = ad_uart_open (SERIAL2);

char uart_buf [4];
char uart_buf_long [6];

ad_uart_read(dev, uart_buf, 4, OS_EVENT_FOREVER);

If (uart_buf[2] !=0 || uart_buf[3] !=0){
ad_uart_read (dev uart_buf_long 6, OS_EVENT_FOREVER);

也许您可以尝试从传感器一个一个地获取字节,并检查它是否工作,但在任何情况下,您都必须调试它,以检查为什么会发生这种情况。

由于MT_dialog