FreeRTOS堆栈设置导致任务不执行切换
本帖最后由 wanyisq 于 2018-7-9 08:18 编辑我使用的STM32F103VE运行的STM32CubeMX生成的freertos工程。
一共有两个任务,TSAK1和TASK2都是翻转LED,TASK1的堆栈设置64,两个任务切换、运行正常。但是TASK1任务堆栈更改为128的话,就不执行任务切换,只有TASK1的任务在运行
代码如下
#define START_TASK_PRIO 1
#define START_STK_SIZE128
TaskHandle_t StartTask_Handle;
#define TASK1_TASK_PRIO 2
#define TASK1_STK_SIZE64
TaskHandle_t Task1Task_Handle;
#define TASK2_TASK_PRIO 3
#define TASK2_STK_SIZE64
TaskHandle_t Task2Task_Handle;
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
/*
xTaskCreate( (TaskFunction_t) key_task,
(const char *) "key task",
(const uint16_t) KEY_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) KEY_TASK_PRIO,
(TaskHandle_t *) &KEYTask_Handle );
*/
xTaskCreate( (TaskFunction_t) task1_task,
(const char *) "task1 task",
(const uint16_t) TASK1_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK1_TASK_PRIO,
(TaskHandle_t *) &Task1Task_Handle );
xTaskCreate( (TaskFunction_t) task2_task,
(const char *) "task2 task",
(const uint16_t) TASK2_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK2_TASK_PRIO,
(TaskHandle_t *) &Task2Task_Handle );
vTaskDelete(StartTask_Handle);
taskEXIT_CRITICAL();
}
void task1_task(void *pvParameters)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOD,LED2_Pin);
osDelay(200);
}
}
void task2_task(void *pvParameters)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOD,LED1_Pin);
osDelay(200);
}
}int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_FREERTOS_Init();
xTaskCreate( (TaskFunction_t) start_task,
(const char *) "start task",
(const uint16_t) START_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(TaskHandle_t *) &StartTask_Handle );
/* Start scheduler */
osKernelStart();
while (1)
{
}
}
好奇,坐等答案 看看FreeRTOS 配置, 你给线程运行的Heap大小多少? 是因为操作系统的堆栈配置小了。configTOTAL_HEAP_SIZE 看看这个配置是不是过小? 线程的堆栈上面已经define过了,操作系统的堆栈使用的是默认的,应该是够的。
后面经过eric2013的指点,是使用cubemx配置的Free RTOS,强制开启了CMSIS-RTOS V1封装层,任务函数就不能使用Free RTOS自己的函数了,需要使用CMSIS-RTOS的。
经过确认和更改,任务已经可以切换了。
结帖 感谢 wanyisq 发表于 2018-7-12 10:38
线程的堆栈上面已经define过了,操作系统的堆栈使用的是默认的,应该是够的。
后面经过eric2013的指点,是 ...
没有说是修改哪里,如何修改的,哎,
就这样结贴了 我也遇到相同问题,很多天了,请问要怎样使用CMSIS-RTOS解决?谢谢
页:
[1]