【发布时间】:2019-09-23 16:03:26
【问题描述】:
我有 STM32F746ZG Nucleo-144pin 板并使用 STMCubeMx 生成代码。 我选择了CubeMx提供的10.0.0版本的FreeRTOS,工具链是SW4STM32。
我做了两个任务,以下是我的功能。 我的代码在这里:
void led1_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(1000);
}
}
void led2_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
HAL_Delay(4100);
}
}
- 任务优先级。
我发现如果两个任务具有相同的任务优先级,这两个任务可以正常工作,但如果它们具有不同的任务优先级,那么低任务就不能工作。
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL); ==> Works fine.
----------------------------------------------------------------------------
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> This task is not working.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 3, NULL); ==> Works fine.
- 任务堆栈大小。
如果两个任务的堆栈大小加起来大于 3 KB,则确认该任务没有正常工作。 下面的代码可以正常工作。
xTaskCreate(led1_task, "led1_task", 2048, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL); ==> Works fine.
但是,如果堆栈大小如下更改,第二个任务将不起作用。
xTaskCreate(led1_task, "led1_task", 2048, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 2048, NULL, 2, NULL); ==> This task is not working.
尝试将 STM32F746ZGTx_FLASH.ld 中的 _Min_Stack_Size 从 0x400 更改为 0x4000 也有同样的问题。
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required account of heap */
_Min_Stack_Size = 0x4000; /* required account of stack */
谁能解释一下这个原因?
【问题讨论】:
标签: stm32 freertos stm32f7 cubemx stm32cubemx