1911_野火FreeRTOS教程阅读笔记_请求任务切换

1911_野火FreeRTOS教程阅读笔记_请求任务切换

全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com)

还有一部分任务切换请求的代码没有分析。

实现上是一个宏定义,实现的工作主要的核心点还是请求PendSV的exception。当这个调用的时候,下面的接口会被执行。

先不看代码,先考虑一个OS进行任务切换的时候会做什么?肯定是先把当前的任务的相关状态存一下,做一下现场保护。之后呢,寻找更高优先级的任务,让更高优先级的任务执行。而任务执行的过程判断,之前已经看过了,这个与在SVC的Handler中的执行的类似。因此,在当前的PendSV阶段,我们需要做好任务优先级判断的处理,确认接下来需要执行哪一个任务。

再看之前的SVC的Handler的设计。究竟执行哪一个任务,决定的因素其实是pxCurrentTCB指向的内容。因此,我们的PendSV的Handler中需要完成这个信息的更新。完成之后,自然得把前面做过的工作反着来一遍,也就是现场回复。

等这部分工作完成,接下来的处理工作其实就是切换到新的任务执行了。

这样,我们对这部分代码拆分再读一下。这里先根据PSP做了现成的堆栈信息的更新,也就是保护现场。接着,r3、r14两个寄存器压栈。为什么会直接用sp而不是跟上面一起继续压栈呢?

这里顺便复习之前看过的信息,因为Handler 模式下,一直使用MSP。因此,这里其实是MSP。所以,这里的处理前后两部分是不同的。

在这部分,完成任务切换并且恢复现场保护。而这里的中断处理涉及到FreeRTOS的中断模型,其实也类似于AUTOSAR OS中的一类中断和二类中断。

这部分的处理,与SVC的处理其实是类似的。

再看一下这俩exception的用法。超级调用(SVC)是由SVC指令触发的异常。在操作系统环境中,应用程序可以使用SVC指令访问操作系统内核函数和设备驱动程序。PendSV是系统级服务的中断驱动请求。在操作系统环境中,当没有其他异常活动时,使用PendSV进行上下文切换。

从这部分文档的描述看,其实这个PendSV的作用是非常固定的。

至于这部分的处理,其实是没啥可以看的。这里只是一个任务交换而已。

关于野火的FreeRTOS教程,我觉得基本看到这里就可以是一个分界点了。其他的都是关于逻辑的方法的,其实直接拿成熟的代码直接看或许更好一些。

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

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

相关文章

Java --- springcloud初始项目创建

目录 一、cloud项目创建 1.1、项目编码规范 1.2、注解生效激活 1.3、导入父工程maven的pom依赖 二、创建子工程并导入相关pom依赖 2.1、相关配置文件 2.1.1、数据库配置文件内容 2.1.2、自动生成文件配置内容 三、创建微服务8001子工程 3.1、导入相关pom依赖 3.…

Fiddler抓包丨最常用功能实战演练

Fiddler中常用的功能如下: 停止抓包清空会话窗内容过滤请求解码设置断点 一. 停止抓包 二. 清空会话窗 方法一,工具栏工具: 方法二,命令行形式: 当然,命令行工具也还支持其他命令的输入,这里不…

动手DIY:打造你的专属千兆网线!

在数字化时代,网络已经成为我们生活中不可或缺的一部分,而作为网络连接的基础——网线,其质量与稳定性直接关系到网络性能的好坏。今天,我们就来详细讲解一下如何亲手制作一条符合国际标准的千兆以太网线(如Cat5e或Cat6),让你在享受DIY乐趣的同时,也能体验到稳定的网络…

linux项目配置单元测试环境和生成覆盖率信息

1.单元测试的意义 单元测试是软件开发中的一种测试方法,用于对软件的最小可测试单元(通常是函数、方法、类等)进行独立且自动化的测试。它的主要目的和用途包括: 1. 确保代码质量和稳定性: 单元测试可以帮助开发人员及时发现代码中的 bug 和错误,确保代码的质量。通过测…

爬虫入门到精通_框架篇13(PySpider框架基本使用及抓取TripAdvisor实战)_PySpider下载安装,项目实战

1 PySpider框架基本用法 PySpider框架: 去重处理PyQuery提取错误重试多进程处理代理简洁JavaScript渲染结果监控WebUI管理 安装PySpider: pip install pyspider报错: 主要是async是python3.7的保留字,pyspider库中的有些文件与之重复而出…

RDB 和 AOF 的实现原理以及优缺点

一个工作了 5 年的粉丝私信我, 关于 RDB 和 AOF 的实现原理 这个问题在面试的时候,应该怎么回答?于是我把之前整理过的一个高手回答整理成文档发给了他,后来他参考这个回复在面试的时候顺利拿到了 offer 今天我把这个文档分享给大…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

文献学习-13-机器人顶刊IJRR近期国人新作(2024.3)

一、IJRR简介 The International Journal of Robotics Research(IJRR)是机器人领域的高水平学术期刊,专注于发布关于机器人技术和相关领域的最新研究成果。IJRR创刊于1982年,是该领域的第一本学术刊物,2022-2023最新影…

141 Linux 系统编程18 ,线程,线程实现原理,ps –Lf 进程 查看

一 线程概念 什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:有独立的PCB,但没有独立的地址空间(共享) 区别:在于是否共…

echarts中toolbox 中文乱码问题

问题描述 本地引用的echarts源文件,页面其他部分编码显示正常,唯独toolbox鼠标悬停在上面时提示信息显示乱码。 如图所示: 尝试过的方法 使用sublime text 3,notepad,记事本更改文件编码为utf-8引入时,在sc…

使用Portainer让测试环境搭建飞起来

Docker的用处不多加赘述,Docker目前有以下应用场景: 测试:Docker很适合用于测试发布,将 Docker 封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。 测试…

无人机|LQR控制算法及其无人机控制中的应用仿真

前言 LQR全称Linear Quadratic Regulator(线性二次调节器),顾名思义用于解决形如 x ˙ A x B u y C x D u \begin{aligned}\dot{x}&AxBu\\y&CxDu\end{aligned} x˙y​AxBuCxDu​ 线性时不变系统的一种线性控制方法,…