gpt4 book ai didi

c++ - FreeRTOS+STM32F4+CPP调用vTaskDelay时卡住

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:53 24 4
gpt4 key购买 nike

我正在使用 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()”,一切正常。在控制台中,我可以看到两个字符串——“startup”和“something”。但是当我在“启动”任务中使用“vTaskDelay()”时,它应该卡在“vTaskDelay()”和系统调用“HardFault_Handler()”中。

我真的不知道为什么。

最佳答案

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

关于c++ - FreeRTOS+STM32F4+CPP调用vTaskDelay时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com