news 2026/9/4 13:59:33

[AutoSar]BSW_OS 04 Autosar OS_ISR 中断

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[AutoSar]BSW_OS 04 Autosar OS_ISR 中断

目录

  • 关键词
  • 平台说明
  • 一、中断简介
    • 1.2 vector中断概述
  • 二 、中断向量表
  • 三 、中断分类
    • 3.1 开关中断控制
    • 3.2 二类中断
      • 3.2.1 配置
      • 3.2.2 code
      • 3.2.3 Nesting of Category 2 Interrupts
    • 3.3 一类中断
      • 3.3.1 一类中断的实现
      • 3.3.2 注意事项
    • 3.4 0类中断
      • 3.4.1 0类中断的实现
      • 3.4.2 注意事项

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector ,
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)


>>>>>回到总目录<<<<<<

一、中断简介

在OS中ISR是不可缺少的一部分,它提供了软件和外界的事件的联系方式(如ADC,can通信)和软件内事件及时响应的可能(如DMA,TOM)。
下图以英飞凌TC 芯片为例 展示了中断 从硬件–>软件的 mapping
Service request control register(SRC)
IRQ驱动程序访问中断控制器的寄存器。驱动程序初始化特定于外设的srn优先级。在接收到中断时,中断系统跳转到IRQ驱动程序中适当的中断处理程序帧,并调用相应的中断处理程序函数。在MCAL驱动程序中,中断处理程序函数位于软件驱动程序中

1.2 vector中断概述

二 、中断向量表

中断向量表是根据芯片类型和编译器类型所生成的,指向每个可能产生中断的中断源。在多核系统中可以生成多个向量表。

Adc_IntISR_Fun

三 、中断分类

0类中断只有vector才有此概念,不受OS管控
1类中断不受OS管控 ,中断执行完毕后会回到产生中断的地方,不会影响到任务的执行
2类中断受OS管控,可以调用部分OS服务,例如在taskA中产生中断,中断中激活优先级更高的taskB,taskB运行完后继续回到taskA产生中断的地方执行

优先级如下:

3.1 开关中断控制

DisableAllInterrupts() EnableAllInterrupts()
The functions disable all category 1 and category 2 interrupts. SuspendAllInterrupts() ResumeAllInterrupts() SuspendOSInterrupts() ResumeOSInterrupts()
The functions disable category 2 interrupts only.

DisableAllInterrupts() EnableAllInterrupts() SuspendOSInterrupts() ResumeOSInterrupts()用于控制一类和二类中断
SuspendOSInterrupts() ResumeOSInterrupts()仅能用于控制二类中断.

3.2 二类中断

优先级低于1类中断高于task。

3.2.1 配置

以创建一个AD采集为例:

3.2.2 code

ISR(Adc_IrqUnit0){Adc_IntISR_Fun(ADC_UNIT_0);}FUNC(void,ADC_CODE_FAST)Adc_IntISR_Fun(Adc_ChannelType AdcChannel){uer_code;读取AD寄存器之类的}

3.2.3 Nesting of Category 2 Interrupts

**作用:**尽可能的降低延迟

3.3 一类中断

一类中断优先级低于0类中断高于2类中断。

3.3.1 一类中断的实现

定义了一个宏来实现。

/*********************************************************************************************************************** * OS_ISR1() **********************************************************************************************************************//*! \def OS_ISR1() * \brief Category 1 ISR function declaration macro. * \details This macro builds the category 1 ISR function declaration for a function name. * * \param[in] IsrName The ISR name. **********************************************************************************************************************/#defineOS_ISR1(IsrName)OS_HAL_ISR1_DEFINE(IsrName)

OS_ISSR1(OsIsr_funcction_name) OsIsr_funcction_name() { }

3.3.2 注意事项

1.vector 规定了不同的stack类型,不同的用户只能在匹配的stack上压栈和出栈。如果在一个不能根据中断请求自动切换合适的栈的平台上配置一类中断,会导致该中断无法压栈导致OS错误。


2.autosar OS 标准不允许在一类中断中调用 OS API。

3.4 0类中断

0类中断是vector 工具链特有的。0类中断比1类中断具有更低的延迟。

3.4.1 0类中断的实现

和一类中断类似,由一个宏来实现。

/*********************************************************************************************************************** * OS_ISR0() **********************************************************************************************************************//*! \def OS_ISR0() * \brief Category 0 ISR function declaration macro. * \details This macro builds the category 0 ISR function declaration for a function name. * * \param[in] IsrName The ISR name. **********************************************************************************************************************/#defineOS_ISR0(IsrName)OS_HAL_ISR0_DEFINE(IsrName)

3.4.2 注意事项

1.和一类中断一样,如果在一个不能根据中断请求自动切换合适的栈的平台上配置0类中断,会导致该中断无法压栈导致OS错误。
2.0类中断会打断1类2类中断(即使为non nestable)和task,因此0类中断会占用上述三类的时间消耗。
3.如果在0类中断执行期间时间保护中断产生了,那么时间保护的后续操作(violation 或则hook)将会延迟到0类中断执行完成后才会调用。
4.在OS关闭或者进入panic hook,0类中断依旧可以被触发。
>>>>>回到总目录<<<<<<

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 13:58:05

别划走OBS预览:OBS Studio窗口置顶功能的完整上手指南

别划走OBS预览&#xff1a;OBS Studio窗口置顶功能的完整上手指南 【免费下载链接】obs-studio OBS Studio - Free and open source software for live streaming and screen recording 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio 直播开着&#xff…

作者头像 李华
网站建设 2026/9/4 13:50:38

单量子比特也有指数级量子优势?信号学习新思路深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 13:49:45

LabVIEW与正运动控制卡:上位机开发实战指南

作为一个在工控圈摸爬滚打了十来年的老工程师&#xff0c;我这些年用过的上位机开发工具不少&#xff0c;从VB6到C#再到LabVIEW&#xff0c;都有涉猎。但说实话&#xff0c;如果纯粹从“快速上手”和“调试直观”这两个维度来看&#xff0c;LabVIEW在运动控制领域的优势依然是独…

作者头像 李华
网站建设 2026/9/4 13:49:02

拒绝虚构:真实项目是技术博客的创作根基

抱歉&#xff0c;我无法基于这个标题撰写技术博客文章。原因很简单&#xff1a;这个输入里没有可供展开的“项目正文”“功能规格”“部署方式”“接口能力”或“测试流程”。我不能在没有真实材料依据的情况下&#xff0c;虚构一个不存在的工具、模型或项目&#xff0c;再包装…

作者头像 李华
网站建设 2026/9/4 13:47:11

单片机毕业设计-融合语音识别与光敏检测的 STM32 智能台灯设计 基于 STM32 的自动 / 手动双模式智能照明控制系统开发(018306)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华