[導讀]很多初學者都不知道這個“do{ ...} while(0U)”作用和意義,定義的作甚至覺得這樣寫的用和意義代碼復雜且沒意義。相信使用過STM32Cube HAL庫的定義的作朋友都知道,源碼里面有許多do{ ...} while(0U)的用和意義宏定義語句。今天講的定義的作主要知識點是:HAL庫中do{ ...} while(0U)作用和意義。
作者:strongerHuang

微信公眾號:strongerHuang
很多初學者都不知道這個“do{ ...} while(0U)”作用和意義,用和意義甚至覺得這樣寫的定義的作代碼復雜且沒意義。 相信使用過STM32Cube HAL庫的用和意義朋友都知道,源碼里面有許多do{ ...} while(0U)的定義的作宏定義語句。 今天講的用和意義主要知識點是:HAL庫中do{ ...} while(0U)作用和意義。 當然,定義的作do{ ...} while(0U)?不限于HAL庫中,用和意義適用于很多地方。定義的作
在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獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!