我正在使用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()”。
我真的不知道为什么。
答案 0 :(得分:0)
可能你不应该在中断处理程序中正确增加Systick。您应检查中断标记或检查文件末尾文件freertos_config.h中的特殊定义,以便与hal_delay兼容freertos。