完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在 PSOC6 上有一个应用程序,FreeRTOS 在双核模式下运行 BLE。 它通过一连串的大型通知(512 ATT MTU 大小,495 字节的有效载荷)快速卸载数据。 该项目以 " ce223508_psoc6_ble_multislave_RTOS 为例,"用于设置能够处理多个从站(BLE 连接)的 BLE 任务,以及 ce222046_throughput_measuring 的卸载/通知参数以实现最大吞吐量。" "
所有通知均通过此方法发送,在调用 API 之前,将检查连接状态、忙碌状态和通知启用状态: uint8_t i;/* Send notification top all the connected device */for(i = 0; i < CY_BLE_CONN_COUNT; i++){ /* Confirm that the BLE stack is ready */ if (Cy_BLE_GATT_GetBusyStatus(appConnHandle.attId) == CY_BLE_STACK_STATE_FREE) { /* Check if the client/slave is both connected and subscribed to this notification */ if((Cy_BLE_GetConnectionState(appConnHandle) == CY_BLE_CONN_STATE_CONNECTED ) Cy_BLE_GATTS_IsNotificationEnabled( appConnHandle, handleValuePair.attrHandle)) { /* Send BLE notification */ cy_stc_ble_gatts_handle_value_ntf_t param = { /* Fill all fields of the Write request structure ... */ .connHandle = appConnHandle, .handleValPair = handleValuePair, }; bleApiResult = Cy_BLE_GATTS_Notification( param); /* Check if the operation has been successful */ if(bleApiResult == CY_BLE_SUCCESS) { DebugPrintf("Info : BLE - Sent notification. rn"); } else { DebugPrintf("Failure! : BLE - Sending notification. Error Code: %d rn", bleApiResult); } } } else { /* Stack is busy, the current notification data will be dropped */ Task_DebugPrintf("Error : BLE - Stack busy to send notification", 0u); }} 当 BLE 组件中的 BLE 连接"的最大数量设置"为 1 时,应用程序可以正常运行。 但是,如果 BLE 连接"的最大数目设置"为 2,则在快速发送通知时,我开始收到来自 cy_BLE_Gatts_Notification(或 " cy_BLE_Gatts_sendNotification)方法的 CY_BLE_ERROR_MEMORY_ALLOCATION_FAILED " 错误响应,这最终会导致 CM4 故障。 无需连接第二个 BLE 设备即可导致此问题,仅仅允许一秒钟似乎就会导致此问题。 在呼叫发送通知期间,我从未看到 STACK_BUSY 事件。 我在发送通知之前和之后都调用 cy_ble_processEvents ()。 我试过从各个角度调试这个问题,更改 BLE 消息有效载荷的大小,更改 CM0 和 CM4 的分配内存,但无法解决问题。 |
|
相关推荐
1个回答
|
|
如果在PSOC6上运行BLE应用程序时遇到CY_BLE_ERROR_MEMORY_ALLOCATION_FAILED和CM4出现故障的问题,可以考虑以下解决方法:
1. 内存分配失败:CY_BLE_ERROR_MEMORY_ALLOCATION_FAILED 表示内存分配失败,可能是由于可用内存不足引起的。可以尝试使用动态内存分配器(如malloc)来分配所需的内存,确保在使用动态内存时必要的内存管理策略,并避免内存泄漏和内存碎片。 2. CM4故障:如果CM4出现故障,可能是由于程序逻辑错误或不正确的代码导致的。建议检查代码逻辑,确保所有的指针和内存访问操作都是有效的,并且没有空指针引用或越界内存访问。还可以通过使用断点调试功能来跟踪代码执行的情况,以帮助确定故障的原因。 3. 调试和优化:可以使用调试工具和性能分析工具来识别性能瓶颈和内存使用情况。可以使用FreeRTOS的性能分析器来监视任务的CPU利用率和内存使用情况。还可以使用HeapAnalyzer等工具来检查内存分配和释放的情况,以确保内存管理的正确性。 4. 优化BLE通知:如果发送大型通知导致问题,可以考虑优化BLE通知的方式。可以尝试减小通知的大小,或者使用更小的ATT MTU来发送通知。还可以优化发送通知的算法和方式,例如使用缓冲区或DMA进行数据传输,以提高效率和吞吐量。 综上所述,解决PSOC6发送通知时遇到的问题需要综合考虑内存管理、代码逻辑、调试和优化等方面的因素,并根据具体情况采取相应的解决方法。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
726 浏览 0 评论
777 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
680 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1149 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1120 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11800 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 06:52 , Processed in 0.743936 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号