当前位置: 首页 > news >正文

快速理解RTOS中的pendsv中断和systick中断

在这里插入图片描述

概述

pendsv中断(优先级最低防止打断其他任务)

用于任务上下文切换的中断,人为设置为挂起状态不会自动触发
🔹 例子:

void PendSV_Handler(void)
{// 保存当前任务上下文// 切换堆栈指针// 恢复下一个任务上下文
}

systick中断(优先级高于pendsv即可)

周期性系统节拍中断,每次各种固定时间中断一次,用于计时、延时任务调度判断等

🔹 启用方式:
使用 SysTick_Config(SystemCoreClock / 1000); 设置 1ms 节拍

会自动触发 SysTick_Handler() 函数,在handler处理函数中去调用mcu的时基处理函数(mcu的定时器),同时在这里执行系统任务调度

void SysTick_Handler(void)
{// 每毫秒调用一次HAL_IncTick();      // HAL库系统时基osSystickHandler(); // RTOS调度处理(如CMSIS-RTOS)
}

调度流程

下面这个调度图很详细说明调用关系:
每ms触发systick在中断中判断是否需要切换,需要切换的话设置pendsv挂起,等待systick中断结束,中断优先级机制触发Pendsv中断执行上下文切换

每 1ms → SysTick 中断 → 检查是否该切任务↓如果需要切任务:设 PendSV 挂起(SCB->ICSR)↓中断退出后执行 PendSV → 执行上下文切换
时间线:
|-- SysTick_Handler() --|   (中断触发 → 判断调度)↓设置 PendSV 挂起位(待执行)↓
|-- PendSV_Handler() --|    (在所有中断处理完后才执行 → 真正切换任务)

注意

pendsv中断的pend是挂起意思,意思是这个中断需要先挂起后,等待中断触发执行,只有这个中断是这种处理机制,其他中断当达到触发条件就会触发中断。

异常名是否自动触发是否需要挂起说明
PendSV❌ 否✅ 需要人为触发,RTOS切任务时使用
SVC❌ 否✅ 需要软件中断,用于执行系统调用(触发SVC指令)
SysTick✅ 是❌ 不需要周期自动触发,用作系统节拍
HardFault✅ 是❌ 不需要异常错误(非法访问、除0)立即触发
http://www.lryc.cn/news/605724.html

相关文章:

  • Java Stream进阶:map是“一对一”,flatMap是“一对多”
  • H.266 vs H.265/AV1/H.264:从工程落地看下一代视频系统的技术演进
  • 前端核心技术Node.js(五)——Mongodb、Mongoose和接口
  • Web3:在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境
  • 硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能
  • 云原生环境 DDoS 防护:容器化架构下的流量管控与弹性应对
  • 对git 熟悉时,常用操作
  • Java学习第九十一部分——OkHttp
  • MongoDB用户认证authSource
  • 微服务架构技巧篇——接口类设计技巧
  • 智能交通顶刊TITS论文分享|跨区域自适应车辆轨迹预测:TRACER框架攻克域偏移难题!
  • PageOffice实现文档并发控制
  • 2025年人形机器人动捕技术研讨会将在本周四召开
  • JVM面试通关指南:内存区域、类加载器、双亲委派与GC算法全解析
  • 暑期算法训练.11
  • wpf之ControlTemplate
  • RabbitMQ 消费者确认 (Ack/Nack) (With Spring Boot)
  • HUD抬头显示器-杂散光测试设备 太阳光模拟器
  • FastGPT + Kymo AI生态创新平台,搭建企业智能化知识管理
  • TTS语音合成|GPT-SoVITS语音合成服务器部署,实现http访问
  • 自动驾驶控制算法——PID算法
  • Linux进程创建,终止与等待
  • 运作管理学习笔记1-运作管理基础
  • Docker 初学者需要了解的几个知识点 (五):建容器需要进一步了解的概念
  • 蓝牙 BR/EDR 与 BLE PHY
  • c# net6.0+ 安装中文智能提示
  • JSX语法
  • LPC2132GPIO
  • elk部署加日志收集
  • mac环境配置rust