中断优先级和RTOS任务优先级

freertos之中断优先级、任务优先级、任务调度 中断优先级的数值越小,优先级越高。而 FreeRTOS 的任务优先级是,任务优先级数值越小,任务优先级越低。 阅读详情

一、层级化比喻

本质区别:可以把中断优先级和任务优先级理解为两个完全独立、位于不同“次元”的管理系统。

用一个比喻来开场:

想象你在管理一家公司(单片机系统)。

  • RTOS任务 是公司的普通员工。他们按部就班地处理日常业务,有高低不同的职级(任务优先级)。CEO(内核)会根据职级高低决定谁先使用会议室(CPU)。

  • 中断 是紧急事件,比如火警。火警一旦响起,无论多高级别的员工,哪怕是CEO都必须立刻停下手头的工作,撤离(执行中断服务程序)。

①中断优先级 就是不同紧急事件的等级(如火警、匪警、门铃)。

②RTOS任务优先级 就是员工职级(如经理、主管、职员)。

二、详细的对比分析

1、所属层次不同

  • 中断优先级(硬件层次)

    • 所属机构: 由CPU硬件(如ARM Cortex-M的NVIC,即嵌套向量中断控制器)管理。

    • 存在形式: 这是芯片设计时就定下来的机制,不依赖RTOS。即使你不跑任何操作系统,中断优先级依然存在且有效。

    • 本质: 它是硬件对硬件事件的响应等级。、

  • RTOS任务优先级(软件层次)

    • 所属机构: 由FreeRTOS内核(调度器)管理。

    • 存在形式: 这是软件代码里定义的数据结构。芯片本身不认识什么是任务优先级。

    • 本质: 它是软件对代码功能块的调度顺序。

2、抢占规则不同

  • 中断优先级

    • 规则: 绝对抢占。

    • 表现: 只要一个优先级足够高的中断触发,它会无条件立即暂停CPU当前正在执行的任何代码。

    • 被暂停的对象: 它可以暂停任意一个RTOS任务,也可以暂停另一个优先级较低的中断。

    • 关键点: 中断的优先级高于一切任务的优先级。没有哪个任务能阻挡中断的发生。

  • RTOS任务优先级

    • 规则: 相对抢占。

    • 表现: 只有当CPU当前正在执行的不是中断而是任务时,RTOS调度器才能起作用。如果一个高优先级的任务就绪了,调度器可以暂停当前运行的低优先级任务。

    • 无法跨越的障碍: 如果CPU正在执行中断服务程序(ISR),调度器无法强行暂停ISR去运行一个高优先级任务。必须等ISR执行完毕,才能回到任务世界。

    • 关键点: 任务的优先级只在“任务 vs 任务”之间有效。在“中断 vs 任务”的关系中,所有任务都被所有中断“踩在脚下”。

3、数值含义相反

  • 中断优先级(以Cortex-M为例)

    • 数值越小,优先级越高。

    • 举例: 优先级0 > 优先级1 > 优先级2 > ... 。

  • RTOS任务优先级(以FreeRTOS为例)

    • 数值越大,优先级越高。

    • 举例: 优先级10 > 优先级9 > 优先级8 > ... 。

4、响应速度不同

  • 中断优先级

    • 速度: 极快(纳秒/微秒级)。CPU硬件电路会立即响应,自动保存部分上下文,跳转到ISR入口。

    • 目的: 处理那些必须立刻响应的硬件事件,否则数据会丢失或硬件会出错(比如ADC转换完成、DMA传输完成、定时器溢出)。

  • RTOS任务优先级

    • 速度: 相对较慢(微秒/毫秒级)。它依赖RTOS的调度器在Tick中断中进行上下文切换,或者主动让出CPU。

    • 目的: 处理那些对实时性要求不那么极端的逻辑流程,或者那些不需要在ISR里完成的长耗时操作(比如数据处理、协议栈、用户界面)。

5、它们的协作关系

它们不是完全孤立的,而是通过特定的机制协同工作。典型的流程是:

①触发: 硬件事件发生(例如串口接收到一个字节)。

