4.6 错误处理机制
2026/7/16大约 3 分钟内核组件内核错误处理断言错误码安全机制
4.6 错误处理机制
📚 本节导读
学习时长: 约 90 分钟(含所有子节)
难度级别: ⭐⭐⭐☆☆
前置知识: C 语言基础、嵌入式系统调试经验
🎯 学习目标
- 理解 OneOS 三层错误处理体系的设计思想
- 掌握断言机制的使用方法和适用场景
- 熟悉所有错误码的含义和使用方式
- 了解安全机制、堆栈溢出检测和异常处理的原理
- 掌握调试追踪工具的使用方法
一、错误处理机制概述
在嵌入式实时操作系统中,错误处理是保障系统稳定性和可靠性的关键。OneOS 提供了三层错误处理防护体系:
┌─────────────────────────────────────────────────────────┐
│ 第一层:断言机制 │
│ OS_ASSERT / OS_ASSERT_EX │
│ 用于开发调试阶段的不可恢复条件检测 │
├─────────────────────────────────────────────────────────┤
│ 第二层:错误码 │
│ OS_SUCCESS / OS_FAILURE / OS_TIMEOUT / ... │
│ OS_SET_ERRNO / OS_GET_ERRNO / os_errno() │
│ 用于运行时可恢复错误的报告和处理 │
├─────────────────────────────────────────────────────────┤
│ 第三层:安全机制 │
│ os_safety_*_process / os_safety_*_set_hook │
│ 用于关键故障的保护处理(堆栈溢出、断言失败、异常) │
└─────────────────────────────────────────────────────────┘三层防护的角色定位:
| 层级 | 机制 | 触发时机 | 处理方式 | 适用阶段 |
|---|---|---|---|---|
| 第一层 | 断言 | 违反"不可能发生"的条件 | 打印信息 + 进入安全处理 | 开发调试 |
| 第二层 | 错误码 | 可预见的运行时错误 | 返回错误码,调用者处理 | 全部阶段 |
| 第三层 | 安全机制 | 关键故障(堆栈溢出、异常) | 执行钩子或死循环保护 | 生产环境 |
二、相关头文件
| 头文件 | 内容 |
|---|---|
kernel/include/os_assert.h | 断言宏定义(OS_ASSERT / OS_ASSERT_EX) |
kernel/include/os_errno.h | 错误码宏定义(OS_SUCCESS / OS_FAILURE 等) |
kernel/include/os_safety.h | 安全机制 API(堆栈溢出、断言、异常处理) |
kernel/include/os_task.h | OS_SET_ERRNO / OS_GET_ERRNO / os_errno() |
三、配置依赖
/* 断言机制 */
#define OS_USING_ASSERT /* 启用断言 */
/* 安全机制 */
#define OS_USING_SAFETY_MECHANISM /* 启用安全机制 */
/* 调试追踪 */
#define OS_USING_MEM_TRACE /* 启用内存追踪 */
#define OS_USING_CPU_MONITOR /* 启用 CPU 监控 */
#define OS_USING_SPINLOCK_CHECK /* 启用自旋锁检查 */
#define OS_USING_MEMPOOL_CHECK_TAG /* 启用内存池标签检查 */
#define OS_USING_KERNEL_DEBUG /* 启用内核调试日志 */四、子节导航
| 子节 | 标题 | 内容 |
|---|---|---|
| 4.6.1 | 断言机制 | OS_ASSERT / OS_ASSERT_EX 宏、运行时条件检查 |
| 4.6.2 | 错误码 | 全部错误码定义、os_errno()、OS_SET_ERRNO / OS_GET_ERRNO |
| 4.6.3 | 安全机制 | 钩子函数、堆栈溢出/断言/异常处理流程 |
| 4.6.4 | 堆栈溢出检测 | 栈溢出检测方法、栈大小估算、最佳实践 |
| 4.6.5 | 异常处理 | HardFault/MemManage/BusFault/UsageFault 处理 |
| 4.6.6 | 调试追踪 | 内存追踪、CPU 监控、自旋锁检查、调试输出 |
| 4.6.7 | 最佳实践 | 错误处理最佳实践总结和配置建议 |
📝 本节小结
OneOS 提供了三层错误处理防护体系:断言机制用于开发调试阶段捕获不可恢复的条件违反;错误码机制用于运行时可恢复错误的规范化报告;安全机制用于关键故障的最终保护。三层机制相互配合,为嵌入式系统提供了从开发到生产的全生命周期错误处理能力。