FreeRTOS操作系统(详细速通篇)——— 第六章

    本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!

目录

系统中断管理

1 什么是中断?

1.1中断定义

1.2 中断执行机制

​2 中断优先级如何分组

 2.1 优先级介绍

 2.2 优先级分组

3 中断有关寄存器(了解一下)

4 实例


系统中断管理

1 什么是中断?

1.1中断定义

        中断是 CPU 的一种常见特性,通常由硬件触发。当中断发生时,CPU 会暂停当前的程序,转而执行与该中断相关的服务程序。ARM Cortex-M 内核的微控制器(MCU)配备了嵌套向量中断控制器(NVIC,Nested Vectored Interrupt Controller),专门用于高效管理中断。

        简而言之,让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断。

 1.2 中断执行机制

中断执行可以规划为三步:

  1. 中断请求的生成:外部设备如GPIO或定时器等产生中断请求。
  2. 响应中断:CPU暂停当前程序的执行,转而执行中断处理程序(ISR)。
  3. 退出中断:中断处理程序执行完毕后,CPU返回到被中断的程序继续执行。

        举例来说,当我们在写代码的时候,肚子突然饿了。但是代码没有写完,这个时候我们可以打个中断去吃饭,在我们吃完饭之后然后回来继续写代码。


2 中断优先级如何分组

2.1 优先级介绍

        ARM Coetex-M 内核采用8位带宽基础来进行配置中段的优先等级,一共有8位来配置我们的抢占优先级和子优先级。

        学过STM32的朋友想必都了解抢占优先级和子优先级,在STM32中,我们只采用中断优先级配置寄存器的高4位【7:4】,进行配置抢占优先级和子优先级可以进行分组。

  • 抢占优先级:抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。
  • 子优先级:抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断,优先级数越小优先级越高。

 2.2 优先级分组

       优先级分组共计有四种方式,而我们用的FreeRTOS操作系统一般采用0~15为抢占优先级,没有子优先级。并且有一点我们写程序需要注意的是,在程序中你定义任务优先级给的数值越大优先级越高。优先级分组如下表所示,在使用FreeRTOS时一般采用NVIC_PRIORITYGROUP_4。

优先级分组

抢占优先级

子优先级

优先级配置寄存器高 4 位

NVIC_PriorityGroup_0

0 级抢占优先级

0-15 级子优先级

0bit 用于抢占优先级
4bit 用于子优先级

NVIC_PriorityGroup_1

0-1 级抢占优先级

0-7 级子优先级

1bit 用于抢占优先级
3bit 用于子优先级

NVIC_PriorityGroup_2

0-3 级抢占优先级

0-3 级子优先级

2bit 用于抢占优先级
2bit 用于子优先级

NVIC_PriorityGroup_3

0-7 级抢占优先级

0-1 级子优先级

3bit 用于抢占优先级
1bit 用于子优先级

NVIC_PriorityGroup_4

0-15 级抢占优先级

0 级子优先级

4bit 用于抢占优先级
0bit 用于子优先级

        有四点我们需要注意(非常重要):

  1. 低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS 的API函数,也就说管理的中断需要在FreeRTOS之内,超出0~15这个范围我们无法管理。
  2. 中断中调用FreeRTOS的API函数,必须使用代“FromISR”后缀的函数。
  3. 一般也建议将所有优先级位指定为抢占优先级位,更方便我们管理。
  4. 中断优先级数值越小越优先,任务优先级数值越大越优先(再强调一下)。

3 中断有关寄存器(了解一下)

三个中断屏蔽寄存器,分别为 PRIMASK、 FAULTMASK 和BASEPRI

寄存器名称功能描述
PRIMASK

        这是一个只有1个位的寄存器。当它被置1时,会屏蔽所有可屏蔽的异常,只有NMI和硬fault可以响应。默认值为0,表示不屏蔽任何中断。

FAULTMASK        这是一个只有1个位的寄存器。当它被置1时,只有NMI能够响应,所有其他异常(包括中断和fault)都会被屏蔽。默认值也是0,表示不屏蔽任何异常。
BASEPRI        这个寄存器最多有9个位(具体位数由优先级表示的位数决定)。它定义了被屏蔽优先级的阈值。当设为某个值后,所有优先级号大于等于该值的中断都会被屏蔽(优先级号越大,优先级越低)。但如果设为0,则不屏蔽任何中断,0也是默认值。

        我们采用的FreeRTOS使用的中断管理其实使用BASEPRI这个寄存器。

4 实例

      举例代码如下,进行创建任务;

      创建好任务函数之后,依靠任务回调函数将内容输出。

      代码部分多写一写就会了。

