1、问题描述
GD32F303移植完FreeRTOS后创建多个任务,运行的时候只有一个任务在运行,其余任务处于卡死不运行状态,
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //进入临界区
//上位机调试线程
xTaskCreate((TaskFunction_t )task1_task,
(const char* )"task1_task",
(uint16_t )TASK1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK1_TASK_PRIO,
(TaskHandle_t* )&Task1Task_Handler);
//电机控制线程
xTaskCreate((TaskFunction_t )task2_task,
(const char* )"task2_task",
(uint16_t )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_TASK_PRIO,
(TaskHandle_t* )&Task2Task_Handler);
//ADC采集线程
xTaskCreate((TaskFunction_t )task3_task,
(const char* )"task3_task",
(uint16_t )TASK3_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK3_TASK_PRIO,
(TaskHandle_t* )&Task3Task_Handler);
vTaskDelete(StartTask_Handler); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
2、解决办法
经过查阅资料和实际调试后发现之前设置的系统分配内存不够用导致的会卡死的问题,解决办法是找到FREERTOS_CONFIG.H里面的#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) ) /* 2 Kbytes */把内存修改后问题解决了。
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES ( 5 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 10 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 0
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
版权声明:本文为qq_48453068原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。