目錄
- 1.封裝寄存的C語言的語法
- volatile:
- unsigned int:
- *pGpiobOdr
- volatile unsigned int *
- 2.進一步C語言的封裝
在嵌入式中,底層一定是操作寄存器,我有一個理念,凡事一定要想清楚,把任何知識點融入自己的理解之中,這樣不被技術限制的同時,還能讓自己其他方面的認識得到進步。
下面我把自己的理解寫出來,拋磚引玉!
1.封裝寄存的C語言的語法
volatile:
編譯器在處理變量的時候,為了效率考慮,對于頻繁修改的變量會把他放在緩存(CPU里面的緩存比RAM速度快的多的多)中進行計算,等到不頻繁或者確實需要寫入內存的時候,才會寫到RAM中,不會實時的和RAM交互,對于寄存器這種和外界交互的“內存”來說,就會出現問題,看似我操作了寄存器,實際上我是自娛自樂
可以這么記憶,底層操作必須用這個volatile把寄存器和變量綁定在一起才能用,不然這個程序就不能用,或者這個數字是極其關鍵的,實時更新!
unsigned int:
寄存器都是32位的,在32位單片機中,我們需要一個能覆蓋32的數據類型,這個數據類型就是int,你問long int能不能行,其實也是可以的,不過計算起來就會非常的麻煩,unsigned是為了保證int32位都是可以說的(signed類型最高位會變成正負號)
也就是說,用unsigned int這個數據類型和整形這個概念沒有關系,只和占據32位有關系
*pGpiobOdr
指針,對于指針我們都知道是指的一個地址,但是我們要明白在實現世界還是程序代碼的世界,都是有空間時間這個概念的(by the way,多維數組表示三維空間,有點類似于二向箔對三維的二維展開),既然是一個地址根本代表不了什么,還需要知道這個地址起始,占據的空間,占據空間這個維度就需要數據類型指定,你給什么數據類型,你就在內存中圈多大的地盤,這個就是前面定義的 unsigned int參數的作用
volatile unsigned int *
強制類型轉換,c語言要求必須和前面指針類型的一致,不然就會警報。
2.進一步C語言的封裝
C語言的進一步封裝就是用結構體把大塊的內存框起來,比如關于GPIOA所有寄存器全部用結構體框起來,GPIOA內部的多個寄存器,用結構體成員區分,其實就是先用結構體圈地,然后把圈來得地分割,為什么要加結構體這個環節,主要是為了方便管理,層次分明才能邏輯清晰,打個比喻,本來你的各類資料胡亂幾千本放在一個大箱子里面,你要去尋找一個叫做東京有點熱的學習資料,發現你要一本本的去翻,這個時候你完全可以整幾個箱子分類放置,我們就可以很快的找到,很快的學習了!