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

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

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

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

STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識

硬件攻城獅 ? 來源:硬件攻城獅 ? 作者:硬件攻城獅 ? 2022-11-28 15:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言是單片機(jī)開發(fā)中的必備基礎(chǔ)知識,本文列舉了部分STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識,希望能對大家有所幫助。

01

位操作 下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持以下六種位操作: 6e655cde-6ed4-11ed-8abf-dac502259ad0.png(六種位操作) 下面,重點講解一下位操作在單片機(jī)開發(fā)中的一些實用技巧。 1.1 在不改變其他位的值的狀況下,對某幾個位進(jìn)行設(shè)值。 這個場景在單片機(jī)開發(fā)中經(jīng)常使用,方法就是先對需要設(shè)置的位用&操作符進(jìn)行清零操作,然后用 | 操作符設(shè)值。 比如,我要改變GPIOA的狀態(tài),可以先對寄存器的值進(jìn)行&清零操作: 6e7cf6c8-6ed4-11ed-8abf-dac502259ad0.png ?然后再與需要設(shè)置的值進(jìn)行|或運(yùn)算: 6e907644-6ed4-11ed-8abf-dac502259ad0.png ?1.2 移位操作提高代碼的可讀性。 移位操作在單片機(jī)開發(fā)中非常重要,下面是delay_init函數(shù)的一行代碼:
SysTick->CTRL |= 1 << 1;
這個操作就是將CTRL寄存器的第1位(從0開始算起)設(shè)置為1,為什么要通過左移而不是直接設(shè)置一個固定的值呢?
其實這是為了提高代碼的可讀性以及可重用性。這行代碼可以很直觀明了的知道,是將第1位設(shè)置為1。如果寫成:
SysTick->CTRL |= 0X0002;
這個雖然也能實現(xiàn)同樣的效果,但是可讀性稍差,而且修改也比較麻煩。 1.3 ~按位取反操作使用技巧 按位取反在設(shè)置寄存器的時候經(jīng)常被使用,常用于清除某一個/某幾個位。下面是delay_us函數(shù)的一行代碼:
SysTick->CTRL &= ~(1 << 0) ;    /* 關(guān)閉SYSTICK */
該代碼可以解讀為僅設(shè)置CTRL寄存器的第0位(最低位)為0,其他位的值保持不變。
同樣我們也不使用按位取反,將代碼寫成:
SysTick->CTRL &= 0XFFFFFFFE;        /* 關(guān)閉SYSTICK */
可見,前者的可讀性及可維護(hù)性都要比后者好很多。 1.4 ^按位異或操作使用技巧 該功能非常適合用于控制某個位翻轉(zhuǎn),常見的應(yīng)用場景就是控制LED閃爍,如下:
GPIOB->ODR ^= 1 << 5;
執(zhí)行一次該代碼,就會使PB5的輸出狀態(tài)翻轉(zhuǎn)一次,如果我們的LED接在PB5上,就可以看到LED閃爍了。

02

define宏定義 define是C語言中的預(yù)處理命令,它用于宏定義(定義的是常量),可以提高源代碼的可讀性,為編程提供方便。常見的格式: 6ea22632-6ed4-11ed-8abf-dac502259ad0.png ?“標(biāo)識符”為所定義的宏名?!白址笨梢允浅?shù)、表達(dá)式、格式串等。例如: 6eb1e658-6ed4-11ed-8abf-dac502259ad0.png ?定義標(biāo)識符HSE_VALUE的值為8000000,數(shù)字后的U表示unsigned的意思。至于define宏定義的其他一些知識,比如宏定義帶參數(shù),這里就不多講解了。

03

