應(yīng)部分老鐵的要求,講一些細(xì)節(jié)知識(shí)點(diǎn)。一來(lái),我不用花費(fèi)大量精力去寫(xiě)文章;二來(lái),大家也不會(huì)因看文章覺(jué)得累。
1寫(xiě)在前面
很多初學(xué)者,以及有一定工作經(jīng)驗(yàn)的朋友都不知道這個(gè)“do{...} while(0U)”作用和意義,甚至覺(jué)得這樣寫(xiě)的代碼復(fù)雜且沒(méi)意義。
相信使用過(guò)STM32Cube HAL庫(kù)的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語(yǔ)句。
今天講的主要知識(shí)點(diǎn)是:HAL庫(kù)中do{...} while(0U)作用和意義。
當(dāng)然,do{...} while(0U)不限于HAL庫(kù)中,適用于很多地方。
2
HAL庫(kù)中do{} while(0U)宏定義
在HAL庫(kù)中,很多.h文件都有do{...} while(0U)這樣的宏定義,比如:在stm32f1xx_hal_rcc.h中,使能GPIO時(shí)鐘:
對(duì)比在LL庫(kù)中時(shí)鐘使能代碼,如下:
很多人只會(huì)覺(jué)得LL庫(kù)這種函數(shù)比較合理,而想不明白為什么HAL會(huì)使用這種“do{...} while(0U)”宏定義的語(yǔ)句。
下一章節(jié)重點(diǎn)講述一下這種“do{...} while(0U)”宏定義的作用和意義。
3
do{...} while(0U)宏定義的作用和意義
使用do{...} while(0U)這種方式其實(shí)有幾種重要作用,下面簡(jiǎn)單說(shuō)幾條:
1.編譯出錯(cuò)
不使用do{}while:
使用大括號(hào),多一個(gè)分號(hào):
使用do{...} while(0U):
大家對(duì)比以上幾種,你覺(jué)得哪一種合理?
2.避免goto跳轉(zhuǎn)語(yǔ)句帶來(lái)問(wèn)題
不使用do{}hwile(0):
使用do{}hwile(0):
大家再對(duì)比以上兩種,發(fā)現(xiàn)了什么問(wèn)題?
我這里也不再繼續(xù)舉例說(shuō)明了,大家可以上網(wǎng)了解,其實(shí)還有很多重要意義和作用。
怎么說(shuō)呢,點(diǎn)到為止,希望對(duì)你有啟發(fā)。
-
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9231 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
286瀏覽量
16273 -
HAL庫(kù)
+關(guān)注
關(guān)注
1文章
121瀏覽量
6944
發(fā)布評(píng)論請(qǐng)先 登錄
基于STM32 HAL庫(kù)與標(biāo)準(zhǔn)庫(kù)的esp8266接入機(jī)智云方案(二)

STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
使用Hal庫(kù)的SPI讀取磁邊傳感器導(dǎo)致STM32G4無(wú)法運(yùn)行怎么解決?
STM32H743程序啟動(dòng)卡在了while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U),怎么解決?
HAL庫(kù)在A(yíng)rduino平臺(tái)上的使用
HAL庫(kù)和標(biāo)準(zhǔn)庫(kù)的區(qū)別 HAL庫(kù)與CMSIS的關(guān)系
HAL庫(kù)的函數(shù)調(diào)用示例
HAL庫(kù)在STM32開(kāi)發(fā)中的重要性
如何快速入門(mén)HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較
HAL庫(kù)在嵌入式系統(tǒng)中的應(yīng)用
hal庫(kù)中i2c卡死在HAL_I2C_Master_Transmit
SV中define宏定義的用法
課程上線(xiàn) | STM32單片機(jī)入門(mén)教程(1)基于HAL庫(kù)的多核心開(kāi)發(fā)(F1/F4/G0/U5)

評(píng)論