freertos STM32F4 CPP卡在呼叫VtaskDelay时卡住

FreeRTOS+STM32F4+CPP stuck when call the vTaskDelay

本文关键字:VtaskDelay 呼叫 STM32F4 CPP freertos      更新时间:2023-10-16

我正在使用stm32f405rgt hal驱动程序 freertosv9。代码为C 。首先,当我编写C码时,没有问题。但是C ,有问题。

Main.cc

中的入口点
extern "C" int main(void) {
  HAL_Init();
  SystemClock_Config();
  xTaskCreate(startup, "startup", STARTUP_TASK_STACK, NULL, STARTUP_TASK_PRIO, NULL);
  vTaskStartScheduler();
  return 0;
}

和"启动"任务是

static void startup(void *param) {
  Config::GetInstance().Init();
  Command::GetInstance().Init();
  while (1) {
    trace("startuprn");
    vTaskDelay(M2T(1000));
  }
  vTaskDelete(nullptr);
}

在" command :: getInstance()。init()"中,创建另一个任务,在该任务中,只有vtaskdelay(_500ms)和printf(" sometsing r n")。仅此而已。

如果我在"启动"任务中使用" hal_delay()",则一切都可以。在控制台中,我可以看到两个字符串 - "启动"answers"某物"。但是,当我在"启动"任务中使用" vtaskdelay()"时,它应该粘在" vtaskdelay()"和系统调用" hardfault_handler()"。

我真的不知道为什么。

可能您不应该在中断处理程序中正确递增系统。您应该在文件末尾检查中断刻度或检查文件freertos_config.h中的特殊定义,以与hal_delay兼容freertos。