10个帖子/ 0个新帖子
最后发表
不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
求教从机端多字节接收问题

你好,

我参考SDK里面的ble_app_peripheral中的user_svc1_led_wr_ind_handler部分,可以实现单字节数据的接收处理,请问对于手机主机端发过来的多字节数据我应该怎么处理呢,是否同样可以在这个函数里进行转存处理呢?我尝试了转存,但是并不能获取到第二个正确的字节数据。如果有例子的话最好了,期待回复。

设备:
CYibin
离线
最后看到:8个月1天前
工作人员
加入:2017-12-14 02:48
你好,

你好,

需要将特征值的长度改一下:

DEF_SVC1_LED_STATE_CHAR_LEN

不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
谢谢!解决了。顺便问一下,我需要操作IO口时间比较长

谢谢!解决了。顺便问一下,我需要操作IO口时间比较长,那么这个操作是放在user_svc1_led_wr_ind_handler这个类似的函数里面进行处理比较好呢,还是直接放在主循环进行处理呢,看官网好像并不建议直接在主循环里做任何处理。或者有其他好的建议吗

CYibin
离线
最后看到:8个月1天前
工作人员
加入:2017-12-14 02:48
你好,

你好,

是的,不建议直接在主循环里添加用户代码,并且最好在用户层面实现用户功能,不要修改到SDK文件下的任何源文件。

关于主循环,大概流程是:

而(1)

/ / 1。将消息队列中的消息一个个取出,执行(调用处理程序),直到消息队列为空- - > schedule_while_ble_on ();

/ / 2。判断是否有异步事件需要处理- > app_asynch_proc()——> app_on_system_powered ()

/ / 3。休眠条件判断- > sleep_mode = rwip_power_down ();

/ / 4。休眠流程——>如果(sleep_mode = = mode_ext_sleep) | | (sleep_mode = = mode_ext_sleep_otp_copy))

你可在消息处理程序里置位一个标志位,然后在上述第二点的app_on_system_powered()里放置你的事件处理时间比较长的函数

不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
你好,我按照这种方式在user_callback

你好,我按照这种方式在user_callback_config.h里进行了如下定义

.app_on_system_powered = user_scan_sda_flag,

然后在user_peripheral.c里定义了该函数

空白user_scan_sda_flag(空白)

wdg_freeze ();//停止看门狗定时器
如果(VAL_FLAG = = 1)

Audion_WriteSingle_CMD (ble_singlebyte);
VAL_FLAG = 0;/ / val处理完毕

else if (VAL_FLAG = = 2)

Audion_WriteMulti_CMD (ble_multibyte [0], ble_multibyte [1]);
VAL_FLAG = 0;/ / val处理完毕

wdg_resume ();//恢复看门狗定时器
wdg_reload(watchdog_default_period);
},里面就是处理时间较长的函数

实际测试发现蓝牙还是会断,我在Audion_WriteMulti_CMD, Audion_WriteSingle_CMD这两个函数里还穿插加入了rwip_schedule();,让内核去运行,但是还是不行,通过电子狗工具,发现协议栈差不多10 ms就得有一次RSSI数据获取,但是我的实际运行最小周期的操作大概有30 ms。请问是否有什么其他的好方法来解决这个问题吗?谢谢 期待你的回复

下面是电子狗的调试日志

