Я использую драйвер STM32F405RGT + HAL + FreeRTOSv9. И код - C++. Прежде всего, когда я написал код C, проблем нет. Но C++, что-то не так.FreeRTOS + STM32F4 + CPP застревает при вызове vTaskDelay
точка входа в 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()».
Я действительно не знаю почему.
Вы не представили полный образец кода, поэтому трудно сказать, что не так - возможно, что-то с кодом, который вы не указали. Вербальное описание того, что делают некоторые функции, обычно недостаточно, особенно когда дело доходит до неожиданного поведения, такого как HardFault. Сказав это, все, что я могу предложить с предоставленными данными, - это отслеживать HardFault самостоятельно. Для этого посмотрите здесь: http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html –