HAL函数对Handle有效性的检查为什么不是用assert_param断言?
本帖最后由 zoomdy 于 2017-1-24 12:54 编辑HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
{
/* Check the SPI handle allocation */
if (hspi == NULL)
{
return HAL_ERROR;
}
/* Check the parameters */
assert_param(IS_SPI_ALL_INSTANCE(hspi->Instance));
assert_param(IS_SPI_MODE(hspi->Init.Mode));
assert_param(IS_SPI_DIRECTION(hspi->Init.Direction));
assert_param(IS_SPI_DATASIZE(hspi->Init.DataSize));
assert_param(IS_SPI_NSS(hspi->Init.NSS));
assert_param(IS_SPI_NSSP(hspi->Init.NSSPMode));
......
}以HAL_SPI_Init为例,hspi参数的检查并没有使用assert_param断言宏,如果是我实现的话,我会用assert_param(hspi != NULL)实现。一般来讲,入参错误通常是bug,本着早死早超生的原则,用断言宏把它摁死更干脆。使用返回值的话,如果调用方没有检查返回值的话,会转移事故现场,增加排错的难度。不知道HAL中使用返回错误值的方式检测Handle参数有没有什么用意?或者说有什么好处?
本帖最后由 creep 于 2017-2-8 08:55 编辑
先抢个沙发:),楼下再细说。 楼主需要明白的是断言(assert_param)一般只用在程序的调试阶段用于判断传入的部分系统参数是否正确,等程序发布的时候编译生成可执行文件时是会关闭断言的,因为断言可能在某种程度上影响程序的运行效率。但是此时对传入函数的参数是否为NULL 需要任何时候都要进行判断,所以不能用断言assert_param(hspi != NULL)进行判断了。
支持二楼的解释。 :o:o:o:o:o:o 不明白断言是什么意思:L 二楼真相 前来围观 不过学了一招 支持2楼解释 围观学习一下.......
页:
[1]
2