- 3
- 0
- 约3.89千字
- 约 5页
- 2017-07-09 发布于河南
- 举报
STM32中的 assert_param 函数
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。4 断言机制函数assert_param我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型#define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)(PERIPH)) == GPIOA_BASE)|| \((*(uint32_t*)(PERIPH)) == GPIOB_BASE) || \((*(uint32_t*)(PERIPH)) == GPIOC_BASE) || \((*(uint32_t*)(PERIPH)) == GPIOD_BASE) || \((*(uint32_t*)(PERIPH)) == GPIOE_BASE) || \((*(uint32_t*)(PERIPH)) == GPIOF_BASE) || \((*(uint32_t*)(PERIPH)) == GPIOG_BASE))这个宏定义的作用就是检查参数PERIPH,判断参数PERIPH是否为GPIOX(A...G)基址中的一个,只要有一个为真则其值为真,否则为假,不用多说,这是C语言中基本的逻辑运算。当然这个库函数也用的很有意思,看:首先对PERIPH进行取址,也就是求地址,PERIPH,然后对这个地址强制转化为32位的指针,即前面加(uint32_t *),然后通过*进行访问这个地址(指针)中的内容。不多说了,看几遍就能明白。下面我们再回到assert_param这个函数,这个函数是哪里的呢?在stm32f10x_conf.h寻找到原型如下:#ifdef USE_FULL_ASSERT#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t*)__FILE__, __LINE__))void assert_failed(uint8_t* file, uint32_t line);#else#define assert_param(expr) ((void)0)#endif这是一个预编译文件,若是定义了USE_FULL_ASSERT这个文件,则执行后面的文件,我们在程序中一般都没什么定义,即执行后面这个语句((void)0),这个语句不用多想,没有定义USE_FULL_ASSERT就是什么也不执行。说的明白点,对上面的那个语句IS_GPIO_ALL_PERIPH(GPIOx)不执行任何操作。若是定义了USE_FULL_ASSERT它,我们调用这个函数assert_param时,及对参数IS_GPIO_ALL_PERIPH(GPIOx)的正确性进行检查,通过一个C语言中的双目运算符来判断,若是返回1,执行语句(void)0,跟上面一样,若是返回0,则执行后面的函数assert_failed((uint8_t *)__FILE__,__LINE__),函数的作用在库函数中有解释,用来指示出错的行数和文件。注意:__FILE__,__LINE__是标准库函数中的宏定义!切记void assert_failed(uint8_t* file, uint32_t line);刚开始没看明白为什么加在这里,仔细一想是在头文件的函数声明。至于函数实体呢?我们从官方文件的模板中main.c中可以找到。如下:void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and linenumber, ex: printf(Wrong parameters value: file %s on line %d\r\n, file,line) */ /* Infinite loop */ while (1) { } } 英文注释也说明了怎么应用,通过输入参数来确定位置,最简单的方法就是串口打印了,这个函数的主要思想是在输入参数有问题的时候,但是有编译不出来,它可以帮你检查参数的有效性,好处不必多言,自己领悟就行。继续说明如下:assert_param是怎样包含进去的呢?我们在stm32f10x_conf.h这个头文件中定义的函数声明还是宏定义,怎么在其它文件中都能应用呢?也很多网上朋友在刚开始学
您可能关注的文档
- 法律英语:继承法(二).docx
- 人教课标版语文八年级下第五单元《五柳先生传》.ppt
- 大学新视野英语第三册单词.docx
- 《参数方程》导学案.doc
- 邹忌讽齐王纳谏复习2013.ppt
- BAS上速率模板参数说明.docx
- 含参数函数恒成立问题.doc
- Cisco 常用命令及说明.doc
- 以太网专网业务参数说明.docx
- N3101、03、05定时器参数.docx
- 2025年新外研版三年级上册英语同步教学课件.pptx
- 红十字会大讲堂管理制度.docx
- 技术奇点(Singularity)理论的科学基础、哲学思辨与未来社会构想 _2026年1月.docx
- 公共艺术项目在激活城市消极空间(如高架桥下、废弃铁轨)中的作用 _2026年1月.docx
- “双减”政策对校外培训行业转型及家庭教育投入变化的影响 _2026年1月.docx
- Z世代员工对职场“摸鱼文化”的态度成因与管理对策研究 _2026年1月.docx
- 跨文化团队管理中的沟通障碍、文化冲突与融合策略案例分析 _2026年1月.docx
- 共享经济平台将劳动者归类为“合作伙伴”的伦理与法律责任 _2026年1月.docx
- 大型国际展会(如进博会、CES)的绿色会展实践与可持续发展评估 _2026年1月.docx
- 地理标识产品(如阳澄湖大闸蟹)与产地旅游的融合发展研究 _2026年1月.docx
最近下载
- 欧洲癌症研究质量组织结直肠癌专用生存质量问卷( EORTC QLQ CR29).docx
- 2025年新疆中考物理试题(含答案解析 ).pdf
- 一年级快乐读书吧《和大人一起读—儿童故事》课件.pptx VIP
- EPC项目设计及施工的配合.docx VIP
- 旅游消费的特点.pptx VIP
- 经肛门灌洗治疗直肠癌低位前切除综合征中国专家共识解读PPT课件.pptx VIP
- (一模)新疆2026年高三普通高考二月适应性检测文科综合试卷(含官方答案).docx
- 中国老年人肌少症诊疗专家共识(2021).pdf VIP
- 建筑拆除机器人分选再生骨料技术项目技术创新总结报告.pptx
- 2025年河北省单招三类试卷及答案.docx VIP
原创力文档

文档评论(0)