国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

在一些項目中,我們可能看到過很多,在學習的時候沒有見過的代碼,比如 do{...} while(0U) 這種代碼,在我們學習的時候可能很少見,但實際項目中卻存在很多類似代碼。

今天就來講講關于 do{...} while(0U) 的內容。

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時鐘

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

對比在LL庫中時鐘使能代碼,如下:

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

很多人只會覺得LL庫這種函數比較合理,而想不明白為什么HAL會使用這種“do{...} while(0U)”宏定義的語句。 下一章節重點講述一下這種“do{...} while(0U)”宏定義的作用和意義。

3

do{...} while(0U)宏定義的作用和意義

使用do{...} while(0U)這種方式其實有幾種重要作用,下面簡單說幾條:

1.編譯出錯

不使用do{}while:

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

使用大括號,多一個分號:

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

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

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

大家對比以上幾種,你覺得哪一種合理?

2.避免goto跳轉語句帶來問題

不使用do{}hwile(0):

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

使用do{}hwile(0):

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

大家再對比以上兩種,發現了什么問題?

我這里也不再繼續舉例說明了,大家可以上網了解,其實還有很多重要意義和作用。

怎么說呢,點到為止,希望對你有啟發。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4409

    瀏覽量

    66973
  • 代碼
    +關注

    關注

    30

    文章

    4947

    瀏覽量

    73291
  • GPIO
    +關注

    關注

    16

    文章

    1314

    瀏覽量

    55785
  • HAL
    HAL
    +關注

    關注

    2

    文章

    73

    瀏覽量

    13566

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

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【瑞薩RA6E2地奇星開發板試用】+ 2.串口打印測試

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

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

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

    rt_mq_recv函數中timeout作用是什么?

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

    求助,關于rt-smart用戶態線程實時性差的問題求解

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

    請問如何創建在 RAM 區域完全獨立運行的閃存驅動程序代碼

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

    【RA-Eco-RA6M4開發板評測】2、I2C外設驅動OLED屏幕和移植u8g2

    Delay的回調函數實現; 與通訊接口(比如I2C、SPI)相關的數據傳輸回調函數。 這兩個函數的實現在u8g2 Wiki手冊中可以找到相關的代碼實現模板。 移植u8g2 在RASC中設置開發板的I2C
    發表于 07-23 13:51

    STM32U5 IWDG的提前喚醒中斷無法在STOP模式下觸發怎么解決?

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

    STM32U5 IWDG的提前喚醒中斷無法在STOP模式下觸發怎么解決?

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

    STM32U5 IWDG的提前喚醒中斷無法在STOP模式下觸發怎么解決?

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

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

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

    使用IntCtrl_IP添加回調函數不起作用是怎么回事?

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

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

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

    在工業自動化領域AI,AO,DI,DO是什么,它有什么作用

    通過合理使用 AI、AO、DI、DO,工業自動化系統可以實現精確的監測和控制,提高生產效率和安全性。
    的頭像 發表于 02-06 15:51 ?5394次閱讀
    在工業自動化領域AI,AO,DI,<b class='flag-5'>DO</b>是什么,它有什么<b class='flag-5'>作用</b>

    寫ADS1247驅動的時候,為什么不能將值寫入寄存器?

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

    javascript:void(0) 的作用是什么

    javascript:void(0) 在 HTML 和 JavaScript 中是一個常見的表達式,主要用來創建一個無操作的鏈接(通常是 標簽)或者阻止默認事件處理。具體來說,它的作用有以下幾點
    的頭像 發表于 12-31 15:55 ?4185次閱讀