问题如下:
在Peripheral基础上更改的程序,手机作为主机进行连接调试,几乎很难连接成功串口debug显示reason:0x3e;
调试发现:
当关闭程序中一处自定义的TMOS任务后可正常连接;
此任务将原500ms时间改到5000ms时可正常连接;
此任务时间改到1000ms连接成功几秒后自断开;
此TMOS任务耗时大致在2ms左右,任务中会触发中断方式的adc开始一定次数的转换。此任务中的一些变量会和1ms的硬件定时器中断有关联(中断内耗时约5us);
问题如下:
在Peripheral基础上更改的程序,手机作为主机进行连接调试,几乎很难连接成功串口debug显示reason:0x3e;
调试发现:
当关闭程序中一处自定义的TMOS任务后可正常连接;
此任务将原500ms时间改到5000ms时可正常连接;
此任务时间改到1000ms连接成功几秒后自断开;
此TMOS任务耗时大致在2ms左右,任务中会触发中断方式的adc开始一定次数的转换。此任务中的一些变量会和1ms的硬件定时器中断有关联(中断内耗时约5us);
看看能不能指引一下调试方向,找了几天实在找不到原因。谢谢!
BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E
蓝牙会很难连接,或者连上断开。
有几点需要注意:①TMOS任务书写规范
WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)
②禁止在中断中调用
③连接间隔导致的问题可以参见这个帖子
CH582广播和连接间隔的优先级可以调高吗? - 沁恒微电子社区 (wch.cn)
④上面你提到了ADC和主从建立连接,应该是通过ADC采集数据然后通过蓝牙发送出去。提供一个思路,ADC正常采集,采集完数据置一个标志,同时TMOS不停的查询这个标志,当查询到标志为true时,通过调用通道4将数据发送出去或者采取自定义的方式通过蓝牙发数据出去。
你也可以具体描述一下你的需求,我们帮忙看看。
问题已解决,谢谢!
嗯,adc数据都是通过中断放到数组中,然后任务里查询标志处理数据;
修改连接间隔有所改善,不过很快还是会掉线,逐步排查代码后发现adc处理任务中指针可能会发生溢出,修改后正常;
另请教:
主机例程中的 类似 DEFAULT_UPDATE_MAX_CONN_INTERVAL和DEFAULT_CONNECTION_TIMEOUT的区别?
这两个参数都会出现在?GAPRole_UpdateLink函数中:
DEFAULT_UPDATE_MAX_CONN_INTERVAL是更新最大连接间隔,
DEFAULT_UPDATE_CONN_TIMEOUT是底层其实每个连接间隔从机都会有空包回应,那么这个参数就是多久没回应就会超时。