【正点原子FreeRTOS学习笔记】————(3)FreeRTOS的任务挂起与恢复

一、任务的挂起与恢复的API函数(熟悉)

在这里插入图片描述
挂起:挂起任务类似暂停,可恢复; 删除任务,无法恢复,类似“人死两清”
恢复:恢复被挂起的任务
“FromISR”:带FromISR后缀是在中断函数中专用的API函数

任务挂起函数介绍

void vTaskSuspend(TaskHandle_t xTaskToSuspend) 

在这里插入图片描述

此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。
无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。
注意:当传入的参数为NULL,则代表挂起任务自身(当前正在运行的任务)

任务恢复函数介绍(任务中恢复)

void vTaskResume(TaskHandle_t xTaskToResume) 

在这里插入图片描述
使用该函数注意宏:INCLUDE_vTaskSuspend必须定义为 1
注意:任务无论被 vTaskSuspend() 挂起多少次,只需在任务中调用 vTakResume() 恢复一次,就可以继续运行。且被恢复的任务会进入就绪态!

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

BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume)  

在这里插入图片描述
函数:xTaskResumeFromISR返回值描述如下:
在这里插入图片描述
使用该函数注意宏:INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1
该函数专用于中断服务函数中,用于解挂被挂起任务
注意:中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级

二、任务挂起与恢复实验(掌握)

1、实验目的:学会 使用FreeRTOS中的任务挂起与恢复相关API函数:vTaskSuspend( )、
vTaskResume( )、xTaskResumeFromISR( )
2、实验设计:将设计四个任务:start_task、task1、task2、task3
四个任务的功能如下:
在这里插入图片描述
创建任务过程与上一节动态任务创建方法一样,只有任务三有一点变化

/**
 * @brief       task3
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void task3(void *pvParameters)
{
    uint8_t key = 0;
    
    while (1)
    {
        key = key_scan(0);
        
        switch (key)
        {
            case KEY0_PRES:                     /* 挂起任务1 */
            {
                vTaskSuspend(Task1Task_Handler);
                break;
            }
            case KEY1_PRES:                     /* 恢复任务1 */
            {
                vTaskResume(Task1Task_Handler);
                break;
            }
            default:
            {
                break;
            }
        }
        
        vTaskDelay(10);
    }
}

三、任务挂起和恢复API函数解析(熟悉)

任务挂起函数内部实现
1、获取所要挂起任务的控制块
通过传入的任务句柄,判断所需要挂起哪个任务,NULL代表挂起自身

2、移除所在列表
将要挂起的任务从相应的状态列表和事件列表中移除(就绪或阻塞列表)

3、插入挂起任务列表
将待挂起任务的任务状态列表项插入到挂起态任务列表末尾

4、判断任务调度器是否运行
在运行,更新下一次阻塞时间,防止被挂起任务为下一次阻塞超时任务;
调度器没有运行,判断挂起任务数是否等于任务总数,是:当前控制块赋值为NULL,否:寻找下一个最高优先级任务

5、判断待挂起任务是否为当前任务
如果挂起的是任务自身,且调度器正在运行,需要进行一次任务切换

任务恢复函数内部实现
1、恢复任务不能是正在运行任务

2、判断任务是否在挂起列表中
是:就会将该任务在挂起列表中移除, 将该任务添加到就绪列表中

3、判断恢复任务优先级
判断恢复的任务优先级是否大于当前正在运行的 是的话执行任务切换

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 正点原子freertos pdf是一份详细的技术文档,主要介绍了正点原子FreeRTOS实时操作系统的基本架构和实现方法。该文档详细介绍了FreeRTOS任务管理、时间管理、内存管理、中断管理、队列管理等相应的应用、算法、数据结构、函数和宏等的使用方法和实现原理。该文档还包括了多个实际例子,展示了如何使用FreeRTOS在真实项目中实现任务调度、时间管理、共享资源管理等功能。 该文档对于想要学习和掌握FreeRTOS实时操作系统的开发人员来说,是一份非常有价值的资料。通过学习该文档,开发人员可以深入了解FreeRTOS的设计思路、内部实现和应用场景,掌握FreeRTOS的核心功能和使用方法,从而更加熟练地应用FreeRTOS进行实时操作系统开发。同时,该文档还提供了大量的代码示例,让开发人员可以更加快速地理解和应用FreeRTOS,帮助开发人员在项目开发过程中更高效地完成任务。总之,正点原子freertos pdf是一份对于实时操作系统开发人员非常有用的学习资料,可以帮助开发人员更快速地掌握FreeRTOS技术,提高开发效率。 ### 回答2: 正点原子freertos是一种嵌入式实时操作系统,采用轻量级设计的freertos内核。它具有高度可移植性、可扩展性、可配置性、可靠性等优点,可以很好地处理实时任务和多任务之间的优先级和调度问题,满足各种应用的不同需求。正点原子freertos提供了丰富的API接口,支持线程、信号量、消息队列、定时器、互斥锁等功能,方便编写实时应用程序。在使用过程中,用户可以根据系统需求进行配置参数,如内存大小、最大线程数量、时钟频率等。同时,正点原子freertos还支持跨平台开发,通过移植可以在不同的硬件平台上运行,提高了应用程序的可移植性和可重用性。normal,正点原子freertos官方也提供了详细的编程手册和示例代码,方便开发者学习和参考。总之,正点原子freertos是一款高效、灵活、可靠的实时操作系统,可以为嵌入式系统的开发提供强有力的支持。 ### 回答3: 正点原子是一家国内知名的开源电子硬件平台品牌,其推出了一款名为 FreeRTOS 的操作系统软件。该软件旨在让开发者和工程师们更加方便地进行电子设备的开发和编程。此外,正点原子还为该软件提供了一份详细的使用手册——FreeRTOS PDF。 FreeRTOS PDF 是一份面向初学者和资深工程师的完整使用手册,其中包括了从安装软件、核心概念、任务管理、队列和信号量、定时器等各方面的详细教程和指导。通过这份手册,用户可以更加深入地理解 FreeRTOS 软件的运作机制和一些常见问题的解决方案。同时,手册也提供了丰富的示例代码,方便用户在开发过程中进行参考和借鉴。 总之,正点原子FreeRTOS PDF 告诉我们,通过该软件可以轻松地实现完整的多任务管理系统,支持多个处理器、各种架构和设备等,并能保证高性能和实时性。而该手册则是完美地展现了 FreeRTOS 的功能和使用方法,为广大工程师和开发者提供了强有力的支持和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值