②中断响应: CPU根据中断优先级,暂停当前运行的任务(无论这个任务优先级多高),跳转到串口ISR。

③ISR快速处理: 在ISR中,因为要保证速度,只做最必要的事情:把收到的数据放进一个缓冲区。

④通知任务: ISR调用一个特殊的API(如 xSemaphoreGiveFromISR() 或 xQueueSendFromISR()),通知一个等待数据的RTOS任务:“数据来了”。

⑤退出中断: ISR结束。

⑥任务切换: 退出中断时,RTOS调度器根据任务优先级决定接下来运行谁。如果那个等待数据的任务优先级高于被中断打断的任务,调度器会切换到那个高优先级任务去处理数据。

三、总结对照表

特性

中断优先级

RTOS 任务优先级

管理者

CPU 硬件 (NVIC)

FreeRTOS 内核 (调度器)

作用对象

中断服务程序 (ISR)

RTOS 任务 (函数)

数值含义

数值越小,优先级越高 (0通常最高)

数值越大,优先级越高 (如10>5)

抢占对象

可以抢占任何任务和任何较低级的中断

只能抢占较低优先级的任务

响应来源

硬件事件触发 (异步)

调度器决策 (基于时间片或事件)

执行环境

特权模式,独立栈,短小精悍

任务上下文,可以使用阻塞、延时

典型用途

读取硬件 FIFO,清除标志位,计时关键点

数据处理,协议解析,界面刷新

四、FreeRTOS 中断优先级与API调用限制

优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY(5)的中断不能调用任何FreeRTOS API函数

为什么不能调用任何FreeRTOS API函数?

准确含义:

如果一个中断的优先级 数值上小于 5(即逻辑优先级高于 5),那么在这个中断服务函数(ISR)中,绝对不能调用任何 FreeRTOS 的 API 函数(包括带 FromISR 后缀的函数)。

根本原因:FreeRTOS 的临界段保护机制

FreeRTOS 在切换任务、操作队列、信号量时,需要保护内部数据不会被其他中断或任务打断。它使用了一个宏叫 configMAX_SYSCALL_INTERRUPT_PRIORITY(通常设为 5)。

  • 工作原理:
    当 FreeRTOS 进入临界段,或者操作内核对象时,它会利用Cortex-M 特有的 BASEPRI 寄存器屏蔽掉所有优先级 低于 某个阈值的中断。这里 configMAX_SYSCALL_INTERRUPT_PRIORITY = 5,意味着它会屏蔽优先级为 5、6、7... 的中断。

  • 后果:
    如果优先级为 4 的中断(优先级高于 5)调用了 FreeRTOS 函数,会发生什么?

        (1)任务 A 正在运行,调用 xQueueSend()。

        (2)FreeRTOS 为了保障数据安全,设置 BASEPRI = 5,屏蔽了优先级 5 及更低的中断。

        (3)此时,优先级为 4 的中断触发了。

        (4)由于 BASEPRI 只屏蔽优先级低的 的,优先级 4依然可以触发,并且打断了FreeRTOS 的执行。

        (5)在这个优先级 4 的 ISR 中,如果调用了 xQueueSendFromISR():

        (6)此时 FreeRTOS 内核的数据结构可能正处于不一致的状态(因为被中断打断了)。        这个 ISR 试图再次修改内核对象,导致内核数据损坏(Crash)。

总结: 设置 configMAX_SYSCALL_INTERRUPT_PRIORITY = 5,相当于画了一条红线:优先级 0-4 的中断被视为“最高优先级”,FreeRTOS 管不了它们,所以它们也绝不能碰 FreeRTOS 的东西。

FreeRtos 任务优先级和中断优先级 首先打出这个标题是为了便于搜索在这里赘述一下 这两者没有关系 只需要明白的是中断优先级高于任务的优先级 在单片机运行的过程中 中断来了就执行中断服务程序。在free-rtos中 任务优先级设置的数值越大 任务的优先级越高Unix任务优先: 进程优先级数值越小,进程优先级越高。在RT-Thread 任务优先级设置的数值越小 任务的优先级越高首先贴上Freertos的配置 任务优先级配置 1. FreeRTOS中任务的最高优先级是通过FreeRTOSConfig.h中的con 阅读详情

