CC26x2R1笔记(11)蓝牙丢包问题(GATT_WriteNoRsp发送返回0x16:blePending)

本文探讨了蓝牙BLE中主机通过GATT_WriteNoRsp向从机写入数据时,因缓存区大小及连接间隔参数不当导致的blePending问题。提供了调整MAX_NUM_PDU和MAX_PDU_SIZE参数,以及减小连接间隔的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发送间隔:24ms
发送包长度:20字节

问题:
1:主机通过GATT_WriteNoRsp向从机写入数据,当写速率过快时,就会出现blePending

原因:这是由于出现前面设置的缓存区小和连接间隔太大等参数导致的
解决:
1:将这两个调至成这个,放在ti_ble_config.h,MAX_NUM_PDU和MAX_PDU_SIZE
在这里插入图片描述

定义6个Tx缓冲区,每个缓冲区251字节。用户应用程序应该根据自身堆栈情况进行分配。如果没有足够的堆栈,可以通过减少MAX_NUM_PDU,这样可能导致吞吐量的损失。实际使用中的最坏情况是MAX_NUM_PDU和MAX_PDU_SIZE的乘积。设计人员应该根据设备的可用内存来平衡这些参数。

#define MAX_NUM_PDU 6
#define MAX_PDU_SIZE 251

我们配置L2CAP MAX_PDU_SIZE 为255, ATT_MTU 最大 为251 读写特征值最大长度应该ATT_MTU-3=248;
//source\ti\blestack\profiles\simple_profile\simple_gatt_profile.h SIMPLEPROFILE_CHAR5_LEN Line 85
#define SIMPLEPROFILE_CHAR5_LEN 248

2:简单粗暴将连接间隔调小些
注意,在实际情况下更高的连接间隔有着明显的缺点:由于射频干扰导致的连接事件将大大降低吞吐量。因此用户需要根据所需吞吐量进行权衡。当连接间隔大于100ms后,吞吐量将不会增加。
在这里插入图片描述
将原来的8001.25ms,修改成241.24ms
将最小的连接间隔“修改成7.5ms

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200714193709775.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaV9BbGFud3U=,size_16,color_FFFFFF,t_70

bool center_Gatt_Write(uint8 char_type,uint8 *p_data,uint16_t len)
 {
   attWriteReq_t req;


 // uint8_t charVals[4] = { 0x00, 0x55, 0xAA, 0xFF }; // Should be consistent with
                                                     // those in scMenuGattWrite

   uint8 conndle_index=mac_find_connHandle(stu_other.COMMDEV_mac);

   if(conndle_index==10)  return false;

   req.pValue = GATT_bm_alloc(connList[conndle_index].connHandle, ATT_WRITE_REQ,len,NULL);//sizeof(charVals) , NULL);

   if ( req.pValue != NULL )
   {

     if(char_type==1)
         req.handle = connList[conndle_index].FFX2_Handle;//   req.handle = connList[get_currt_conn_num()-1].FFX2_Handle;
     else
         req.handle = connList[conndle_index].FFX4_Handle;

     req.len = len;
     memcpy(req.pValue,p_data,len);
     req.sig = 0;
     req.cmd = 1;//0;

//     status = GATT_WriteCharValue(connList[conndle_index].connHandle, &req,  get_selfEntity());//0;

     status_gatt=GATT_WriteNoRsp(connList[conndle_index].connHandle, &req);
     if(status_gatt != SUCCESS)
     {
       GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
       return false;
     }
   }

   return (true);
 }

可以加入QQ群:687360507
与大伙沟通交流,技术在于分享而进步

### ComfyUI 安装教程 #### 准备工作 确保计算机满足运行ComfyUI所需的最低配置要求。建议的操作环境为Windows操作系统,具备足够的磁盘空间和内存。 #### 下载安装包 可以从官方渠道获取最新的ComfyUI原生安装包[^1]。下载完成后解压到指定文件夹内,该路径应易于管理和访问。 #### 运行初始化脚本 进入解压缩后的文件夹位置,在此找到`start.bat`批处理文件并双击执行以启动应用程序首次设置流程[^4]。这一步骤会自动完成依赖项检测与安装过程,并创建必要的初始配置文件。 #### 更新至最新本 对于希望保持软件处于最前沿状态的用户而言,可利用同目录下的`update_comfyui.bat`来便捷地实现这一点——只需简单点击即可同步官方发布的改进内容。 #### 扩展功能组件加载 为了增强平台的功能性和用户体验度,推荐安装一些第三方开发的支持工具作为附加模块。例如: - **ComfyUI Manager**: 提供了一个图形界面用于管理其他自定义节点插件,极大地方便了用户的日常操作维护活动[^3]。 访问链接:<https://github.com/ltdrdata/ComfyUI-Manager> - **ComfyUI Crystools**: 增加了诸如资源占用情况监测面板等功能特性,有助于更直观地了解当前系统的性能表现状况。 访问链接:<https://github.com/crystian/ComfyUI-Crystools> 这些额外的小程序应当被放置于特定子目录(`custom_nodes`)之下以便系统能够识别它们的存在并正常运作。 ```bash cd path\to\your\ComfyUI_directory mkdir custom_nodes git clone https://github.com/ltdrdata/ComfyUI-Manager.git custom_nodes/ git clone https://github.com/crystian/ComfyUI-Crystools.git custom_nodes/ ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值