出错处理
及时发现与检测程序的错误是一个强健应用程序的基本要求。本节主要讲述 SDK API 错误码定义以及应用程序检测错误码方式。
错误码定义
目前 SDK 中大多数 API 返回 bk_err_t 类型错误码,新增 API 将全部使用 bk_err_t 作为返回值(返回 void 除外)。
SDK 中错误码可分下面几类:
BK_OK 表示成功,没有错误, 值为 0
通用错误码,如 BK_ERR_NO_MEM 表示内存不够,定义在 bk_err.h 中
模块错误码,使用 BK_ERR_MOD_xxx 形式定义, 其中 MOD 产生该错误码的模块, 如 BK_ERR_WIFI_STA_NOT_CONFIG 表示由 WiFi 产生的一个具体错误码
SDK 错误码两个特点:
一般使用负数表示出错
错误码在 SDK 全局唯一, 每个模块在 bk_err.h 中定义一个错误码基地址,然后在 API 头文件中定义本模块特有的错误码
Note
第三方代码提供的 API 返回值不是 bk_err_t, 如 socket API 等。
错误码返回
为了使应用程序尽可能精确的定义问题出错点,SDK API 返回错误码时会尽量精确。
一方面将同类别,但出错点不同的错误使用不同的错误码区分,另一方面,尽可能将底层具体错误返回到 API.
Note
在 SDK API 注释中,常常会看到错误码为 others 情形,这表示 API 所调用的底层代码或者其他模块函数所返回。
出错检测宏
应用程序在使用 SDK API 时,建议使用 SDK 提供宏进行出错检测。
BK_LOG_ON_ERR
当 API 返回不为 BK_OK 时打出调用函数名称,行号及错误码,但不会从 API 调用函数返回。
BK_RETURN_ON_ERR
当 API 返回不为 BK_OK 时, 立即从 API 调用函数返回, 返回值为 API 返回的错误码。
BK_ABORT_ON_ERR
当 API 返回不为 BK_OK 时, 调用 bk_reboot() 重起系统。