我使用STM32F405RGT + HAL驅動程序+ FreeRTOSv9。代碼是C++。首先,當我編寫C代碼時,沒有問題。但是C++,錯了。在main.ccFreeRTOS + STM32F4 + CPP卡住時調用vTaskDelay
切入點
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);
}
在 「命令::的GetInstance()的init()」,創建另一個任務,並在這任務,只是vTaskDelay(_500ms)和printf(「something \ r \ n」)。就這樣。
如果我在「啓動」任務中使用「HAL_Delay()」,一切正常。在控制檯中,我可以看到兩個字符串 - 「啓動」和「某事」。但是當我在「啓動」任務中使用「vTaskDelay()」時,它應該停留在「vTaskDelay()」和系統調用「HardFault_Handler()」中。
我真的不知道爲什麼。
您沒有提供完整的代碼示例,因此很難說出有什麼問題 - 可能是您沒有包含的代碼。對某些功能做什麼的口頭描述通常是不夠的,尤其是當涉及到諸如HardFault之類的意外行爲時。話雖如此,我提供的所有數據都是爲了跟蹤HardFault。對於這裏看看這裏:http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html –