嗨,对话框中,
有一个问题读取不同长度的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例程。
所以你能告诉我如何处理这个问题吗?
谢谢
设备:

嗨dx3gerst,
我没有看到任何错误的代码,你已经粘贴,ad_uart_read()将阻塞任务,直到它从UART的数据量,所以只要你从传感器发送6个字节,然后任务应该unblock。如果不工作,那么可能设备已经进入睡眠模式,不能从UART接收任何数据?您是否尝试过在不使用任何睡眠模式的情况下测试代码?你确定传感器会发送你所期望的额外的6字节数据吗?
由于MT_dialog
嗨,对话框中,
谢谢你的回答。我的代码是基于ble_multi_link演示。我不认为有任何睡眠模式被执行。分别将睡眠模式的代码放入注释中
/*设置所需的睡眠模式。* /
/ / pm_set_wakeup_mode(真正的);
/ / pm_set_sleep_mode (pm_mode_extended_sleep);
所以设备应该一直处于活动模式,对吧?
是的,我用终端工具检查了传感器发送的字节,它确实发送了10字节,其中包括4个“标准字节”,我总是接收和6个额外的字节。
有没有其他的方法来实现这个功能?
谢谢!
嗨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