STM32单片机HAL库函数assert_param理解

2 篇文章 0 订阅
2 篇文章 0 订阅

在使用STM32单片机时,对于assert_param函数在单片机的各个外设等的初始化作用没有仔细看,本篇博客将表达自己对该函数的理解。

#ifdef  USE_FULL_ASSERT
/**
  * @brief  The assert_param macro is used for function's parameters check.
  * @param  expr: If expr is false, it calls assert_failed function
  *         which reports the name of the source file and the source
  *         line number of the call that failed. 
  *         If expr is true, it returns no value.
  * @retval None
  */
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */  

上述函数已经详细说明在宏定义USE_FULL_ASSERT后使能assert_param函数

函数的作用是:如果参数expr不成立,则调用assert_failed函数,与此同时该函数会报告源文件的名称和调用失败的源行号。

                            如果参数expr成立,则返回0.

                           主要的作用就是检测传参的正确性。

以DMA的FIFO_MODE_STATE为例

assert_param(IS_DMA_FIFO_MODE_STATE(hdma->Init.FIFOMode));

经过传参后进入下式函数

#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMODE_DISABLE ) || \
                                       ((STATE) == DMA_FIFOMODE_ENABLE))

如果在初始化时选择((STATE) = DMA_FIFOMODE_DISABLE )

则 ((STATE) = =DMA_FIFOMODE_DISABLE )   的逻辑值为1

则(((STATE) == DMA_FIFOMODE_DISABLE ) ||((STATE) == DMA_FIFOMODE_ENABLE))=1

所以传入的参数有效(即所传入的参数为给定参数之一),返回0

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值