日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

01

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

02

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

03

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

04

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

05

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

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

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

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

    關(guān)注

    31

    文章

    5621

    瀏覽量

    130459
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146206

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    嵌入式單片機(jī)開發(fā)學(xué)習(xí)路徑

    項(xiàng)目 通過完成一些簡(jiǎn)單的項(xiàng)目來鞏固所學(xué)知識(shí)。例如,制作個(gè)簡(jiǎn)單的LED閃爍電路或溫度傳感器測(cè)量系統(tǒng)。 4. 高級(jí)進(jìn)階 4.1 操作系統(tǒng)學(xué)習(xí)
    發(fā)表于 02-09 15:42

    阻燃系列基礎(chǔ)知識(shí)

    我很榮幸有機(jī)會(huì)在這里與大家分享我對(duì)阻燃系列基礎(chǔ)知識(shí)的研究。今天,我們將探討的主題是“阻燃系列基礎(chǔ)知識(shí)”。在我們?nèi)粘I钪?,火?zāi)事故頻發(fā),造成巨大的財(cái)產(chǎn)損失和人員傷亡。因此,了解阻燃材料的基礎(chǔ)知識(shí)對(duì)于
    的頭像 發(fā)表于 02-06 08:07 ?650次閱讀
    阻燃系列<b class='flag-5'>基礎(chǔ)知識(shí)</b>

    爬壁機(jī)器人磁鐵的一些常見問題

    爬壁機(jī)器人近幾年比較火,它是類能夠在垂直墻面、天花板、傾斜表面上移動(dòng)和作業(yè)的特種機(jī)器人,今天我們不聊其它,只聊下關(guān)于磁吸附應(yīng)用中的磁鐵,以下是小編整理的關(guān)于爬壁機(jī)器人中磁鐵的一些常見
    的頭像 發(fā)表于 01-09 10:06 ?466次閱讀
    爬壁機(jī)器人磁鐵的<b class='flag-5'>一些</b><b class='flag-5'>常見</b>問題

    機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見錯(cuò)誤與局限性

    無論你是剛?cè)腴T還是已經(jīng)從事人工智能模型相關(guān)工作段時(shí)間,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中都存在一些我們需要時(shí)刻關(guān)注并銘記的常見錯(cuò)誤。如果對(duì)這些錯(cuò)誤置之不
    的頭像 發(fā)表于 01-07 15:37 ?369次閱讀
    機(jī)器<b class='flag-5'>學(xué)習(xí)</b>和深度<b class='flag-5'>學(xué)習(xí)</b>中需避免的 7 個(gè)<b class='flag-5'>常見</b>錯(cuò)誤與局限性

    C語(yǔ)言中一些令人震驚的結(jié)構(gòu)介紹

    C語(yǔ)言同意一些令人震驚的結(jié)構(gòu),下面的結(jié)構(gòu)是合法的嗎,如果是它做些什么? int a = 5, b = 7, c; c = a+++b;
    發(fā)表于 12-23 08:15

    無刷電機(jī)驅(qū)動(dòng)器的基礎(chǔ)知識(shí)

    本文將從技術(shù)角度出發(fā),對(duì)三相無刷電機(jī)的電機(jī)驅(qū)動(dòng)器的作用、種類和規(guī)格進(jìn)行介紹。通過本文,您可以學(xué)習(xí)到電機(jī)驅(qū)動(dòng)器選型所需的基礎(chǔ)知識(shí)。
    的頭像 發(fā)表于 12-10 14:13 ?6947次閱讀
    無刷電機(jī)驅(qū)動(dòng)器的<b class='flag-5'>基礎(chǔ)知識(shí)</b>

    單片機(jī)C語(yǔ)言編程的心得

    寫這個(gè)8*8按鍵程序的過程中,不管是在自己寫還是參考別人程序的過程中,發(fā)現(xiàn)自己對(duì)C語(yǔ)言有些基本知識(shí)點(diǎn)和編程規(guī)范有很多不懂的地方,有些是自己以前的編程習(xí)慣不好,有些就是基礎(chǔ)知識(shí)不扎實(shí)的表
    發(fā)表于 12-08 07:44

    嵌入式應(yīng)掌握的幾種能力

    1. 編程語(yǔ)言 基本掌握嵌入式必備的編程語(yǔ)言。C語(yǔ)言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用
    發(fā)表于 12-08 06:05

    Linux驅(qū)動(dòng)開發(fā)的必備知識(shí)

    內(nèi)核基礎(chǔ)知識(shí): 1、熟悉 Linux 內(nèi)核的架構(gòu)、模塊系統(tǒng)、進(jìn)程管理、內(nèi)存管理等。 了解內(nèi)核的編譯和加載過程。 2、C編程技能: 精通 C 語(yǔ)言編程,包括指針操作、內(nèi)存管理、結(jié)
    發(fā)表于 12-04 07:58

    C語(yǔ)言常見算法

    # C語(yǔ)言常見算法 C語(yǔ)言中常用的算法可以分為以下幾大類: ## 1. 排序算法 ### 冒泡排序 (Bubble Sort) ```
    發(fā)表于 11-24 08:29

    貼片電容精度J±5%的一些詳細(xì)知識(shí)

    貼片電容精度J±5%表示電容的實(shí)際值與標(biāo)稱值之間的偏差范圍在±5%以內(nèi) ,以下是關(guān)于貼片電容精度J±5%的一些詳細(xì)知識(shí)、精度等級(jí)含義 J±5% :字母“J”在貼片電容的標(biāo)識(shí)中通常表示標(biāo)稱精度
    的頭像 發(fā)表于 11-20 14:38 ?1021次閱讀
    貼片電容精度J±5%的<b class='flag-5'>一些</b>詳細(xì)<b class='flag-5'>知識(shí)</b>

    C語(yǔ)言和單片機(jī)C語(yǔ)言有什么差異

    單片機(jī)c語(yǔ)言相對(duì)于普通C語(yǔ)言增加了一些基本的指令,還有變量的賦值是16進(jìn)制,當(dāng)然單片機(jī)c
    發(fā)表于 11-14 07:55

    學(xué)單片機(jī)的誤區(qū)

    任何單片機(jī)程序的編寫。根本就不要學(xué)去C語(yǔ)言的高級(jí)用法,即使你用C語(yǔ)言的最基礎(chǔ)的語(yǔ)句能夠完成程序的編寫,底層運(yùn)行的機(jī)制是學(xué)習(xí)重中之重! 等你積
    發(fā)表于 11-14 07:46

    射頻工程師需要知道的一些常見轉(zhuǎn)接頭

    ,是由于轉(zhuǎn)接頭的損壞造成的,而且有些接頭的連接固定的方式不對(duì),每次修好的儀器,過去后客戶又按照他們?cè)瓉淼姆绞饺Q緊了。特別是在一些生產(chǎn)型的企業(yè),由于操作人員流動(dòng)性比較
    的頭像 發(fā)表于 08-06 17:39 ?1590次閱讀
    射頻工程師需要知道的<b class='flag-5'>一些</b><b class='flag-5'>常見</b>轉(zhuǎn)接頭

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

    的關(guān)鍵。旦你掌握了ARM的基本概念和匯編語(yǔ)言,你可以開始進(jìn)行一些簡(jiǎn)單的ARM項(xiàng)目。你可以嘗試編寫一些簡(jiǎn)單的程序,如LED閃爍、按鍵輸入等,以加強(qiáng)你的實(shí)踐能力。 五、
    發(fā)表于 07-23 10:21
    吉林市| 漳州市| 衡水市| 凌源市| 郧西县| 新昌县| 永登县| 肇东市| 繁峙县| 东明县| 南京市| 淮滨县| 克拉玛依市| 万山特区| 襄汾县| 北碚区| 宁夏| 延津县| 河北省| 山阴县| 鄂伦春自治旗| 兴义市| 石林| 广宗县| 婺源县| 定远县| 玉环县| 景东| 尼木县| 凤山县| 武威市| 凤阳县| 西贡区| 宜宾县| 镇江市| 盐边县| 永嘉县| 咸宁市| 建阳市| 公安县| 那坡县|