Error Classification:错误分类

背景与原理
OS 错误处理的独特性
-
AUTOSAR BSW 模块(如 CAN 驱动、ADC 驱动)通常将错误分为 “开发错误”(报告给 Det)和 “生产错误”(报告给 Dem)
-
但 OS 的错误处理遵循独立机制:
-
OS 不直接向 Det 或 Dem 报告任何错误,而是通过调用ErrorHook(钩子函数)通知用户
-
若用户需要将 OS 错误同步到 Det/Dem,需在ErrorHook中自行实现报告逻辑
- 如调用 Det_ReportError 或 Dem_ReportError
-
-
原因:
-
OS 作为系统核心调度组件,错误处理需最小化依赖外部模块
-
避免OS 错误导致 Det/Dem 不可用的循环问题
-
错误码的范围界定
-
OSEK OS 标准错误码
-
如E_OS_ID(无效对象 ID)、E_OS_VALUE(参数值无效)等
-
已在 OSEK/VDX OS 标准(ISO 17356-3)中定义,OS 直接沿用
-
-
AUTOSAR OS 新增错误码
- 针对 AUTOSAR 扩展功能(如内存保护、多核、自旋锁)新增的错误码
OS 错误处理流程与 BSW 模块的差异
新增错误码的定义
总览
-
E_OS_ILLEGAL_ADDRESS
-
服务调用时传递的地址参数无效
-
如 NULL 指针、不在合法内存范围
-
-
E_OS_PROTECTION_MEMORY
-
非可信应用访问无权限内存
-
如写 OS 私有数据、访问未授权外设地址
-
-
E_OS_STACKFAULT
- 任务 / Category 2 ISR 的堆栈溢出或访问超出配置范围
-
E_OS_CORE
- 调用跨核心服务时目标核心未激活,或操作非本核心的资源
-
E_OS_NESTING_DEADLOCK
-
自旋锁 / 资源嵌套顺序错误
-
如核心 0 先锁 A 再锁 B,核心 1 先锁 B 再锁 A
-
-
E_OS_MISSINGEND
- 任务未调用TerminateTask()或ChainTask()就从入口函数返回
-
E_OS_PROTECTION_LOCKED
- 任务持有资源 / 禁用中断的时间超过配置的 Lock Budget
-
E_OS_SPINLOCK
-
持有自旋锁时执行解调度操作
- 如调用 WaitEvent、TerminateTask、ChainTask
-
或任务终止时未释放自旋锁,导致冲突
-
-
E_OS_SERVICEID
- 调用CallTrustedFunction时指定的可信函数索引无效
-
E_OS_PROTECTION_EXCEPTION
- 执行非法指令(如除零、未定义指令)或硬件异常
-
E_OS_INTERFERENCE_DEADLOCK
-
高优先级任务自旋等待低优先级任务持有的自旋锁
-
低优先级任务被中断抢占
-
-
E_OS_PROTECTION_TIME
- 任务 / ISR 的执行时间超过配置的 Execution Budget
-
E_OS_DISABLEDINT
- 中断禁用(如DisableAllInterrupts后)调用非中断安全的 OS 服务
-
E_OS_PROTECTION_ARRIVAL
- 任务激活 / ISR 触发时间早于配置的 Time Frame(最小到达间隔)
关键属性
-
错误值(Error Value)
-
文档规定 “由实现分配”,即不同 OS 供应商可自行定义具体数值
-
如将E_OS_ILLEGAL_ADDRESS定义为 0x0A
-
-
适用场景
-
所有新增错误码仅用于 OS 内部错误报告
-
通过ErrorHook传递给用户,不直接暴露给 BSW 其他模块
-
-
与 OSEK 的兼容
-
所有新增错误码仅用于 OS 内部错误报告,且仅在扩展状态(EXTENDED status)下返回
-
通过 ErrorHook 传递给用户,不直接暴露给 BSW 其他模块
-
总结
明确 OS 错误的独特处理机制与新增错误码定义
概括为:
-
处理机制特殊
-
OS 不向 Det/Dem 报告错误,需自行在ErrorHook中自行实现错误同步
- 如报告 Det/Dem
-
避免依赖外部模块导致的连锁故障
-
-
错误码分类清晰
- 新增 14 种错误码,覆盖内存保护、多核、自旋锁、时序保护等 AUTOSAR 扩展场景,补充 OSEK OS 的不足
-
属性灵活统一
-
错误值由实现分配,但错误类型与含义全局统一
-
确保不同 OS 供应商的错误可识别、可追溯
-


528

被折叠的 条评论
为什么被折叠?