相关推荐

RTOS如何实现实时性:关键措施深度解析

在嵌入式系统开发中,实时操作系统(RTOS)以其高效的任务调度、快速的中断响应和确定性的行为,成为实现高实时性应用的关键工具。RTOS通过一系列精密设计的机制和策略,确保系统能够在严格的时间限制内响应外部事件并处理任务。本文将深入探讨RTOS实现实时性的关键措施,揭示其背后的技术原理。

kjoi95的博客 1757

FreeRTOS( 任务与中断优先级,临界保护)

目录一、中断优先级1、NVIC基础知识2、FreeRTOS配置NVIC3、SVC、PendSV、Systick中断4、不受FreeRTOS管理的中断5、STM32CubeMX配置二、任务优先级1、任务优先级说明2、任务优先级分配方案3、中断优先级与任务优先级区别4、任务优先级修改与获取三、开关中断与临界段函数1、临界段概念2、开关中断函数3、任务代码临界段处理函数4、中断代码临界段处理函数四、优先级与临界代码编程测试①不受操作系统管理的中断设置。如下:0-4不受操作系统控制 ②获取与设置任务优先级使能 ③N

qq_57594025的博客 2985

有了Systick中断为什么还要PendSV中断?

文章目录问题:原因:1.在SysTick中断里完成任务切换会降低操作系统的实时性: 问题: 看过Cortex-m3/m4操作系统RTOS内核代码的伙伴们都知道,OS中的任务调度实现方式如下: 1、开启SysTick中断,也就是系统滴答定时器中断。然后在SysTick中断中触发PendSV中断,实际的任务切换是在PendSV的中断服务函数中完成的。 2、PendSV的中断服务函数一般用汇编来写。 那为什么不直接在SysTick的中断服务函数里完成任务切换呢? 其中原因如下: 原因: 1.在SysTick中断里

天城电子嵌入式的博客 1万+

【RTOS笔记】关于中断优先级和任务优先级

首先中断优先级和任务优先级这两个之间没有任何关系,不管中断的优先级是多少,中断的优先级永远高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中断服务程序。 另外对于STM32F103,F407和F429来说,中断优先级的数值越小,优先级越高。而FreeRTOS的任务优先级是,任务优先级数值越小,任务优先级越低。 ...

HAHAHA 2611

rtos中断

每进入一次临界段,全局变量uxCriticalNesting都会加一,每调用一次退出临界段,uxCriticalNesting减一,只有当 uxCriticalNesting 为 0 的时候才会调用函数 portENABLE_INTERRUPTS()使能中断。:由 STM32 的外设(如定时器、串口)触发,通过 **NVIC(嵌套向量中断控制器)** 管理,与 RTOS 的调度机制是分离的。设置为0x50(只看高四位,也就是5),代表中断优先级在5~15内的均被屏蔽,0~4的中断优先级正常执行。

m0_57095980的博客 763

RTOS-PendSV中断使用

在主流的rtos中,都是使用了pendsv来进行任务的切换,在Cortex-M3权威指南中具体介绍了任务切换的几种历史的方法,之前有用systick中断来做的,但是由于和其余的中断的优先级的冲突,主要是在中断的过程中,不能进行任务的切换,否则会影响堆栈的切换。按照之前STM32的专栏里介绍的新建汇编文件的方式,新建一个汇编文件,然后参照上边的寄存器地址,定义三个函数,分别为pendsv的中断处理函数,这个函数后续需要做任务切换,暂时只做一些寄存器的操作,用于观察现象。分别如下,在135页有中断触发寄存器。

ren1198733352的博客 1100

RTOS的中断优先级

‍。

qq_62103199的博客 346

freeRTOS小结——中断管理