03:06:34.493 INFO GATT写命令(连接:0x00句柄:0x001F数据:0x02)
03:06:34.496 DEBUG Task 'GATT Write Command (Connection:0x00 Handle:0x001F Data:0x02)' completed (Result:Success)
03:06:35.464 DEBUG EnhancedPeripheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI started
03:06:35.467调试任务开始(读取RSSI(连接:0x00))
03:06:35.472 DEBUG TX - ID:GAPC_GET_INFO_CMD(0x0E05)来源:TASK_ID_APP(0)目的:TASK_ID_GAPC(0)参数:0x07
03:06:35.475 DEBUG Task 'Read RSSI (Connection:0x00)' completed (Result:Success)
03:06:35.479调试inconceedPeripheral(UUID = 00000000-0000-0000-0000-770E0D0C0B0A名称= DA14580-EVB-QI) - 阅读RSSI(RSSI:-102)
03:06:36.478 DEBUG EnhancedPeripheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI started . (UUID=00000000-0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi
03:06:36.481 DEBUG任务启动(读取RSSI(连接:0x00))
03:06:36.487 DEBUG TX - ID:GAPC_GET_INFO_CMD(0x0E05)来源:TASK_ID_APP(0)目的:TASK_ID_GAPC(0)参数:0x07
03:06:36.491 DEBUG Task 'Read RSSI (Connection:0x00)' completed (Result:Success)
03:06:36.497 DEBUG enhedperipheral (UUID= 00000000000 -0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI done (RSSI:-66)
03:06:37.490调试EnganceCheCeripheral(UUID = 00000000-0000-0000-0000-770E0D0C0B0A名称= DA14580-EVB-QI) - 读取RSSI已启动
03:06:37.493调试任务启动(读取RSSI(连接:0x00))
03:06:37.499 DEBUG TX - ID:GAPC_GET_INFO_CMD(0x0E05)来源:TASK_ID_APP(0)目的:TASK_ID_GAPC(0)参数:0x07
03:06:37.501 DEBUG Task 'Read RSSI (Connection:0x00)' completed (Result:Success)
03:06:37.504 DEBUG enhedperipheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI done (RSSI:-97)
03:06:38.505 DEBUG EnhancedPeripheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI started
03:06:38.508调试任务启动(读取RSSI(连接:0x00))
03:06:38.512 DEBUG TX - ID:GAPC_GET_INFO_CMD(0x0E05)来源:TASK_ID_APP(0)目的:TASK_ID_GAPC(0)参数:0x07
03:06:38.515 DEBUG Task 'Read RSSI (Connection:0x00)' completed (Result:Success)
03:06:38.518 DEBUG enhedperipheral (UUID= 00000000000 -0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - Read RSSI done (RSSI:-95)
03:06:38.523 INFO外设断开连接(连接:0x00原因:0x08)
03:06:38.527 INFO Disconnected (Device:00000000-0000-0000-0000-770e0d0c0b0a)
03:06:38.530 DEBUG EnhancedPeripheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) - State: Ready->Idle
03:06:38.532 INFO EnhancedPeripheral (UUID= 00000000000 -0000-0000-0000-770e0d0c0b0a Name=DA14580-EVB-Qi) -断开连接事件

不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
在线后,麻烦解答一下 !非常感谢!

在线后,麻烦解答一下 !非常感谢!

CYibin
离线
最后看到:8个月1天前
工作人员
加入:2017-12-14 02:48
你好, 请问连接间隔是多少?增大连接间隔是否能避免该问题

你好,

请问连接间隔是多少?增大连接间隔是否能避免该问题

不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
我在从机端改变了超时时间,设定大于我的最大阻塞时间后可行

我在从机端改变了超时时间,设定大于我的最大阻塞时间后可行。有一点疑惑,rwip日程安排(),这个函数我穿插在我的应用部分,会有什么隐患吗

CYibin
离线
最后看到:8个月1天前
工作人员
加入:2017-12-14 02:48
你好,

你好,

从个人的经验来看,有几个注意点:

1.rwip时间表()需要花时间执行,需要评估其执行的时间不会对你的流程产生影响

2.要避免无限递归,即

空白block_function ()

块();

Rwip_schedule()

块();

假设有个消息hanlder:

void msg_handler()

block_function();

块功能不可以在消息处理程序中执行。

不理解
离线
最后看到:3周2天前
加入:2019-06-21 07:31
明白 非常感谢!

明白 非常感谢!