调用vTaskDelay时,FreeRTOS + STM32F4 + CPP卡住了

时间:2017-02-23 03:54:25

标签: c++ freertos

我正在使用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("startup\r\n");
    vTaskDelay(M2T(1000));
  }

  vTaskDelete(nullptr);
}

在“Command :: GetInstance()。Init()”中,创建另一个任务,在该任务中,只需要vTaskDelay(_500ms)和printf(“something \ r \ n”)。就是这样。

如果我在“启动”任务中使用“HAL_Delay()”,一切正常。在控制台中,我可以看到两个字符串 - “启动”和“某事”。但是当我在“启动”任务中使用“vTaskDelay()”时,它应该停留在“vTaskDelay()”中并且系统调用“HardFault_Handler()”。

我真的不知道为什么。

1 个答案:

答案 0 :(得分:0)

可能你不应该在中断处理程序中正确增加Systick。您应检查中断标记或检查文件末尾文件freertos_config.h中的特殊定义,以便与hal_delay兼容freertos。