目录标题
- AUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型
- 1. 错误分类先行:把“失败”拆成 4 种语义
- 1.1 Error:可恢复、属于 API 的正常输出域
- 1.2 Violation:断言级失败、不可恢复
- 1.3 Corruption:系统资源被破坏、不可恢复
- 1.4 Failed Default Allocation:默认分配器失败、不可恢复
- 1.5 4 类失败与机制映射表
- 2. ErrorCode / ErrorDomain:把 “int 错误码”升级为可交换的系统语义
- 2.1 为什么 AP 不满足于 “0/-1 + errno”
- 2.2 ErrorCode 的结构:value + domain + support data
- 2.3 ErrorDomain 的关键价值:唯一身份与跨 ECU 可交换
- 2.4 Vendor-specific error domain:扩展错误的硬约束
- 2.5 “要不要每个库都建一个 domain?”
- 3. Result / Future / Exception:AP 的双工作流与强制边界
- 3.1 Result:ValueOrError,且 ErrorType 被强制为 ErrorCode
- 3.2 Duality:AP API 不会用 “直接 throw”来表达 Error
- 3.3 ValueOrThrow:允许异常风格,但要对工具链友好
- 3.4 Future/Promise:为与 Result 互操作而改造;GetResult 永不抛异常
- 4. Violation / Abort 与“库 vs 应用进程”的落地策略
- 4.1 Violation 的实现陷阱:noexcept 下的 std::terminate
- 4.2 Abort:明确“不回退、不展开栈”的终止语义
- 4.3 应用进程(App) vs 库(Library)的推荐选型
- 4.4 工程检查清单:把规范落到 code review
- 结语
AUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型
参考:AUTOSAR AP R25-11《Specification of Adaptive Platform Core》(SWS Core 章节 7.2 Error handling 等)。
1. 错误分类先行:把“失败”拆成 4 种语义
在 AP 语境里,“失败”不是一个桶:不同失败类型对应不同处理机制。认知心理学里常用一句话形容信息缺失的风险——“你看到的就是全部”(WYSIATI);把所有失败都压成一个-1,往往会让上层以为“世界就只有一种失败”。
1.1 Error:可恢复、属于 API 的正常输出域
Core 规范定义:Error 是“假设无 bug 的 API 仍无法完成其 specified purpose”,多由无效/意外输入或不合时机的输入导致;并明确