在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取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庫這種函數(shù)比較合理,而想不明白為什么HAL會使用這種“do{...} while(0U)”宏定義的語句。 下一章節(jié)重點講述一下這種“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

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

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

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

編輯:jq

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

    關注

    3

    文章

    4346

    瀏覽量

    62977
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69057
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52384
  • HAL
    HAL
    +關注

    關注

    2

    文章

    71

    瀏覽量

    12676

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

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

收藏 人收藏

    評論

    相關推薦

    GD32F4xx_Demo_Suites里的PMU_Sleep_Wakeup如何從串口從deepsleep狀態(tài)喚醒?

    (EVAL_COM0_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,EVAL_COM0_RX_PIN); nvic_irq_enable(EXTI10_15_IRQn, 2U,
    發(fā)表于 09-27 06:33

    使用PIC32MK多電機開發(fā)板例程時,用PICkit3將例程燒寫進去以后,會卡在ADC初始化是為什么?

    == 0U) // Wait until the reference voltage is ready { /* Nothing to do */ } 請問這個是為什么呢?
    發(fā)表于 07-26 06:53

    ESP8266 I2C通信故障怎么解決?

    the \'$\' in frameLength_u16 tries */ { counter_u16 = 0u; gnrmcFrame_tu8[counter_u16] = i2c
    發(fā)表于 07-19 06:50

    stm32h5使用jlink調試器,在while (READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == 0U)這里超時的原因?

    ,然后淘寶買了個jlink的調試器,就想試下,結果連上后,發(fā)現(xiàn)程序會在rcc初始化的時候,在 while (READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == 0U)這里超時,進errorhandler
    發(fā)表于 05-27 07:36

    無損檢測有哪些實際意義作用

    作用。本文將詳細介紹無損檢測的實際意義作用。 一、無損檢測的定義和分類 無損檢測是一種檢測方法,它能夠在不破壞被檢測對象的情況下,評估其內部和表面的質量。無損檢測技術廣泛應用于各個領域,如航空航天、核能、石油化工、機械制造、
    的頭像 發(fā)表于 05-24 15:03 ?1607次閱讀

    STM32 RTX CAN封裝庫中while循環(huán)無法跳出是為什么?

    ;MCRCAN_MCR_RESET) != 0U); #defineCAN_MCR_RESET((uint16_t)0x8000)/*!< CAN software master
    發(fā)表于 04-19 07:58

    使用STM32F407 USB HOST遇到的疑問求解

    ; } } while ((USBx->GRSTCTLUSB_OTG_GRSTCTL_AHBIDL) == 0U); /* Core Soft Reset */ count = 0U
    發(fā)表于 04-03 06:11

    關于STM32F103 USB示例代碼的疑問求解

    + (((uint32_t)(bEpNum) * 8U) * PMA_ACCESS)); *_wRegVal = ((wAddr) >> 1) << 1; } while(0) /* PCD_SE
    發(fā)表于 03-27 07:14

    USB庫函數(shù)里有些地方判斷CID寄存器的bit8位,1或0執(zhí)行不同操作,請問這位代表什么意思?

    ); } if ((dma == 0U) (hc->do_ping == 1U)) { (void)USB_DoPing(USBx, hc->ch_num); return HAL_OK; } }
    發(fā)表于 03-25 08:18

    STM32F3系列和STM32F4系列的USB庫Class應用層代碼差異是什么?

    )0x80U) == 0x80U) { pdev->ep_in[(uint8_t)req->wIndex0xFU].is_used = 0U; if (pdev->
    發(fā)表于 03-25 07:35

    交換芯片的作用意義

    交換芯片作為網(wǎng)絡設備中的核心組件,其作用意義不可忽視。
    的頭像 發(fā)表于 03-18 14:34 ?740次閱讀

    使用RTOS還能調用LL_mDelay延時函數(shù)嗎?

    ) { tmpDelay ++; } while (tmpDelay!= 0U) { if ((SysTick->CTRLSysTick_CTRL_COUNTFLAG_Msk) != 0U) { tmpDelay
    發(fā)表于 03-14 07:08

    FM0+ S6E1C-Series Starter Kit開發(fā)板,I2SL0口通過中斷讀取出的數(shù)據(jù)始終為0,播放音頻可以是怎么回事?

    dB stcWm8731Reg.LLIN_f.LINMUTE = 1u;// Enable left channel line input mute stcWm8731Reg.LLIN_f.LRINBOTH = 0u
    發(fā)表于 02-21 06:47

    xmc1302使用官網(wǎng)的BLDC案例,一直出現(xiàn)卡在下面的函數(shù)出不來的原因?

    *) MOTOR0_BLDC_SCALAR_VADC_PHASEU_VOLTAGE_GRP); } while (vadc_conversion_status == 0U);希望各位大神指點一下,一直卡這里出不來,不知道什么原因
    發(fā)表于 02-18 08:18

    arduino中while循環(huán)怎么跳出

    Arduino 是一款開源的硬件平臺,廣泛應用于各種物聯(lián)網(wǎng)和嵌入式系統(tǒng)項目。在 Arduino 上編寫代碼時,循環(huán)結構起到了至關重要的作用。而其中的 while 循環(huán)更是常用于需要根據(jù)特定條件重復
    的頭像 發(fā)表于 02-14 16:22 ?2719次閱讀
    主站蜘蛛池模板: 亚洲 欧美 丝袜 制服 在线 | 国模小丫大尺度啪啪人体 | 久久福利青草精品资源站免费 | 68日本xxxxxxxxx xx | sss欧美华人整片在线观看 | 欧美系列在线播放 | 天天色天天操天天射 | 日本黄色高清视频网站 | 藏经阁在线 | 天天综合网天天做天天受 | 亚洲综合欧美日本另类激情 | 欧美激情亚洲精品日韩1区2区 | 深夜动态福利gif动态进 | 国产精品美女在线 | 欧美黑人巨大日本人又爽又色 | 精品国产污网站在线观看15 | 在线免费观看h视频 | 成人精品视频一区二区三区 | 成人免费一区二区三区 | 国产一级αv片免费观看 | 国产在线视频你懂的 | a级毛片免费网站 | 久久成人免费网站 | 天天操网| 一级毛片真人免费观看 | 亚洲一区二区三区在线视频 | 亚洲色图久久 | 黄色大片三级 | 黄色www| 很黄很黄的网站免费的 | 成人精品视频在线观看播放 | 夜夜做日日做夜夜爽 | 欧美操穴 | 婷婷深爱五月 | 国产图片综合 | 国产精品久久久久久免费播放 | 国产欧美日韩视频免费61794 | 在线天堂bt种子 | 欧美另类图片亚洲偷 | 欧美爆操 | 国产精欧美一区二区三区 |