当前位置:首页 > > strongerHuang
[导读]很多初学者都不知道这个“do{...} while(0U)”作用和意义,甚至觉得这样写的代码复杂且没意义。相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句。今天讲的主要知识点是:HAL库中do{...} while(0U)作用和意义。


关注、星标公众,不错过精彩内容

作者:strongerHuang

微信公众号:strongerHuang


1写在前面

很多初学者都不知道这个“do{...} while(0U)”作用和意义,甚至觉得这样写的代码复杂且没意义。

相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句。

今天讲的主要知识点是:HAL库中do{...} while(0U)作用和意义

当然,do{...} while(0U) 不限于HAL库中,适用于很多地方。


2

HAL库中do{} while(0U)宏定义

在HAL库中,很多.h文件都有do{...} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:


对比在LL库中时钟使能代码,如下:


很多人只会觉得LL库这种函数比较合理,而想不明白为什么HAL会使用这种“do{...} while(0U)”宏定义的语句。

下一章节重点讲述一下这种“do{...} while(0U)”宏定义的作用和意义。


3

do{...} while(0U)宏定义的作用和意义
使用do{...} while(0U)这种方式其实有几种重要作用,下面简单说几条:


1.编译出错

不使用do{}while:


使用大括号,多一个分号:


使用do{...} while(0U):


大家对比以上几种,你觉得哪一种合理?


2.避免goto跳转语句带来问题

不使用do{}hwile(0):


使用do{}hwile(0):


大家再对比以上两种,发现了什么问题?


我这里也不再继续举例说明了,大家可以上网了解,其实还有很多重要意义和作用。


怎么说呢,点到为止,希望对你有启发。


推荐阅读:

MCU堆栈空间,你设置了多少?

为什么不建议使用DS-5开发STM32?

FreeRTOS如何减少RAM占用空间并加快执行速度


关注 微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。


长按前往图中包含的公众号关注

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