1. STM32 提供的标准函数库中使用了断言功能来检测函数输入参数的正确性,我们来看下是如何实现的?
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
?{
????????uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;
?????????/* Check the parameters */
?????????assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
//?首先函数在开头就进行了代码参数的检测
断言函数是这样的:
#define assert_param(expr) \
((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
?而判断语句是这样的:如果输入的参数为非0 则ok , 否则为0?
#define IS_GPIO_PIN(PIN) ((PIN) != (uint32_t)0x00)
带入展开:
assert_param(IS_GPIO_PIN(PIN)? ? 是这样的:
(IS_GPIO_PIN(PIN) ? (void)0 : assert_failed((uint8_t *)__FILE,__LINe__))
结果是: IS_GPIO_PIN(PIN) 为真 是1? 则记过是(void)0 // 什么也没有,如果为假,则assert_failed()的内容就显示了。具体这个函数输出错误信息需要自己定义,库文件只对assert_failed ()函数进行了申明而已:
void assert_failed(uint8_t* file, uint32_t line)
|