FreeRTOS + STM32F4 + CPP卡住时调用vTaskDelay

FreeRTOS + STM32F4 + CPP卡住时调用vTaskDelay

问题描述:

我使用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()”中。

我真的不知道为什么。

+0

您没有提供完整的代码示例,因此很难说出有什么问题 - 可能是您没有包含的代码。对某些功能做什么的口头描述通常是不够的,尤其是当涉及到诸如HardFault之类的意外行为时。话虽如此,我提供的所有数据都是为了跟踪HardFault。对于这里看看这里:http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html –

也许你不应该在中断处理程序中正确增加Systick。你应该检查你的中断tick或者检查文件末尾的freertos_config.h文件中的特殊定义,以便与hal_delay兼容。

+0

他的问题是使用extern C语句与他们的C代码。丢失extern“C”语句并且只用C++对你的代码进行修改。试图导入C语句。 – Nightforce2