ifdef條件編譯 單片機(jī)程序開發(fā)過程中,經(jīng)常會遇到一種情況,當(dāng)滿足某條件時對一組語句進(jìn)行編譯,而當(dāng)條件不滿足時則編譯另一組語句。
條件編譯命令最常見的形式為:
#ifdef 標(biāo)識符    程序段1#else    程序段2#endif
它的作用是:當(dāng)標(biāo)識符已經(jīng)被定義過(一般是用#define命令定義),則對程序段1進(jìn)行編譯,否則編譯程序段2。 其中#else部分也可以沒有,即:
  #ifdef
    程序段1
    #endif
條件編譯在HAL庫里面是用得很多,在stm32mp1xx_hal_conf.h這個頭文件中經(jīng)常會看到這樣的語句:
   #if !defined  (HSE_VALUE)
      #define HSE_VALUE            24000000U
    #endif
如果沒有定義HSE_VALUE這個宏,則定義HSE_VALUE宏,并且HSE_VALUE的值為24000000U。條件編譯也是C語言的基礎(chǔ)知識吧。 這里提一下,24000000U中的U表示無符號整型,常見的,UL表示無符號長整型,F(xiàn)表示浮點型。 這里加了U以后,系統(tǒng)編譯時就不進(jìn)行類型檢查,直接以U的形式把值賦給某個對應(yīng)的內(nèi)存,如果超出定義變量的范圍,則截取。

04

extern變量申明 C語言中extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時在其他模塊中尋找其定義。 這里面要注意,對于extern申明變量可以多次,但定義只有一次。在我們的代碼中你會看到看到這樣的語句:
extern uint16_t g_usart_rx_sta;
這個語句是申明g_usart_rx_sta變量在其他文件中已經(jīng)定義了,在這里要使用到。 所以,你肯定可以找到在某個地方有變量定義的語句:
 uint16_t g_usart_rx_sta;
extern的使用比較簡單,但是也會經(jīng)常用到,需要掌握。

05

typedef類型別名 typedef用于為現(xiàn)有類型創(chuàng)建一個新的名字,或稱為類型別名,用來簡化變量的定義。typedef在HAL庫用得最多的就是定義結(jié)構(gòu)體的類型別名和枚舉類型了。
    struct _GPIO
    {
        __IO uint32_t CRL;
        __IO uint32_t CRH;

};
定義了一個結(jié)構(gòu)體GPIO,這樣我們定義結(jié)構(gòu)體變量的方式為:
struct  _GPIO  gpiox;       /* 定義結(jié)構(gòu)體變量gpiox */
但這樣很繁瑣,HAL庫中有很多這樣的結(jié)構(gòu)體變量需要定義。 這里我們可以為結(jié)體定義一個別名GPIO_TypeDef,這樣我們就可以在其他地方通過別名GPIO_TypeDef來定義結(jié)構(gòu)體變量了,方法如下:
    typedef struct
    {
            __IO uint32_t CRL;
            __IO uint32_t CRH;

    } GPIO_TypeDef;
Typedef為結(jié)構(gòu)體定義一個別名GPIO_TypeDef,這樣我們可以通過GPIO_TypeDef來定義結(jié)構(gòu)體變量:GPIO_TypeDef gpiox; 這里的GPIO_TypeDef就跟struct _GPIO是等同的作用了,但是GPIO_TypeDef使用起來方便很多。
審核編輯 :李倩

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

    關(guān)注

    31

    文章

    5503

    瀏覽量

    128251
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    144138

原文標(biāo)題:那些一看就會、一放就忘的C語言知識

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    ARM入門學(xué)習(xí)方法分享

    的關(guān)鍵。旦你掌握了ARM的基本概念和匯編語言,你可以開始進(jìn)行一些簡單的ARM項目。你可以嘗試編寫一些簡單的程序,如LED閃爍、按鍵輸入等,以加強(qiáng)你的實踐能力。 五、
    發(fā)表于 07-23 10:21

    如何在 樹莓派 上編寫和運(yùn)行 C 語言程序?

    在本教程中,我將討論C編程語言是什么,C編程的用途,以及如何在RaspberryPi上編寫和運(yùn)行C程序。本文的目的是為您介紹在RaspberryPi上進(jìn)行
    的頭像 發(fā)表于 03-25 09:28 ?858次閱讀
    如何在 樹莓派 上編寫和運(yùn)行 <b class='flag-5'>C</b> <b class='flag-5'>語言</b>程序?

    為什么學(xué)了C語言,卻寫不出像樣的項目?

    學(xué)習(xí)編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語言都是
    的頭像 發(fā)表于 03-14 17:37 ?604次閱讀
    為什么學(xué)了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的項目?

    EMC基礎(chǔ)知識-華為

    EMC基礎(chǔ)知識-華為
    發(fā)表于 01-06 14:09 ?4次下載

    新手怎么學(xué)嵌入式?

    。但面對這個復(fù)雜的領(lǐng)域,很多人可能會感到迷茫,不知從何處入手。別擔(dān)心,本文將為你提供一些入門學(xué)習(xí)嵌入式技術(shù)的建議。 新手入門學(xué)習(xí)嵌入式技術(shù)的途徑 1. 了解基礎(chǔ)知識 首先,要對嵌
    發(fā)表于 12-12 10:51

    硬件工程師需要掌握的硬件基礎(chǔ)知識

    作為個資深硬件工程師,我們需要掌握一些硬件基礎(chǔ)知識,今天總結(jié)下哪些算是基礎(chǔ)知識。給學(xué)電子方面想從事硬件工作的同學(xué)們
    的頭像 發(fā)表于 12-02 09:22 ?2555次閱讀
    硬件工程師需要掌握的硬件<b class='flag-5'>基礎(chǔ)知識</b>

    一些半導(dǎo)體的基礎(chǔ)知識

    我們身邊的材料可以按導(dǎo)電性分為導(dǎo)體(Conductor)、絕緣體(Insulator)和半導(dǎo)體(Semiconductor)。金屬、石墨、人體等具有良好的導(dǎo)電能力,被稱為導(dǎo)體。橡膠、塑料、干木頭等是不導(dǎo)電的,或者說導(dǎo)電能力極差,屬于絕緣體。而導(dǎo)電能力介于導(dǎo)體與絕緣體之間的硅、鍺等材料,就是半導(dǎo)體。來張圖直觀看看物體的導(dǎo)電性: 按照導(dǎo)電性可分為: 絕緣體:電導(dǎo)率很低,介于10-18~10-8 S/cm,如熔融石英、玻璃; 導(dǎo)體:電導(dǎo)率較高,介于103~108 S/cm,如鉍、銀等金
    的頭像 發(fā)表于 11-27 10:14 ?2185次閱讀
    <b class='flag-5'>一些</b>半導(dǎo)體的<b class='flag-5'>基礎(chǔ)知識</b>

    一些常見的動態(tài)電路

    無論是模電還是數(shù)電,理論知識相對來說還是比較枯燥,各種電路原理理解清楚不算容易,換種生動形象的方式或許會增加一些趣味性,也更容易理解這些知識
    的頭像 發(fā)表于 11-16 09:26 ?1527次閱讀
    <b class='flag-5'>一些</b><b class='flag-5'>常見</b>的動態(tài)電路

    編程語言的誤區(qū)與常見問題

    誤區(qū):編程語言的選擇 常見問題: 初學(xué)者在選擇編程語言時,往往會被市場上的熱門語言所吸引,而忽視了自己的實際需求和興趣。
    的頭像 發(fā)表于 11-15 09:35 ?988次閱讀

    NPU支持的編程語言有哪些

    NPU(Neural Processing Unit)是種專門為深度學(xué)習(xí)和人工智能應(yīng)用設(shè)計的處理器。NPU支持的編程語言通常與它所集成的平臺或框架緊密相關(guān)。以下是一些
    的頭像 發(fā)表于 11-15 09:21 ?2398次閱讀

    分享一些常見的電路

    理解模電和數(shù)電的電路原理對于初學(xué)者來說可能比較困難,但通過一些生動的教學(xué)方法和資源,可以有效地提高學(xué)習(xí)興趣和理解能力。 下面整理了一些常見
    的頭像 發(fā)表于 11-13 09:28 ?1066次閱讀
    分享<b class='flag-5'>一些</b><b class='flag-5'>常見</b>的電路

    物聯(lián)網(wǎng)學(xué)習(xí)路線來啦!

    C,適當(dāng)涉及一些常見的數(shù)據(jù)結(jié)構(gòu),如隊列,堆棧,鏈表,排序算法和查找算法等。 開發(fā)工具,可以用開源的gcc編譯器配合VS Code,或者Dev-C++集成開發(fā)環(huán)境,亦或者還有很多在線
    發(fā)表于 11-11 16:03

    學(xué)習(xí)go語言的過程踩過的坑

    作為個5年的phper,這兩年公司和個人都在順應(yīng)技術(shù)趨勢,新項目慢慢從php轉(zhuǎn)向了go語言,從2021年到現(xiàn)在,筆者手上也先后開發(fā)了兩個go項目。在學(xué)習(xí)go語言的過程中也
    的頭像 發(fā)表于 11-11 09:22 ?753次閱讀

    品質(zhì)管理基礎(chǔ)知識

    品質(zhì)管理基礎(chǔ)知識
    的頭像 發(fā)表于 11-01 11:08 ?833次閱讀
    品質(zhì)管理<b class='flag-5'>基礎(chǔ)知識</b>

    零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線

    可視化,以界面的形式呈現(xiàn)出來更加直觀,也對于C++所學(xué)的內(nèi)容能進(jìn)行應(yīng)用。這部分也可以做一些項目,比如:網(wǎng)絡(luò)調(diào)試助手、計算機(jī)、記事本、聊天室等。 第六步:學(xué)習(xí)STM32單片機(jī) 了解過的
    發(fā)表于 10-25 15:55