STM32H750之FreeRTOS学习--------(三)任务的挂起与恢复

2023-10-29 13:44

本文主要是介绍STM32H750之FreeRTOS学习--------(三)任务的挂起与恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三、任务的挂起与恢复

任务挂起

void vTaskSuspend(TaskHandle_t xTaskToSuspend) //在任务中挂起
  • xTaskToSuspend 待挂起任务的任务句柄

  • 使用时需将宏 INCLUDE_vTaskSuspend 配置为 1

  • 挂起后的任务无论优先级多大,都不再执行,直到任务被恢复

  • 传入参数为NULL时,代表挂起当前任务,即当前正在运行的任务

任务挂起内部实现

  1. 获取所要挂起任务的控制块
    通过传入的任务句柄,判断所需要挂起哪个任务,NULL代表挂起自身

  2. 移除所在列表

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

  3. 插入挂起任务列表

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

  4. 判断任务调度器是否运行

    在运行,更新下一次阻塞时间,防止被挂起任务为下一次阻塞超时任务

  5. 判断待挂起任务是否为当前任务

    如果挂起的是任务自身,且调度器正在运行,需要进行一次任务切换

    调度器没有运行,判断挂起任务数是否等于任务总数,是:当前控制块赋值为NULL,否:寻找下一个最高优先级任务

任务恢复

void vTaskResume(TaskHandle_t xTaskToResume) //在任务中恢复
  • xTaskToResume 待恢复任务的任务句柄
  • 使用时需将宏 INCLUDE_vTaskSuspend 配置为 1
  • 任务无论被挂起多少次,只需要在任务中恢复一次,就可以继续运行
  • 被恢复的任务会处于就绪态

任务恢复内部实现

  1. 恢复任务不能是正在运行任务

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

  3. 判断恢复任务优先级

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

在中断中恢复任务
BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume)  
  • xTaskToResume 待恢复任务的任务句柄
  • 使用该函数注意宏:INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1
  • 该函数用于中断服务函数中,用于恢复被挂起的任务
  • 中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级
    FreeRTOS管理的优先级5-15

返回值

  • pdTRUE 任务恢复后需要进行任务切换
    e)
    ``
  • xTaskToResume 待恢复任务的任务句柄
  • 使用该函数注意宏:INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1
  • 该函数用于中断服务函数中,用于恢复被挂起的任务
  • 中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级
    FreeRTOS管理的优先级5-15

返回值

  • pdTRUE 任务恢复后需要进行任务切换
  • pdFALSE 任务恢复后不需要进行任务切换

这篇关于STM32H750之FreeRTOS学习--------(三)任务的挂起与恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301040

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel