关于C语言中assert等语法在嵌入式应用当中的含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言中assert等语法在嵌入式应用当中的含义相关的知识,希望对你有一定的参考价值。

typedef struct
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
GPIO_TypeDef;
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)//定义了一个偏移地址
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)//请问这句是什么意思?

#define GPIO_LED GPIOF

typedef struct
uint16_t GPIO_Pin;
GPiospeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
GPIO_InitTypeDef;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_Init(GPIO_LED, &GPIO_InitStructure);
/*关于这两个实参,照下面的声明看第1个是一个指向GPIO_TypeDef结构的指针,那么具体到GPIO_LED也就是上面问的那句define是什么意思?第2个实参是把GPIO_InitTypeDef结构的变量GPIO_InitStructure的首地址传进去?*/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));

这个assert是什么意思?是说(GPIO_InitStruct->GPIO_Mode)只要为下面声明中的任一项就不终止程序往下执行?
#define IS_GPIO_MODE(MODE)
(((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))

assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
意思是:IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)这个判断条件必须为真,否则程序就会进入死循环。

一般assert用来判断必须为真的一些条件,防止程序出现意外错误。
例如:
assert(汽车有4个轮子)//这个是必须成立的条件
开汽车
参考技术A #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)

//把一个数值强制转换成指针类型

GPIO_Init(GPIO_LED, &GPIO_InitStructure);

//函数调用,第一个参数为指向GPIO_TypeDef类型的地址,第二个参数为指向GPIO_InitTypeDef
类型的地址

assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));

//assert,俗称断言,即假定某些条件必为真。如果在程序运行过程中断言的条件不幸的为假,则会发生assert中断,会提示哪个文件哪一行发生了assert错误。本回答被提问者和网友采纳
参考技术B 我绝对要是不真,就直接终止

以上是关于关于C语言中assert等语法在嵌入式应用当中的含义的主要内容,如果未能解决你的问题,请参考以下文章

关于c++中的assert语句

求学 | PHP与C语言哪个更适合初学者学习?

关于语法

assertion的用法

python与嵌入式的火花

python能做嵌入式吗