开发指导
错误码简介
调用API接口时可能会出现错误,此时接口会返回对应的错误码,以便快速定位错误原因。
错误码是一个32位的无符号整型数,31~24位表示错误等级,23~16位表示错误码标志(当前该标志值为0),15~8位代表错误码所属模块,7~0位表示错误码序号。
错误等级 | 数值 | 含义 |
|---|---|---|
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))) 
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" |
lineNo:发生错误的代码行号 | 系统内部调用时,若值为0xa1b2c3f8,表示未传递行号 | ||
errnoNo:错误码 | - | ||
paraLen:入参para的长度 | 系统内部调用时,入参为0 | ||
para:错误标签 | 系统内部调用时,入参为NULL |

系统内部会在某些难以定位的错误处,主动调用注册的钩子函数(目前只在互斥锁模块和信号量模块中主动调用了钩子函数)。

