
# 开发指导
#### 错误码简介
调用API接口时可能会出现错误，此时接口会返回对应的错误码，以便快速定位错误原因。
错误码是一个32位的无符号整型数，31\~24位表示错误等级，23\~16位表示错误码标志（当前该标志值为0），15\~8位代表错误码所属模块，7\~0位表示错误码序号。
表1错误码中的错误等级 
| 错误等级   | 数值 | 含义 |
|:---|:---|:---|
| NORMAL | 0  | 提示 |
| WARN   | 1  | 告警 |
| ERR    | 2  | 严重 |
| FATAL  | 3  | 致命 |
   
例如将任务模块中的错误码LOS_ERRNO_TSK_NO_MEMORY定义为FATAL级别的错误，模块ID为LOS_MOD_TSK，错误码序号为0，其定义如下：
```
#define LOS_ERRNO_TSK_NO_MEMORY  LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x00)
```
```
#define LOS_ERRNO_OS_FATAL(MID, ERRNO)  \
    (LOS_ERRTYPE_FATAL | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | ((UINT32)(ERRNO)))
```
![](https://support.huaweicloud.com/kernelmanual-LiteOS/public_sys-resources/note_3.0-zh-cn.png)
LOS_ERRTYPE_FATAL：错误等级为FATAL，值为0x03000000
LOS_ERRNO_OS_ID：错误码标志，值为0x000000
MID：所属模块，LOS_MOD_TSK的值为0x2
ERRNO：错误码序号
所以LOS_ERRNO_TSK_NO_MEMORY的值为0x03000200
#### 错误码接管
有时只靠错误码不能快速准确的定位问题，为方便用户分析错误，错误处理模块支持注册错误处理的钩子函数，发生错误时，用户可以调用LOS_ErrHandle接口以执行错误处理函数。
Huawei LiteOS 的错误处理模块为用户提供下面几个接口，接口详细信息可以查看API参考。
| 接口名              | 描述          | **参数**              | 备注                              |
|:---|:---|:---|:---|
| LOS_RegErrHandle | 注册错误处理钩子函数  | func：错误处理钩子函数       | -                               |
| LOS_ErrHandle    | 调用钩子函数，处理错误 | fileName：存放错误日志的文件名 | 系统内部调用时，入参为"os_unspecific_file" |
| LOS_ErrHandle    | 调用钩子函数，处理错误 | lineNo：发生错误的代码行号    | 系统内部调用时，若值为0xa1b2c3f8，表示未传递行号   |
| LOS_ErrHandle    | 调用钩子函数，处理错误 | errnoNo：错误码         | -                               |
| LOS_ErrHandle    | 调用钩子函数，处理错误 | paraLen：入参para的长度   | 系统内部调用时，入参为0                    |
| LOS_ErrHandle    | 调用钩子函数，处理错误 | para：错误标签           | 系统内部调用时，入参为NULL                 |
   
![](https://support.huaweicloud.com/kernelmanual-LiteOS/public_sys-resources/notice_3.0-zh-cn.png)
系统内部会在某些难以定位的错误处，主动调用注册的钩子函数（目前只在互斥锁模块和信号量模块中主动调用了钩子函数）。