void task1(void *pvParameters)
{uint32_t task1_num = 0;while (1){if (++task1_num == 5){printf("FreeRTOS关闭中断\r\n");portDISABLE_INTERRUPTS();       /* FreeRTOS关闭中断 */delay_ms(5000);printf("FreeRTOS打开中断\r\n");portENABLE_INTERRUPTS();        /* FreeRTOS打开中断 */}vTaskDelay(1000);}
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{//编写内容}

       本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。期待诸君的订阅和关注!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Chiplet SPI User Guide 详细解读

目录 一. 基本介绍 1.1.整体结构 1.2. 结构细节与功能描述 二. 输入输出接口 2.1. IO Ports for SPI Leader 2.2. IO Ports for SPI Follower 2.3. SPI Mode Configuration 2.4. Leader IP和Follower IP功能图 三. SPI Programming 3.1. Leader Register Descripti…

算法:数值算法

矩阵乘法 定义与性质 矩阵乘法是线性代数中的一个基本运算,它涉及到两个矩阵的点积运算。给定两个矩阵 A(mn)和 B(np),它们的乘积 C(mp)定义为: 其中, Cij …

大连智点文化传媒有限公司介绍

在辽宁省大连市的文化传媒领域,大连智点文化传媒有限公司(以下简称“智点文化”)以其独特的魅力和专业的服务,逐渐崭露头角。作为一家集广告、文化、营销策划等多功能于一体的综合性文化传媒公司,智点文化不仅拥有深厚的行业底蕴,还不断探索与创新,以适应快速变化的市场需求。 …

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上,MILA 和英特尔实验室联合发布了ProtST模型,该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

AI发展下的伦理挑战:构建未来科技的道德框架

一、引言 随着人工智能(AI)技术的飞速发展,我们正处在一个前所未有的科技变革时代。AI不仅在医疗、教育、金融、交通等领域展现出巨大的应用潜力,也在日常生活中扮演着越来越重要的角色。然而,这一技术的迅猛进步也带来…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中,有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量(结构更清晰,语义更明确,可读性更好)在长字…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243,文档形式记录笔记。 相关问题: ES全文检索是如何进行相关性打分的?ES中计算相关性得分的时机?如何加速TopK检索?三种思路 精准To…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername: 远程计算机上的用户账户名。 hostname: 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

Linux系统上安装Redis

百度网盘: 通过网盘分享的文件:redis_linux 链接: https://pan.baidu.com/s/1ZcECygWA15pQWCuiVdjCtg?pwd8888 提取码: 8888 1.把安装包拖拽到/ruanjian/redis/文件夹中(自己选择) 2.进入压缩包所在文件夹,解压压缩…

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案,使用 React 语法规范来开发多端应用(包括小程序、H5、React Native 等)。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目(本来就有的旧项目)的步…

前后端分离的开发模式+YAPI接口文档

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 早期的开发模式:前后端混合开发 在这种模式下开发下,…

WAF+API安全代表厂商|瑞数信息入选IDC报告《生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势》

近日,全球领先的权威资讯机构IDC正式发布《IDC Market Presentation:生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势,2024》报告。报告中IDC 评估了众多厂商的安全硬件产品能力,并给出了产品对应的推荐厂商供最终用户参…

浏览器渲染机制和node事件循环

浏览器渲染机制 Document Object Model (DOM) 当浏览器读取 HTML 代码时,只要遇到 body、div 等 HTML 元素,就会创建一个名为 Node 的 JavaScript 对象。 浏览器从 HTML 文档中创建了 Node 之后,就要把这些节点对象创建成树状结构。 CSS Obje…

如何从2D到3D动画(计算机图形学基础)

引言 计算机图形学是一门将数学、计算机科学和艺术结合起来的学科,它在现代技术中扮演着越来越重要的角色。从游戏设计到虚拟现实(VR)、增强现实(AR)和元宇宙,计算机图形学的应用无处不在。它不仅为人们提…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示,点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径,点击箭头所指浏览按钮,会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 在本研究中,我们采用Python编程语言,利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构,我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整,向下取整条件判断循环总结 前言 为了监督自己的进度,把学习任务一点点都写出来,写多少就算多少,不求完美,只求完…

# JVM 参数大全

JVM 参数大全 文章目录 JVM 参数大全内存参数垃圾收集器配置GC日志配置dump 日志参数配置发生Full GC时生成dump文件在IDEA中配置JVM参数 内存参数 -Xmx3550m:设置JVM最大堆内存为3550M -Xms3550m:设置JVM初始堆内存 为3550M。此值可以设置与-Xmx相同&am…

【Python实战因果推断】57_因果推理概论7

目录 The Bias Equation A Visual Guide to Bias The Bias Equation 既然你现在理解了为何样本平均值可能与它试图估计的平均潜在结果存在差异,我们不妨更详细地探究为什么平均差值通常无法恢复出ATE(平均处理效应)。 在销售的例子中&…