
     
    
   
    
     
    
   
    
     
     
    
   
    
     assert_param:
    
    定义如下:
   
    
     #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
    
   
    
     作用:
    
    检测传递给函数的参数是否为
    
     有效的参数
    
    
     (有效的参数:指满足规定范围的参数,如某个参数的取值范围只能小于3的整数,若给出的参数大于3,则这个assert_param()可在运行的程序调用这个函数时报错,使程序员可及时发现错误,而不必等到程序运行结果的错误而大费周折。)
    
    
    
    用于程序开发的时候,调试用的检测语句。默认是不开启的,你可以无视它的存在。但是,当你在调试程序的时候,可以打开这个检测机制,调试完了再关闭。
   
    
     怎么使assert_param起作用?
    
   
查看assert_param的定义,位于stm32fxxx_hal_conf.h文件,它实际上是个宏定义,看它的条件编译语句,当USE_FULL_ASSERT定义后,即可打开assert_param这个参数检测机制。USE_FULL_ASSERT这个宏定义已经在文件中隐掉,我们把它的注释符号去掉即可。
    
     #define USE_FULL_ASSERT    1
    
    
   
    
     
    
   
    
     如果定义了USE_FULL_ASSERT,就把assert_param定义为一个三目运算的结构,否则,就把assert_param定义为((void)0)。也就是说,你只有定义;饿USE_FULL_ASSERT,assert_param才会起作用,这个作用就是通过一个三目运算结果来判断。
    
   
    
     
    
   
当你应以了USE_FULL_ASSET之后,若立即编译,编译器会报错,提示assert_failed函数没有定义。我们把assert_failed这个函数放到main.c文件中,如下定义:
    
     void assert_failed(uint8_t* file, uint32_t line)
     
     {
     
     
     printf(“Wrong parameters value: file %s on line %d\r\n”, file, line);
     
     while(1);
     
     }
    
   
上面函数的意思:如果参数出错,输出出错的文件名和行号。结果是输出到串口,用串口调试助手可以看到输出结果。注意,编译器Build Output 栏是不会报错的。
    
     
    
   
 