概述本章所述中断管理主要是针对中断处理程序的管理。RTOS中,中断处理程序由用户自定义,是类似于TASK一样的存在,中断处理程序有自己的栈,可以支持低优先级中断处理程序被高优先级中断处理程序打断。实际上,个人认为TASK就是以中断处理程序为原型演进而来。考虑到OS的很多功能,如时间片机制、TASK切换(后边将会讲到)都是基于中断处理程序来完成的。如之前所述,中断处理程序具有比常规用户指令集合更高的...

weixin_42385536的博客 1万+

RTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低

FreeRTOS系列(1):基础知识——中断嵌套 FreeRTOS系列文章(2):PendSV功能,为什么需要PendSV 前言 在上一篇文章中,我们详细分析了PendSV的功能,也分析了SysTick和PendSV结合,实现OS任务调度,简单的分析了SysTick的优先级。我觉得有必要针对SysTick的优先级,单独写一篇文章分析。 结论概述 嵌入式实时OS的【实时】不仅仅是OS对任务调度及时,更重要的是要求嵌入式OS具有【可剥夺/抢占】的特性,既允许高优先级任务抢占低优先级任务,又要允许外部中断能够抢占

猪哥的专栏 7986

十二、tick中断及任务的调度机制

简述了FreeRTOS中任务切换的基础——tick中断,还要任务调度机制

m0_63702526的博客 1735

FreeRTOS基础六:中断管理1

嵌入式实时系统需要对外界的某个事件做出及时的响应动作。例如串口外设收到了一帧数据后,需要通知数据解析任务,同时还要将数据传递给解析任务,完成数据的处理。设计出一种好的策略来完成这个过程时需要考虑以下几个问题: 如何检测事件?中断是主要的事件检测手段,但是也可以使用轮询法。 当中断发生后,应该将多少处理工作放在中断服务函数(ISR)中,将另外的多少处理工作放在中断函数外(也就是main函数)?通常的经验是,在中断服务函数中尽可能做最少的工作,保证中断服务函数能迅速执行完成。 当中断检测到事件发生时,中断

luliplus的博客 8582

【第24期】RTOS中断优先级的红线:SysCall Safe边界

RTOS中断优先级设计需遵循"红线原则":高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断(如0-4)禁止调用任何RTOS API,以保证内核临界区安全;低于红线的中断(5-15)可使用FromISR后缀API,但会受短暂屏蔽。FromISR函数与普通API的关键区别在于:不可阻塞、通过xHigherPriorityTaskWoken延迟触发调度。高实时性中断应设为自由中断(高于红线),业务逻辑中断设为受管辖中断(低于红线)。该机制平衡了系统实时性与内核

一路往蓝-Anbo 的博客 703

逆向学习:从已上线微信小游戏反推Cocos工程结构(以切水果跑酷为例)

本文以“切水果跑酷”为例,详细介绍了如何通过逆向分析已上线的微信小游戏,反推其基于Cocos Creator的原始工程结构。文章深入拆解了编译后的目录骨架、资源加载逻辑与依赖关系,并重点解析了微信平台API的调用特征,为开发者提供了一种高效学习游戏架构与设计模式的实用方法。

kk1234的博客 1076

中断抢占和任务抢占的区别

本文对比了RTOS中任务抢占和中断抢占的区别。任务抢占由调度器管理,在特定调度点发生,基于任务优先级;中断抢占由硬件触发,可随时发生。关键差异包括:触发源(任务状态变化vs硬件中断)、管理者(调度器vs CPU)、发生时机(调度点vs任意时刻)及优先级依据等。文章通过代码示例展示了两种抢占的工作机制,并说明它们在实际运行中如何相互作用。最后指出优先级翻转场景中,往往是先发生中断抢占,再触发任务抢占。

道阻其长,未来可期。笔耕不辍,行则将至! 1221

双目立体匹配算法:SGBM

SGBM(Semi-Global Block Matching)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的优缺点,提出了一种折中的方法,既能保证视差图的质量,又能降低计算复杂度。

weixin_45303602的博客 9413

机器学习之支持向量机SVM及代码示例

