在FreeRTOS上处理BLE用户事件

问题描述 投票:0回答:1

我在带有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进程中断驱动,但如果是,我将如何做到这一点以及如何详细说明a的根本原因hardfault

我尝试用user_evt_handler环绕我的vTaskSuspendAll/xTaskResumeAll,但这并没有改变任何东西。

bluetooth-lowenergy freertos nucleo
1个回答
1
投票

通过为BLE任务提供更多堆栈大小来解决问题

© www.soinside.com 2019 - 2024. All rights reserved.