bluetooth-lowenergy - 在 FreeRTOS 上处理 BLE 用户事件
问题描述
我在带有 BlueNRG 防护罩的 ST Nucleo 板上运行 FreeRTOS。BLE 堆栈的初始化工作,设备自己做广告,我可以建立连接。我的问题是,一旦用户事件到达(例如服务发现),程序就会以hardfault_handler()
.
我的 RTOS 上运行了 3 个任务,其中一个应该是处理用户事件的专用 BLE 任务。
void hci_user_evt_proc(void)
{
tHciDataPacket * hciReadPacket = NULL;
/* process any pending events read */
while (list_is_empty(&hciReadPktRxQueue) == FALSE)
{
list_remove_head (&hciReadPktRxQueue, (tListNode **)&hciReadPacket);
if (hciContext.UserEvtRx != NULL)
{
hciContext.UserEvtRx(hciReadPacket->dataBuff);
}
list_insert_tail(&hciReadPktPool, (tListNode *)hciReadPacket);
}
}
这取自 ST 示例代码。如果我要么
- 只需运行这一项任务或
- 赋予 BLE 任务更高的优先级
两种解决方案都具有相同的结果 - 并且不再具有多任务系统。我不知道是否必须调整示例代码以在多任务系统中运行,或者我是否必须运行 BLE 进程中断驱动,但如果是,我将如何做到这一点以及如何详细说明导致hardfault
?
我试图user_evt_handler
用 a包围我,vTaskSuspendAll/xTaskResumeAll
但这并没有改变任何东西。
解决方案
通过为 BLE 任务提供更多堆栈大小来解决问题
推荐阅读
- python - 保存功能在 Tkinter 窗口中不起作用
- vue.js - 如何强制nuxt生成html不在一行
- c++ - std::make_pair、std::unordered_map 和键类型移动构造函数的使用
- flutter - 使用 Flutter 的 iOS 版本键入键盘时如何处理 StreamBuilder 的 ConnectionState?
- python - Django Channels 不向 Android App 发送消息
- algorithm - 识别简单图像中的线段
- java - JavaFX 使用 JFoenix 框架更改关闭选项卡按钮颜色
- .net - 无法附加并进入到 Visual Studio 2019 上的 wcf 进程调试
- angular - 为什么订阅在新的浏览器窗口中不起作用
- python - 操作 Dataframe 数据(在索引中查找具有最高项的行)