STM32F103學習筆記 day17
要復習一下C語言基礎(chǔ)知識
1、stdint.h
是從C99中引進的一個標準C庫的文件
地址:D:\MDK5.34\ARM\ARMCC\include

里面定義了一些數(shù)據(jù)類型,主要的作用就是后續(xù)編寫程序的時候不需要再挨個去確定數(shù)據(jù)類型了。數(shù)據(jù)類型的表達方式變得非常固定。
C99是什么???
C99?(以前稱為C9X?)是ISO / IEC 9899:1999的非正式名稱,在1999年推出,被ANSI于2000年3月采用。它是C編程語言標準的過去版本。 它擴展了以前的版本( C90 ),增加了語言和標準庫的新功能,并幫助實現(xiàn)更好地利用可用的計算機硬件,如IEEE 754-1985浮點運算和編譯器技術(shù),最主要的增強在數(shù)值處理上。 2011年發(fā)布的C編程語言標準的C11版本取代了C99。
打開我自己的,發(fā)現(xiàn)長這個樣子,可能以后編程序的時候需要對照著打開看一下,能省不少事。

2、位操作

按位取反是個單目運算符,出現(xiàn)在要取反的對象的左側(cè)
左移,如果有的位“移出去了”,則丟掉,空缺的位用0代替
右移,如果有的位“移出去了”,則判斷是有符號數(shù)還是無符號數(shù),無符號數(shù)直接補零,如果是有符號數(shù):看符號位是0還是1,0是正數(shù),空缺位補0,1是負數(shù),空缺位補1。
如何給寄存器的某個位賦值:位操作,比如這個:

注意,最低位是位0,不是位1
方法1:按位與或者按位或(但是這個的可讀性比較差,而且比較麻煩)
方法2:

1左移6位,變到位6,然后前面有個取反,就相當于和那個0xFFFFFFBF一個效果了
這個句子大概就是這樣:
temp=temp&{~(1<<6)}
3、宏定義
可以提高效率,可讀性,易改性,核心是替換

宏定義的名字,要大寫。本質(zhì)就是用這個宏定義的名字,來替換“常數(shù)、表達式、格式串”
舉個例子:

建議用do{...}while(0)來構(gòu)造宏定義,這樣不會受到大括號、分號、運算符優(yōu)先級等的影響,總是會按你期望的方式調(diào)用運行。
我他媽都不知道啥是構(gòu)造語句

這就是構(gòu)造語句,還是很好理解的,注意,用這個結(jié)構(gòu)的時候一定要用大括號
4、條件編譯
讓編譯器只對滿足條件的代碼進行編譯,不滿足條件的不參與編譯

ifdef跟宏名,ifndef也是
大概格式:

如果沒定義ledh,就執(zhí)行下面的語句,如果定義了,就不執(zhí)行
這個的主要作用是,可以省略不少頭文件被引用的時間,加快程序運行速度,減少編譯時間

if后面跟一個宏的意思就是:如果宏是個變量,檢測其值,若為1,執(zhí)行后續(xù)代碼,若為0,不執(zhí)行。
5、extern聲明
放在函數(shù)/變量前面,表示這個函數(shù)/變量再其他文件定義,以便文件引用。

6、類型別名(typedef)
為現(xiàn)有數(shù)據(jù)類型創(chuàng)建一個新的名字,或稱為類型別名,用來簡化變量的定義
這是形式和例子

7、結(jié)構(gòu)體
又若干數(shù)據(jù)類型集合組成的一種自定義數(shù)據(jù)類型,也叫聚合類型

在ST的里面,主要的應用格式長這樣:

8、指針
指針就是內(nèi)存的地址,指針變量是保存了指針的變量,是個變量。這是兩個東西

*+指針變量名?? 是取變量的值
&+指針變量名 是取變量的地址

第一種常見問題:

并沒有給他分配內(nèi)存,就是少了一步uint_8 buf[5]={1,3,5,7,9};這種東西
第二種常見問題:
越界使用

只有五個地址,你去用第六個,就是越界了
今天就學到這里!