FreeRTOS的调度器挂起和恢复

1. 调度器挂起 vTaskSuspendAll

void vTaskSuspendAll( void )
{/* A critical section is not required as the variable is of typeBaseType_t.  Please read Richard Barry's reply in the following link to apost in the FreeRTOS support forum before reporting this as a bug! -http://goo.gl/wu4acr *//* 记录值++ */++uxSchedulerSuspended;
}

2.调度器恢复 xTaskResumeAll

BaseType_t xTaskResumeAll( void )
{
TCB_t *pxTCB;
BaseType_t xAlreadyYielded = pdFALSE;/* If uxSchedulerSuspended is zero then this function does not match aprevious call to vTaskSuspendAll(). */configASSERT( uxSchedulerSuspended );/* It is possible that an ISR caused a task to be removed from an eventlist while the scheduler was suspended.  If this was the case then theremoved task will have been added to the xPendingReadyList.  Once thescheduler has been resumed it is safe to move all the pending readytasks from this list into their appropriate ready list. *//* 进入临界段 */taskENTER_CRITICAL();{/* 调度器记录值减一 */--uxSchedulerSuspended;/* 如果调度器需要恢复了 */if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ){/* 判断当前任务数量大于0 */if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U ){/* Move any readied tasks from the pending list into theappropriate ready list. *//*将所有已准备好的任务从待处理列表移动到就绪链表中*//* 从挂起的就绪列表中遍历 */while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE ){/* 获取任务控制块 */pxTCB = ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) );/* 移除挂起就绪列表,移除事件列表 */( void ) uxListRemove( &( pxTCB->xEventListItem ) );( void ) uxListRemove( &( pxTCB->xGenericListItem ) );/* 添加到就绪列表中 */prvAddTaskToReadyList( pxTCB );/* If the moved task has a priority higher than the currenttask then a yield must be performed. *//* 如果优先级大于当前任务优先级,则进行任务切换 */if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ){xYieldPending = pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}}/* If any ticks occurred while the scheduler was suspended thenthey should be processed now.  This ensures the tick count doesnot	slip, and that any delayed tasks are resumed at the correcttime. *//* 如果记录值大于0 */if( uxPendedTicks > ( UBaseType_t ) 0U ){while( uxPendedTicks > ( UBaseType_t ) 0U ){/* 进行systick调度处理,遍历阻塞列表,如果需要任务切换,返回true */if( xTaskIncrementTick() != pdFALSE ){xYieldPending = pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}--uxPendedTicks;}}else{mtCOVERAGE_TEST_MARKER();}/* 如果需要进行任务切换 */if( xYieldPending == pdTRUE ){/* 判断是否内核是抢占式 */#if( configUSE_PREEMPTION != 0 ){/* 标记已经调度的状态 */xAlreadyYielded = pdTRUE;}#endif/* 进行调度 */taskYIELD_IF_USING_PREEMPTION();}else{mtCOVERAGE_TEST_MARKER();}}}else{mtCOVERAGE_TEST_MARKER();}}taskEXIT_CRITICAL();return xAlreadyYielded;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…

蓝牙链路控制(Link Control)命令概览

目录 一、设备发现与连接管理(14条) 1.1. 设备发现 1.2. 连接建立与取消 1.3. 连接接受与拒绝 1.4. 连接断开与维护 二、设备信息查询(9条) 2.1. 基本信息查询 2.2. 安全相关信息交互 三、安全认证与加密(12条) 3.1. 认证请求与回复 3.2. 加密设置 四、同步与…

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项,系统需要java环境,确认系统有java环境,根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包,解压,将runt…

【HENU】河南大学计院2024 计算机网络 期末复习知识点

和光同尘_我的个人主页 一直游到海水变蓝。 计网复习 第一章互联网组成类别交换方式分组交换的要点:分组交换的优点: 网络性能指标体系结构网络协议五层协议 第二章:物理层物理层的主要任务(四大特性)通信的三种方式…

python网络框架——Django、Tornado、Flask和Twisted

Django、Tornado和flask是全栈网络框架,而Twisted更专注于网络底层的高性能封装,不提供HTML模版引擎等界面功能,因此不能称为全栈框架。 1、Django 发布于2003年,是当前python世界里最负盛名且最成熟的网络框架。相较于其他web框…

C++——运算符重载

一、运算符重载 ①含义 函数重载或函数多态:同名函数完成相同的基本操作 C将重载的概念扩展到运算符上,于是出现了运算符重载 C中有很多运算符已经被重载 *运算符,运用于地址,可以得到存储在这个地址的值;运用于两个…

IPv6的地址类型

IPv6地址总长度为128bit,被分为8组,每组为4个十六进制数,用冒号分隔: 例如:FC00:0123:4567:8901:ABFD:0987:0000:0023 可缩写为:FC00:0123:4567:8901:ABFD:0987::23 IPv6中取消了v4中的广播,新…

矢量网络分析仪(VNA)基础解析与应用指南

矢量网络分析仪(VNA)是一种极其精密的仪器,能够对电气网络的阻抗进行表征,测量结果可提供幅度和相位细节,从而深入了解其行为。被测设备(DUT)通常用于射频(RF)应用&#…

LLM预训练recipe — 摘要版

文章核心主题: 本文深入探讨了从零开始进行大型语言模型(LLM)预训练(pretrain)的各个环节,侧重方法论和实践细节,旨在普及预训练过程中的关键步骤、常见问题及避坑技巧,而非技术原理…

工厂+策略模式之最佳实践(疾病报卡维护模块API设计)

目录 💻业务场景 🔧应用技术 ⚙概要流程 ❗开发注意 服务类上标注了 自定义注解 却无法直接利用getDeclaredAnnotation 获取 *Spring代理机制 代理机制的工作原理 代理的工作机制 代理的使用场景 已获取EmrXXXServiceImpl 的Class,如…

ARM异常处理 M33

1. ARMv8-M异常类型及其详细解释 ARMv8-M Exception分为两类:预定义系统异常(015)和外部中断(1616N)。 各种异常的状态可以通过Status bit查看,获取更信息的异常原因: CFSR是由UFSR、BFSR和MMFSR组成: 下面列举HFSR、MMFSR、…

【单片机通讯协议】—— 常用的UART/I2C/SPI等通讯协议的基本原理与时序分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、通信基本知识1.1 MCU的参见外设1.2 通信的分类按基本的类型从传输方向上来分 二、UART(串口通讯)2.1 简介2.2 时序图分析2.3 UART的…

Linux axel 下载加速命令详解

简介 axel 命令是一个轻量级、快速且用户友好的 Linux 命令行下载加速器。它通过将文件分割成片段并同时下载来加快下载速度,这对于大文件和网络不好时尤其有用。 axel 支持 HTTP、HTTPS、FTP 和 FTPS 协议。 安装 Debian/Ubuntu sudo apt update sudo apt ins…

Adversarial Machine Learning(对抗机器学习)

之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…

STM32 高级 谈一下IPV4/默认网关/子网掩码/DNS服务器/MAC

首先可以通过 winr->输入cmd->输入ipconfig 命令可以查看计算机的各种地址 IPV4:是互联网协议第 4 版(Internet Protocol version 4)所使用的地址。它是一个 32 位的二进制数字,通常被分为 4 个 8 位的部分&#xff…

安卓音频之dumpsys audio

目录 概述 详述 dumpsys audio 1、音频服务生命周期的事件日志 2、音频焦点事件日志 3、音频流音量信息 4、音量组和设备的相关信息 5、铃声模式 6、音频路由 7、其他状态信息 8、播放活动监控信息 9、录音活动记录 10、AudioDeviceBroker 的记录 11、音效&#…

Linux 更改Jenkins使用其他账户启动

Linux 更改Jenkins使用其他账户启动 步骤一:修改 Jenkins 配置文件1. 编辑 Jenkins 的 systemd 服务文件:2. 在编辑器中添加以下内容:3. 保存并退出编辑器 步骤二:更改 Jenkins 目录的权限步骤三:重新加载 systemd 配置…

【LLM】Python 基础语法

Python 作为最佳的机器学习和深度学习语言,如果你想入门大模型(如 GPT、BERT 等)与自然语言处理(NLP),那么 Python 一定是最佳选择,这篇文章将带你入门Python语法。(PS:爆…

【Go】context标准库

文章目录 1. 概述1.1 什么是 Context1.2 设计原理1.3 使用场景1.4 Context 分类核心:Context接口2. 源码解读4个实现emptyCtxTODO 和 BackgroundcancelCtxWithCancelcancelCtx.propagateCancel 构建父子关联parentCancelCtx 获取父上下文中的内嵌cancelCtxcanceltimerCtxWithT…

面试小札:Java后端闪电五连鞭_11

1. 接口和抽象类的区别 - 定义方式: - 接口使用 interface 关键字定义,所有方法默认是 public 和 abstract 的,不能有方法体。例如: interface MyInterface { void method1(); int method2(); } - 抽象类使用 abstract …