chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

do{...} while(0U) 這種代碼的作用和意義

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-06-04 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在一些項(xiàng)目中,我們可能看到過(guò)很多,在學(xué)習(xí)的時(shí)候沒(méi)有見(jiàn)過(guò)的代碼,比如 do{...} while(0U) 這種代碼,在我們學(xué)習(xí)的時(shí)候可能很少見(jiàn),但實(shí)際項(xiàng)目中卻存在很多類(lèi)似代碼。

今天就來(lái)講講關(guān)于 do{...} while(0U) 的內(nèi)容。

1

前言

很多初學(xué)者都不知道這個(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í)鐘

65bcab4a-c4b8-11eb-9e57-12bb97331649.jpg

對(duì)比在LL庫(kù)中時(shí)鐘使能代碼,如下:

65c9c73a-c4b8-11eb-9e57-12bb97331649.jpg

很多人只會(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:

65d46a14-c4b8-11eb-9e57-12bb97331649.png

使用大括號(hào),多一個(gè)分號(hào):

65ebcb14-c4b8-11eb-9e57-12bb97331649.jpg

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

65fc6e6a-c4b8-11eb-9e57-12bb97331649.jpg

大家對(duì)比以上幾種,你覺(jué)得哪一種合理?

2.避免goto跳轉(zhuǎn)語(yǔ)句帶來(lái)問(wèn)題

不使用do{}hwile(0):

6606c112-c4b8-11eb-9e57-12bb97331649.jpg

使用do{}hwile(0):

6622dcbc-c4b8-11eb-9e57-12bb97331649.png

大家再對(duì)比以上兩種,發(fā)現(xiàn)了什么問(wèn)題?

我這里也不再繼續(xù)舉例說(shuō)明了,大家可以上網(wǎng)了解,其實(shí)還有很多重要意義和作用。

怎么說(shuō)呢,點(diǎn)到為止,希望對(duì)你有啟發(fā)。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4413

    瀏覽量

    67201
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4956

    瀏覽量

    73492
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1321

    瀏覽量

    55942
  • HAL
    HAL
    +關(guān)注

    關(guān)注

    2

    文章

    74

    瀏覽量

    13612

原文標(biāo)題:項(xiàng)目中大量使用do{...} while(0U)的作用和意義

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言中實(shí)現(xiàn)函數(shù)宏的三種方式

    在宏的第一個(gè)分號(hào)后便結(jié)束。即 a = b 和 b = tmp 均不受控制語(yǔ)句所作用。 因此,在工程中,一般使用三種方式來(lái)對(duì)函數(shù)宏進(jìn)行封裝,分別為 {}、do{...}while(0
    發(fā)表于 12-29 07:34

    【瑞薩RA6E2地奇星開(kāi)發(fā)板試用】+ 2.串口打印測(cè)試

    ) { unsigned int k=0; do { uart0_Send_Byte ((str + k)); k++; } while(k < strlen); } void
    發(fā)表于 12-08 16:41

    深入理解?RK3506 U-Boot?重定位:從代碼到原理

    ?U-Boot?代碼從初始加載地址(通常是片內(nèi)?ROM?或?Flash)復(fù)制到運(yùn)行效率更高的片外?RAM,再切換執(zhí)行環(huán)境到?RAM?中運(yùn)行。 本文將結(jié)合?U-Boot?源碼中?ARM Cortex?核心
    的頭像 發(fā)表于 11-28 07:05 ?358次閱讀
    深入理解?RK3506 <b class='flag-5'>U</b>-Boot?重定位:從<b class='flag-5'>代碼</b>到原理

    rt_mq_recv函數(shù)中timeout作用是什么?

    的值,并不被使用。 請(qǐng)問(wèn)下這部分代碼作用是什么了? /* message queue is empty */ while (mq-&gt;entry == 0
    發(fā)表于 09-29 06:27

    求助,關(guān)于rt-smart用戶態(tài)線程實(shí)時(shí)性差的問(wèn)題求解

    timespec period = {0U, 50000U}; /* 5.0E-5 seconds */ int step_sem_value; int i; (void)param_unused
    發(fā)表于 09-26 08:25

    請(qǐng)問(wèn)如何創(chuàng)建在 RAM 區(qū)域完全獨(dú)立運(yùn)行的閃存驅(qū)動(dòng)程序代碼

    Pattern Requirements) */ SCU_WDTS_CON0.U = (1 << 0u) | (0 << 1u
    發(fā)表于 07-25 07:33

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】2、I2C外設(shè)驅(qū)動(dòng)OLED屏幕和移植u8g2

    Delay的回調(diào)函數(shù)實(shí)現(xiàn); 與通訊接口(比如I2C、SPI)相關(guān)的數(shù)據(jù)傳輸回調(diào)函數(shù)。 這兩個(gè)函數(shù)的實(shí)現(xiàn)在u8g2 Wiki手冊(cè)中可以找到相關(guān)的代碼實(shí)現(xiàn)模板。 移植u8g2 在RASC中設(shè)置開(kāi)發(fā)板的I2C
    發(fā)表于 07-23 13:51

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    was resumed from stop 2 */ if(__HAL_PWR_GET_FLAG(PWR_FLAG_STOPF) == 0U) {} /* Clear stop flag
    發(fā)表于 04-27 08:05

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    was resumed from stop 2 */ if(__HAL_PWR_GET_FLAG(PWR_FLAG_STOPF) == 0U) {} /* Clear stop flag
    發(fā)表于 04-24 07:50

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    was resumed from stop 2 */ if(__HAL_PWR_GET_FLAG(PWR_FLAG_STOPF) == 0U) {} /* Clear stop flag
    發(fā)表于 04-22 08:14

    同步整流芯片U7269的工作原理

    同步整流芯片U7269具有雙LDO供電。圖1展示了低端配置的典型系統(tǒng)架構(gòu),這種供電方式的優(yōu)點(diǎn)在于其支持的輸出電壓范圍廣,即使輸出電壓降低到0V SR也能正常工作。
    的頭像 發(fā)表于 04-16 16:35 ?1201次閱讀
    同步整流芯片<b class='flag-5'>U</b>7269的工作原理

    使用IntCtrl_IP添加回調(diào)函數(shù)不起作用是怎么回事?

    使用 IntCtrl_IP 添加回調(diào)函數(shù),但它不起作用。 這是我的 LPUART0_ISR 函數(shù) void LPUART0_ISR() { const char* pBuffer = "
    發(fā)表于 04-11 07:38

    STM32H743程序啟動(dòng)卡在了while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U),怎么解決?

    使用了STM32H743的MCU,程序啟動(dòng)卡在了while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U),外部低速時(shí)鐘用示波器測(cè)量可以正常起振,電容容值12pF。
    發(fā)表于 03-14 07:00

    在工業(yè)自動(dòng)化領(lǐng)域AI,AO,DI,DO是什么,它有什么作用

    通過(guò)合理使用 AI、AO、DI、DO,工業(yè)自動(dòng)化系統(tǒng)可以實(shí)現(xiàn)精確的監(jiān)測(cè)和控制,提高生產(chǎn)效率和安全性。
    的頭像 發(fā)表于 02-06 15:51 ?6204次閱讀
    在工業(yè)自動(dòng)化領(lǐng)域AI,AO,DI,<b class='flag-5'>DO</b>是什么,它有什么<b class='flag-5'>作用</b>

    寫(xiě)ADS1247驅(qū)動(dòng)的時(shí)候,為什么不能將值寫(xiě)入寄存器?

    x00); rdata = SPI_SlaveReceive(); SPI_CS_SET; do{ *pwrite_data++ = (rdata%10) + 0x30; rdata /= 10; }while
    發(fā)表于 01-23 08:07