私は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()。初期化()"、別のタスクを作成し、その中タスク、ちょうどvTaskDelay(_500ms)とprintf(「何か\ r \ n」)。それで全部です。
「スタートアップ」タスクで「HAL_Delay()」を使用すると、すべて正常です。コンソールでは、「スタートアップ」と「何か」という2つの文字列を見ることができます。しかし、 "スタートアップ"タスクで "vTaskDelay()"を使用すると、 "vTaskDelay()"にスタックされ、システムコール "HardFault_Handler()"に移動する必要があります。
私は本当に理由を知らない。
完全なコードサンプルを提供していないため、何が間違っているのか分かりにくいです。 HardFaultなどの予期しない動作については、通常、いくつかの機能が何をしているかについての言葉による説明は十分ではありません。私が提供するデータで示唆できるのは、HardFaultを自分で追跡することだけです。それについてはこちらをご覧ください:http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html –