色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

C語言基礎知識點

大魚機器人 ? 來源:大魚機器人 ? 2023-05-31 09:07 ? 次閱讀

C語言是單片機開發中的必備基礎知識,這里就列舉部分STM32學習中會遇見的C 語言基礎知識點。

01

位操作 下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持如下6中位操作: 63d8da1e-ff45-11ed-90ce-dac502259ad0.png 六種位操作 下面我們想著重講解位操作在單片機開發中的一些實用技巧。 ? 1. 1 在不改變其他位的值的狀況下,對某幾個位進行設值。 這個場景在單片機開發中經常使用,方法就是先對需要設置的位用&操作符進行清零操作,然后用 | 操作符設值。 比如我要改變GPIOA的狀態,可以先對寄存器的值進行&清零操作: 63ee23c4-ff45-11ed-90ce-dac502259ad0.png ? 然后再與需要設置的值進行|或運算: ? 640e261a-ff45-11ed-90ce-dac502259ad0.png ? 1.2 移位操作提高代碼的可讀性。 移位操作在單片機開發中非常重要,下面是delay_init函數的一行代碼:

SysTick->CTRL |= 1 << 1;
這個操作就是將CTRL寄存器的第1位(從0開始算起)設置為1,為什么要通過左移而不是直接設置一個固定的值呢?
其實這是為了提高代碼的可讀性以及可重用性。這行代碼可以很直觀明了的知道,是將第1位設置為1。如果寫成:
SysTick->CTRL |= 0X0002;
這個雖然也能實現同樣的效果,但是可讀性稍差,而且修改也比較麻煩。 1.3 ~按位取反操作使用技巧 按位取反在設置寄存器的時候經常被使用,常用于清除某一個/某幾個位。下面是delay_us函數的一行代碼:
SysTick->CTRL &= ~(1 << 0) ;    /* 關閉SYSTICK */
該代碼可以解讀為 僅設置CTRL寄存器的第0位(最低位)為0,其他位的值保持不變。
同樣我們也不使用按位取反,將代碼寫成:
SysTick->CTRL &= 0XFFFFFFFE;        /* 關閉SYSTICK */
可見前者的可讀性,及可維護性都要比后者好很多。 1.4 ^按位異或操作使用技巧 該功能非常適合用于控制某個位翻轉,常見的應用場景就是控制LED閃爍,如:
GPIOB->ODR ^= 1 << 5;
執行一次該代碼,就會使PB5的輸出狀態翻轉一次,如果我們的LED接在PB5上,就可以看到LED閃爍了。

02

define宏定義 define是C語言中的預處理命令,它用于宏定義(定義的是常量),可以提高源代碼的可讀性,為編程提供方便。常見的格式: 642be1f0-ff45-11ed-90ce-dac502259ad0.png “標識符”為所定義的宏名。“字符串”可以是常數、表達式、格式串等。例如: 644328b0-ff45-11ed-90ce-dac502259ad0.png 定義標識符HSE_VALUE的值為8000000,數字后的U表示unsigned的意思。 至于define宏定義的其他一些知識,比如宏定義帶參數這里我們就不多講解。

03

ifdef條件編譯 單片機程序開發過程中,經常會遇到一種情況,當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。 條件編譯命令最常見的形式為:

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

04

extern變量申明 C語言中extern可以置于變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。 這里面要注意,對于extern申明變量可以多次,但定義只有一次。在我們的代碼中你會看到看到這樣的語句:

extern uint16_t g_usart_rx_sta;
這個語句是申明g_usart_rx_sta變量在其他文件中已經定義了,在這里要使用到。 所以,你肯定可以找到在某個地方有變量定義的語句:
 uint16_t g_usart_rx_sta;
extern的使用比較簡單,但是也會經常用到,需要掌握。

05

typedef類型別名 typedef用于為現有類型創建一個新的名字,或稱為類型別名,用來簡化變量的定義。typedef在HAL庫用得最多的就是定義結構體的類型別名和枚舉類型了。

    struct _GPIO
    {
        __IO uint32_t CRL;
        __IO uint32_t CRH;
        …
};
定義了一個結構體GPIO,這樣我們定義結構體變量的方式為:
struct  _GPIO  gpiox;       /* 定義結構體變量gpiox */
但是這樣很繁瑣,HAL庫中有很多這樣的結構體變量需要定義。這里我們可以為結體定義一個別名GPIO_TypeDef,這樣我們就可以在其他地方通過別名GPIO_TypeDef來定義結構體變量了,方法如下:
    typedef struct
    {
            __IO uint32_t CRL;
            __IO uint32_t CRH;
            …
    } GPIO_TypeDef;
Typedef為結構體定義一個別名GPIO_TypeDef,這樣我們可以通過GPIO_TypeDef來定義結構體變量:GPIO_TypeDef gpiox; 這里的GPIO_TypeDef就跟struct _GPIO是等同的作用了,但是GPIO_TypeDef使用起來方便很多。
審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634621
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136683

原文標題:STM32中常用的C語言知識點,開始復習!

