FreeRTOS任务挂起与恢复

任务挂起函数:

复制代码
参数:xTaskToSuspend:待挂起任务的任务句柄,为NULL表示挂起任务自身
需将宏INCLUDE_vTaskSuspend配置为 1

void vTaskSuspend( TaskHandle_t xTaskToSuspend )

任务恢复函数:

复制代码
参数:	INCLUDE_vTaskSuspend必须定义为1
不论任务被使用 vTaskSuspend() 挂起多少次,只需调用 vTaskResume() 一次,即可使其继续执行。被恢复的任务会重新进入就绪状态。

void vTaskResume( TaskHandle_t xTaskToResume )

任务恢复函数(中断中恢复)

复制代码
返回值如下:
    pdTRUE:任务恢复后需要进行任务切换
    pdFALSE:任务恢复后不需要进行任务切换

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )

挂起与恢复调度器:

复制代码
vTaskSuspendAll():挂起任务调度器,调度器不会进行任务切换,当前任务一直运行。

xTaskResumeAll():恢复任务调度器,调度器继续任务切换。

我们刚开始就是把相关的宏定义打开,只有把前两个宏定义为1(打开)才可以使用挂起和恢复函数

复制代码
#define INCLUDE_vTaskSuspend                            1
#define INCLUDE_xResumeFromISR                          1

/* 开启跟踪task信息 */
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1

只需要修改Task3里面的逻辑就行:

复制代码
/* 任务3:按键1按下就删除任务1 */
/* Key1按下,挂起任务1;Key2按下,恢复任务1
   Key3按下,挂起调度器;Key4按下,恢复调度器 */

char Task_info[500];  //定义一个字符数组,用于接收任务信息字符串

void Task3(void *pvParameters)
{
    uint8_t key = 0;
    while(1)
    {
        printf("任务3执行...\r\n");
        key = Key_Detect();
        if(key == KEY1_PRESS)
        {
            /* 挂起任务1 */
            printf(">>>>>挂起Task1...\r\n");
            vTaskSuspend(Task1_Handle);
        }
        else if(key == KEY2_PRESS)
        {
            /* 恢复任务1 */
            printf("<<<<<恢复Task1...\r\n");
            vTaskResume(Task1_Handle);
        }
        else if(key == KEY3_PRESS)
        {
            /* 挂起调度器 */
            printf(">>>>>挂起调度器...\r\n");
            vTaskSuspendAll();
        }
        else if(key == KEY4_PRESS)
        {
            /* 恢复调度器 */
            printf("<<<<<恢复调度器...\r\n");
            xTaskResumeAll();
        }

        /* 打印任务的状态 */
        vTaskList(Task_info);
        printf("%s\r\n", Task_info);


        vTaskDelay(500);
        /* 因为任务3的优先级最高,所以需要延时500ms,让他让出CPU资源给任务1和任务2 */
    }
}
相关推荐
大漠飞鹰66662 小时前
【Uart串口-GD32无标题】
stm32·单片机·嵌入式硬件
亮工硬件2 小时前
1-8 简易串口通讯协议(UART + 自定义帧协议)
笔记·stm32·单片机·嵌入式硬件·学习
星栖与芯2 小时前
STM32MP157 M4 指针避坑(三):生命周期与内存踩踏——HardFault 重灾区
java·网络·stm32
wuyk5553 小时前
从零吃透 MQTT 通信|第 6 章 MQTT 主题、过滤器、通配符、订阅管理、拒收机制详解与代码实现
c语言·stm32·学习
周洲083013 小时前
STM32 最简工程搭建|标准库/HAL库规范化模板,零冗余可直接落地
stm32·单片机·嵌入式硬件
周洲083017 小时前
STM32 串口不定长接收|空闲中断 IDLE 方案,无固定帧长限制,项目实战
stm32·单片机·嵌入式硬件
我和头发拼了19 小时前
STM32--10硬件读写MPU6050
stm32·单片机·嵌入式硬件
糖糖单片机设计21 小时前
基于STM32的鱼缸水质检测系统
stm32·单片机·嵌入式硬件
wuyk5551 天前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习