一、线性可分SVMSVM算法最初是用来处理二分类问题的,是一种有监督学习的分类算法。对于线性可分的二分类问题,我们可以找到无穷多个超平面,将两类样本进行区分。(超平面:一维中是一个点;二维中是一条线;三维中是一个面……)在上面的多个超平面中,它们都可以成功将样本集划分两边,但哪一个超平面更好?一般来说,当样本点离超平面越近,样本的标签为某类型的概率应该为0.5左右,确信度比较低,而样本点离超平面越远

cxmscb的博客 5万+

RTOS系列文章(2):PendSV功能,为什么需要PendSV

背景 大多数嵌入式RTOS在Cortex-M3/M4上的移植都需要PendSV,比如uCOS、RT-Thread、FreeRTOS等,本文就对PendSV的功能作用,以及为什么需要PendSV进行详细的分析。 PendSV是什么? 我们先引用《Cortex-M3权威指南》对PendSV的介绍: PendSV(可悬起的系统调用),它是一种CPU系统级别的异常,它可以像普通外设中断一样被悬起,而不会像SVC服务那样,因为没有及时响应处理,而触发Fault。 个人理解PendSV的英文全称应该是:Pend S

猪哥的专栏 2万+

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 818

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

RTOS的任务调度和任务管理是确保中断处理和任务处理协同工作的关键。在下面的概述中,我将介绍STM32外部中断(EXTI)与RTOS多任务处理的协同设计,并提供一些关键代码示例。4. 设计清晰的任务优先级和调度策略,以确保RTOS能够及时响应和处理各类任务,包括中断相关任务。3. 在中断服务函数中进行最小化的处理,以便快速唤醒相应的RTOS任务进行实际的中断处理。2. 合理的中断和任务管理策略,包括中断优先级、信号量或消息队列的使用等。1. 中断服务函数的优化设计,确保尽可能地减小中断响应时间和占用时间。

weixin_66608063的博客 2066

Audio2Face进阶玩法:结合LiveLink在UE5中实现MetaHuman全身动画+语音驱动(保姆级配置指南)

本文提供了一份详尽的保姆级教程,指导如何将NVIDIA Audio2Face与Unreal Engine 5的LiveLink功能结合,实现驱动MetaHuman数字人面部表情的同时,无缝融合身体动画。文章详细讲解了从环境准备、插件部署、基础面部驱动测试,到动画蓝图高级配置与多数据流融合的全流程,并分享了性能优化与问题排查的实战经验,旨在帮助创作者打造表情与肢体动作协调统一的生动数字人。

q9w8e7r6t5的博客 198

差分运放实战:如何快速计算带直流偏置的电路(附详细推导步骤)

本文详细解析了差分运放电路在带直流偏置设计中的核心计算方法和实战技巧。通过可视化参数关系和分步拆解,帮助工程师快速掌握电路设计精髓,包括虚短虚断原理、偏置电压计算及非理想因素处理,提升信号调理和传感器接口设计的效率与精度。

o4p5q6r7s的博客 412

硬核实时操作系统(RTOS)的多任务处理与中断机制

本文将对硬核实时操作系统(RTOS)的多任务(线程)及中断处理机制进行详细说明。

OSS_ECAL的博客 390

【YOLOv26 源码深度解析】第三章:YOLOv26特征融合(Neck)模块

路径聚合网络作为YOLOv26 Neck部分的核心组件,在继承特征金字塔网络(FPN)自顶向下语义传播能力的基础上,引入了自底向上的路径增强机制,构建起双向跨层特征融合体系。该架构通过建立多尺度特征间的双向信息流,有效缓解了深层网络中细节信息逐层衰减的问题,使得模型在保持高层语义理解能力的同时,能够精确定位不同尺度的目标实例。跨层深度监督的另一优势在于增强特征的尺度适应性。对于来自上层路径的特征与横向连接的特征,融合过程首先对各路特征进行加权,随后进行归一化处理,最终通过加法或拼接操作生成融合特征。

u012133341的博客 520

RTOS之信号量和优先级翻转

RTOS之信号量的理解

qq_47714127的博客 2462

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2401

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: ROS2的核心概念A-节点
下一篇: ROS2的核心概念B-话题
橙橙笔记
博客等级 码龄4年 13粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值