文章出處:【微信號:All_best_xiaolong,微信公眾號:大魚機器人】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言基礎知識點-9條語句

    [table][tr][td] 學習C語言最基礎的知識點要數9條語句了,雖是基礎內容,但用9條語句卻可以實現很多功能。看了下面的每條語句的一一舉例后,你就會覺得其實9條語句很簡單,也不過如此
    發表于 07-19 08:16

    STM32常用C語言基礎知識點有哪些

    1.位操作C語言支持下列6種位操作符.&:按位與.|:按位或.^ :按位異或.~:取反.:左移注:操作符不包括左小角的小點,請忽略小點2.define 宏定義define是C語言種的預
    發表于 07-14 07:04

    萌新求助關于STM32常用C語言基礎知識點

    萌新求助關于STM32常用C語言基礎知識點
    發表于 10-14 06:26

    關于C語言基礎知識點總結的太棒了

    關于C語言基礎知識點總結的太棒了
    發表于 10-15 07:57

    STM32編程的C語言基礎知識點匯總,不看肯定后悔

    STM32編程的C語言基礎知識點匯總,不看肯定后悔
    發表于 11-25 07:34

    淺談幾個C語言基礎知識點

    文章目錄前言一、位操作二、使用步驟前言這里主要是簡單的復習一下幾個 C 語言基礎知識點,引導那些 C 語言
    發表于 12-09 07:14

    嵌入式C語言基礎知識點匯總

    C 有32個關鍵字、9種控制語句、34種運算符、8種數據類型。一、典型代碼分析1、C語言中包含頭文件有兩個符號“”和,雙引號“”時編譯器首先在當前目錄下搜索需要包含的頭文件,如果當前目錄下無該文
    發表于 12-15 07:23

    講解位操作在單片機開發中的一些實用技巧

    導讀C 語言是單片機開發中的必備基礎知識。我們這里就列舉部分STM32學習中會遇見的C 語言基礎知識點
    發表于 01-24 08:18

    STM32學習中會遇見的C語言基礎知識點講解

    C語言是單片機開發中的必備基礎知識,這里就列舉部分STM32學習中會遇見的C 語言基礎知識點。0
    發表于 02-28 07:11

    單片機開發常用C語言復習資料

    文章目錄前言一、位操作二、使用步驟前言這里主要是簡單的復習一下幾個 C 語言基礎知識點,引導那些 C 語言
    發表于 11-26 14:21 ?12次下載
    單片機開發常用<b class='flag-5'>C</b><b class='flag-5'>語言</b>復習資料

    嵌入式C語言常用知識點

    導讀C 語言是單片機開發中的必備基礎知識。我們這里就列舉部分STM32學習中會遇見的C 語言基礎知識點
    發表于 11-29 17:06 ?6次下載
    嵌入式<b class='flag-5'>C</b><b class='flag-5'>語言</b>常用<b class='flag-5'>知識點</b>

    STM32中常用的C語言知識點,開始復習!

    要學嵌入式,關注@我要學嵌入式,嵌入式猛男的加油站。C語言是單片機開發中的必備基礎知識,這里就列舉部分STM32學習中會遇見的C 語言
    發表于 01-13 15:37 ?10次下載
    STM32中常用的<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>知識點</b>,開始復習!

    C語言-語句(if,for,while.....)

    這篇文章作為C語言基礎知識點,介紹C語言常用的幾個語句的用法、規則、使用案例。
    的頭像 發表于 08-14 10:00 ?1781次閱讀

    關于C語言基礎知識點介紹

    不可將布爾變量直接與 TRUE、 FALSE或者 1、 0進行比較 。據布爾類型的語義,零值為“ 假”(記為 FALSE),任何非零值都是“ 真”(記為TRUE)。
    發表于 02-08 15:18 ?301次閱讀

    STM32學習中關于C語言基礎知識點

    這個操作就是將CTRL寄存器的第1位(從0開始算起)設置為1,為什么要通過左移而不是直接設置一個固定的值呢?
    發表于 03-20 09:52 ?306次閱讀
    主站蜘蛛池模板: 欧美性色生活片天天看99顶级| 亚洲日本香蕉视频观看视频| 果冻传媒在线播放 免费观看| 5g天天影院天天看天天爽| 婷婷五月久久丁香国产综合| 两性午夜刺激爽爽视频| 国产精品外围在线观看| 99精品国产高清自在线看超| 亚洲欧美日韩国产手机在线| 日本特黄的免费大片视频| 久久综合给会久久狠狠狠| 国产精品嫩草久久久久| no视频在线观看| 中文字幕一区二区视频| 亚洲精品久久久久久蜜臀| 日韩做A爰片久久毛片A片毛茸茸| 麻豆精品传媒卡一卡二传媒短视频| 高清一区二区亚洲欧美日韩| 70岁妇女牲交色牲片| 一级无毛片| 亚洲国产AV精品卡一卡二| 肉动漫h黄动漫日本免费观看| 嫩草影院永久在线一二三四| 久久精品电影| 狠狠干老司机| 国产精品伦一区二区三级视频| 阿片在线播放| max girls 大感谢祭| 伊人久久综合谁合综合久久| 亚洲精品久久7777777| 婷婷久久无码欧美人妻| 人人爽天天碰狠狠添| 欧美成人亚洲高清在线观看| 萝莉御姐被吸奶| 久久理伦片琪琪电影院| 久久99精品久久久久久园产越南| 国产学生在线播放精品视频| 国产免费毛片在线观看| 国产麻豆福利AV在线观看| 国产欧美日韩网站| 国产亚洲精品久久久久苍井松|