freertos任务删除删不掉

使用串口打印后发现按下key0后没反应 但是复位按下 串口就会打印task2已删除

img

img

img

可能是程序中任务删除没有正确处理,可以检查 FreeRTOS 任务删除的代码,看看是否有任何异常,例如:

是否使用正确的函数,像 vTaskDelete() 或 vTaskDeleteFromISR() 来删除任务?
是否调用 vTaskEndScheduler() 来关闭任务调度?
是否在任务删除之前有任何锁定,或者在删除之后有任何空闲未释放?
是否在任务删除时使用了错误的句柄?
等等。

以下答案引用自GPT-3大模型,请合理使用:

片段。

原因可能是在任务删除时没有真正的删除,可能是使用了空格等随机字符而导致任务没有删除。

如果要删除任务,可以使用以下代码片段:

/* 任务删除 */

typedef void (*DeleteTask_func_t)(void *pvData);

/* 删除任务 */

DeleteTask_func_t deleteTask = NULL;

void *pvData = NULL;



/* 获得任务 */

unsigned int taskNumber = 0;

 BaseType_t BaseType = NULL;

portSTACK_t * portStack = NULL;

portBASE_t * portBase = NULL;



/* 从串口读取任务 */

portBASE_t portIn = NULL;

/* 串口数据 */

char dataInBuffer[100];



/* 从串口读取任务的值 */

int taskValue = 0;



/* 任务列表 */

taskList_t taskList = {0};



/* 初始化串口 */

void SerialInit(void)

{

/* 串口参数 */

uart_config_t uartConfig;

uartConfig.baudRate = 9600;

uartConfig.dataBits = 8;

uartConfig.parity = UART_PARITY_NONE;

uartConfig.stopBits = UART_STOPBITS_1;

uartConfig.flowControl = UART_FLOWCONTROL_DISABLE;



/* 串口初始化 */

USART_Init(&uartConfig);

}



/* 任务删除函数 */

void DeleteTask(void)

{

/* 判断任务是否存在 */

if (taskNumber != 0)

{

/* 从串口读取任务值 */

taskValue = getTaskValue();



/* 如果任务值不等于0则删除任务 */

if (taskValue != 0)

{

/* 从串口读取任务的值 */

taskValue = getTaskValue();



/* 删除任务 */

deleteTask(taskNumber, pvData);

}

}

}



/* 获取任务值 */

int getTaskValue(void)

{

/* 从串口读取任务 */

portIn = serialGet();

/* 把数据存储到数组中 */

memcpy(dataInBuffer, portIn, sizeof(dataInBuffer));



/* 返回任务值 */

return atoi(dataInBuffer);

}



/* 串口打印 */

void SerialPrint(const char *format, ...)

{

va_list argp;

char dataInBuffer[100];

int i;



/* 串口打印 */

serialPut(format, argp);

/* 把数据存储到数组中 */

memcpy(dataInBuffer, argp, sizeof(dataInBuffer));

/* 打印数组 */

printf("%s

", dataInBuffer

如果我的回答解决了您的问题,请采纳我的回答