使用串口打印后发现按下key0后没反应 但是复位按下 串口就会打印task2已删除
可能是程序中任务删除没有正确处理,可以检查 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
如果我的回答解决了您的问题,请采纳我的回答