P0 batch translation: 49 PDFs (General + BSWGeneral + MethodologyAndTemplates)
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
# AUTOSAR 中断处理说明
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
>
|
||||
> 原文:*Explanation of Interrupt Handling within AUTOSAR*(文档 ID 307)
|
||||
>
|
||||
> 翻译状态:**已完成 v1**
|
||||
>
|
||||
> 对应原文 PDF:`BSWGeneral/AUTOSAR_EXP_InterruptHandlingExplanation.pdf`
|
||||
|
||||
---
|
||||
|
||||
## 文档标识
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|-----|
|
||||
| 文档标题 | AUTOSAR 中断处理说明(Explanation of Interrupt Handling within AUTOSAR) |
|
||||
| 文档标识号 | 307 |
|
||||
| 文档状态 | 正式版(Final) |
|
||||
| 所属标准 | Classic Platform |
|
||||
| 所属版本 | 4.4.0 |
|
||||
|
||||
---
|
||||
|
||||
## 文档变更历史(节选)
|
||||
|
||||
| 日期 | 版本 | 变更说明 |
|
||||
|------|------|----------|
|
||||
| 2018-10-31 | 4.4.0 | 编辑性修订 |
|
||||
| 2017-12-08 | 4.3.1 | 编辑性修订 |
|
||||
| 2016-11-30 | 4.3.0 | 编辑性修订 |
|
||||
| 2013-03-15 | 4.1.1 | R4.1 定稿 |
|
||||
| 2007-12-21 | 3.0.1 | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. 介绍与文档目的
|
||||
2. 缩略语与简称
|
||||
3. 相关文档
|
||||
4. 中断配置概述
|
||||
5. 中断操作概述
|
||||
6. 中断操作步骤
|
||||
7. 中断配置
|
||||
8. 总结
|
||||
|
||||
---
|
||||
|
||||
## 1 介绍与文档目的
|
||||
|
||||
本文档**解释** AUTOSAR 中断处理的机制和概念。它**不是规范**,而是说明性文档,帮助读者理解 AUTOSAR 如何处理中断。
|
||||
|
||||
读者应熟悉:
|
||||
- OSEK/VDX OS 概念
|
||||
- AUTOSAR 分层架构
|
||||
- 微控制器中断机制
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与简称
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|--------|------|
|
||||
| ISR | Interrupt Service Routine(中断服务例程) |
|
||||
| Cat1 | Category 1 interrupt(OS 不感知的中断) |
|
||||
| Cat2 | Category 2 interrupt(OS 感知的中断) |
|
||||
| OS | Operating System |
|
||||
| ECU | Electronic Control Unit |
|
||||
| ICU | Input Capture Unit(输入捕获单元) |
|
||||
| IRQ | Interrupt Request(中断请求) |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
| 编号 | 名称 |
|
||||
|------|------|
|
||||
| [1] | AUTOSAR_EXP_LayeredSoftwareArchitecture |
|
||||
| [2] | AUTOSAR_SRS_BSWGeneral |
|
||||
| [3] | AUTOSAR_SWS_OS |
|
||||
| [4] | AUTOSAR_SWS_ICUDriver |
|
||||
| [5] | ISO 17356-3 OSEK/VDX OS |
|
||||
|
||||
---
|
||||
|
||||
## 4 中断配置概述
|
||||
|
||||
AUTOSAR 中断配置涉及**三个层级**:
|
||||
|
||||
1. **硬件层**:微控制器的中断控制器(如 NVIC、INTC)
|
||||
2. **驱动层**:设备驱动(ICU 驱动、Port 驱动等)
|
||||
3. **OS 层**:AUTOSAR OS 管理 Cat2 中断
|
||||
|
||||
### 中断源分类
|
||||
|
||||
| 中断源 | 示例 | 处理方 |
|
||||
|--------|------|--------|
|
||||
| 微控制器外设 | 定时器、ADC、UART | 设备驱动 |
|
||||
| 通信控制器 | CAN、LIN、FlexRay | 通信驱动 |
|
||||
| 外部中断 | GPIO、外部传感器 | ICU 驱动 |
|
||||
|
||||
---
|
||||
|
||||
## 5 中断操作概述
|
||||
|
||||
### 5.1 Cat1 与 Cat2 中断的区别
|
||||
|
||||
AUTOSAR 区分两种类型的中断:
|
||||
|
||||
| 特性 | Cat1 中断 | Cat2 中断 |
|
||||
|------|----------|----------|
|
||||
| OS 感知 | ❌ 不被 OS 感知 | ✅ 由 OS 管理 |
|
||||
| ISR 类别 | 不分类 | 类别 2 |
|
||||
| 可调用 OS 服务 | 仅允许中断使能/禁用 | 可调用受限的 OS 服务 |
|
||||
| 由谁实现 | 复杂驱动(CDD)或 BSW 模块 | AUTOSAR OS |
|
||||
| 用途 | 关键、低延迟、硬件紧密耦合 | 一般外设中断 |
|
||||
| 入口/出口处理 | 直接由硬件/驱动 | 由 OS 提供(保存/恢复上下文) |
|
||||
|
||||
> **核心区别**:Cat2 中断由 OS 管理,可以安全地调用 OS 服务;Cat1 中断绕过 OS,必须自己保存上下文。
|
||||
|
||||
---
|
||||
|
||||
## 6 中断操作步骤
|
||||
|
||||
### 6.1 处理 Cat1 中断
|
||||
|
||||
#### 6.1.1 初始状态
|
||||
- 中断向量已配置
|
||||
- ISR 已安装(绕过 OS)
|
||||
- 全局中断使能
|
||||
|
||||
#### 6.1.2 当硬件请求中断时
|
||||
|
||||
1. 硬件自动保存 **部分上下文**(如 PC、SR)
|
||||
2. 跳转到 ISR 入口(无 OS 中介)
|
||||
3. ISR 内部保存必要的寄存器(编译器/手写)
|
||||
4. 执行 ISR 主体
|
||||
- 读取/清除外设中断标志
|
||||
- 处理中断
|
||||
5. ISR 内部恢复寄存器
|
||||
6. 中断返回
|
||||
|
||||
**Cat1 ISR 限制**:
|
||||
- 不可调用 OS 服务
|
||||
- 不可调用任何 OS API
|
||||
- 不可等待/阻塞
|
||||
- 应**保持极短**(如 5-10 微秒)
|
||||
- 不可访问 OS 管理的资源(任务、事件、信号量等)
|
||||
|
||||
### 6.2 处理 Cat2 中断
|
||||
|
||||
#### 6.2.1 初始状态
|
||||
- 中断向量已配置(由 OS 启动时设置)
|
||||
- ISR 由 OS 管理
|
||||
- 中断优先级已分配
|
||||
|
||||
#### 6.2.2 当硬件请求中断时
|
||||
|
||||
1. 硬件自动保存 **部分上下文**(PC、SR、关键寄存器)
|
||||
2. 跳转到 OS 提供的 ISR 入口
|
||||
3. **OS 保存完整上下文**(所有寄存器)
|
||||
4. OS 调用用户注册的 ISR 函数
|
||||
5. 执行 ISR 主体
|
||||
- 允许调用有限的 OS 服务
|
||||
6. OS 恢复完整上下文
|
||||
7. 中断返回
|
||||
|
||||
**Cat2 ISR 允许的 OS 服务**:
|
||||
- `ActivateTask`
|
||||
- `SetEvent`
|
||||
- `GetResource`
|
||||
- `ReleaseResource`
|
||||
- `GetAlarm`
|
||||
- `IncrementCounter`
|
||||
- `TerminateApplication`(受限)
|
||||
|
||||
**Cat2 ISR 限制**:
|
||||
- 不可调用 `Schedule`
|
||||
- 不可调用 `WaitEvent`(任务级)
|
||||
- 不可访问某些 OS 资源
|
||||
- 仍应保持**简短**
|
||||
|
||||
---
|
||||
|
||||
## 7 中断配置
|
||||
|
||||
### 7.1 设备驱动配置和代码
|
||||
|
||||
#### 7.1.1 中断处理程序的放置
|
||||
|
||||
| 中断类型 | 中断处理程序位置 |
|
||||
|----------|------------------|
|
||||
| Cat1 | 由 BSW 模块(如 ICU 驱动)实现,放置在驱动 `.c` 文件中 |
|
||||
| Cat2 | 由 OS 实现,放置在 OS 配置中(中断向量表) |
|
||||
|
||||
### 7.2 OS 配置
|
||||
|
||||
#### 7.2.1 中断向量表
|
||||
|
||||
OS 启动时按 `Os_Cfg.h` 中的配置初始化中断向量表。Cat2 中断的 ISR 由 OS 在启动时注册。
|
||||
|
||||
#### 7.2.2 中断优先级
|
||||
|
||||
- **Cat1**:优先级**高于**所有 Cat2 中断(不受 OS 优先级限制)
|
||||
- **Cat2**:优先级由 OS 管理,**低于** Cat1
|
||||
|
||||
#### 7.2.3 中断嵌套
|
||||
|
||||
- Cat1 可以**中断** Cat2(Cat1 优先级更高)
|
||||
- Cat2 之间按 OS 优先级嵌套
|
||||
- Cat1 之间按硬件优先级嵌套
|
||||
|
||||
---
|
||||
|
||||
## 8 关键概念总结
|
||||
|
||||
| 概念 | 说明 |
|
||||
|------|------|
|
||||
| **Cat1** | 直接由硬件处理,绕过 OS。**不可调用 OS 服务**。极低延迟。 |
|
||||
| **Cat2** | 由 OS 包装,**可调用受限 OS 服务**。常规外设中断首选。 |
|
||||
| **中断优先级** | Cat1 > Cat2。Cat1 中断可中断 Cat2 ISR。 |
|
||||
| **ISR 长度** | Cat1 应 < 10μs;Cat2 应 < 100μs(一般)。 |
|
||||
| **上下文保存** | Cat1:部分(编译器);Cat2:完整(OS)。 |
|
||||
| **配置位置** | Cat1 在驱动中;Cat2 在 OS 中。 |
|
||||
|
||||
---
|
||||
|
||||
## 9 中断处理时间线(示例)
|
||||
|
||||
### Cat2 中断处理时序
|
||||
|
||||
```
|
||||
硬件事件
|
||||
↓
|
||||
[硬件自动保存 PC、SR 等]
|
||||
↓
|
||||
[OS 中断入口]
|
||||
↓
|
||||
[OS 保存完整上下文]
|
||||
↓
|
||||
[调用用户 ISR 主体]
|
||||
↓ 允许调用受限 OS 服务
|
||||
├─ 清除中断标志
|
||||
├─ 读取外设数据
|
||||
├─ 激活任务 / 设置事件
|
||||
└─ 释放资源
|
||||
↓
|
||||
[OS 恢复完整上下文]
|
||||
↓
|
||||
[中断返回]
|
||||
```
|
||||
|
||||
### Cat1 中断处理时序
|
||||
|
||||
```
|
||||
硬件事件
|
||||
↓
|
||||
[硬件自动保存 PC、SR]
|
||||
↓
|
||||
[直接跳转到 ISR]
|
||||
↓
|
||||
[ISR 内部保存其他寄存器]
|
||||
↓ 禁止调用 OS 服务
|
||||
├─ 清除中断标志
|
||||
└─ 处理中断
|
||||
↓
|
||||
[ISR 内部恢复寄存器]
|
||||
↓
|
||||
[中断返回]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
- 本文档为**说明性文档(EXP)**,非规范
|
||||
- Cat1/Cat2 中断分类是 AUTOSAR 中断处理的核心概念
|
||||
- 选择 Cat1 还是 Cat2 取决于:延迟要求、是否需要 OS 服务、是否访问 OS 资源
|
||||
|
||||
---
|
||||
|
||||
*翻译:opencode-translator / Step 3 P0 批量翻译*
|
||||
Reference in New Issue
Block a user