ARM微控制器與嵌入式系統(tǒng) 課件 6 C語(yǔ)言基礎(chǔ)復(fù)習(xí)_第1頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 6 C語(yǔ)言基礎(chǔ)復(fù)習(xí)_第2頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 6 C語(yǔ)言基礎(chǔ)復(fù)習(xí)_第3頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 6 C語(yǔ)言基礎(chǔ)復(fù)習(xí)_第4頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 6 C語(yǔ)言基礎(chǔ)復(fù)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ARM微控制器與嵌入式系統(tǒng)

6C語(yǔ)言基礎(chǔ)復(fù)習(xí)主講人:景妮琴北京電子科技職業(yè)學(xué)院C語(yǔ)言基礎(chǔ)復(fù)習(xí)位操作define宏定義ifdef條件編譯extern變量申明typedef變量別名結(jié)構(gòu)體符號(hào)

描述

運(yùn)算規(guī)則&

按位與兩個(gè)位都為1時(shí),結(jié)果才為1|

按位或

兩個(gè)位都為0時(shí),結(jié)果才為0^

按位異或兩個(gè)位相同為0,相異為1~

取反0變1,1變0<<

左移各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)0>>

右移各二進(jìn)位全部右移若干位,對(duì)無(wú)符號(hào)數(shù),高位補(bǔ)0位操作位操作:就是對(duì)類型變量可以在位級(jí)別進(jìn)行操作C語(yǔ)言支持下面6種位操作:位操作1.不改變其他位的情況下,對(duì)某幾位進(jìn)行設(shè)值方法:對(duì)需要設(shè)置的位用“&”操作符進(jìn)行清零操作,然后用“|”操作符設(shè)值。例:要改變GPIOA->BSRRL的狀態(tài),可以先對(duì)寄存器的值進(jìn)行“&”清零操作,然后進(jìn)行“|”或運(yùn)算。GPIOA->BSRRL&=0xFF0F;//這是將第4-7位清0GPIOA->BSRRL|=0x0040;//設(shè)置相應(yīng)位的值,不改變其他位的值位操作2.移位操作提高代碼的可讀性GPIOx->ODR=(((uint32_t)0x01)<<pinpos);這個(gè)操作就是將ODR寄存器的第pinpos位設(shè)置為1使用左移比設(shè)定一個(gè)固定的值要好看,并且重用性高。如:GPIOx->ODR=(((uint32_t)0x03)<<4);GPIOx->ODR=0x0030;這兩個(gè)代碼當(dāng)然是前一句的重用性高一些。位操作3.取反操作技巧取反操作經(jīng)常與“&”操作一起使用,把變量的某位清零如:GPIOx->ODR&=~(((uint32_t)0x01)<<4);這個(gè)代碼就是把bit4位清零10011111000000010000010011111011位操作4.位操作實(shí)例

(1)把變量的某位清零:此處我們以變量a代表寄存器,并假設(shè)寄存器中本來(lái)已有數(shù)值,此時(shí)我們需要把變量a的某一位清零,且其它位不變。如下代碼清單:1//定義一個(gè)變量a=10011111b(二進(jìn)制數(shù))2unsignedchara=0x9f;3//對(duì)bit2清零4a&=~(1<<2);

5//括號(hào)中的1左移兩位,(1<<2)得二進(jìn)制數(shù):00000100b6//按位取反,~(1<<2)得11111011b7//假如a中原來(lái)的值為二進(jìn)制數(shù):a=10011111b8//所得的數(shù)與a作”位與&”運(yùn)算,a=(10011111b)&(11111011b),9//經(jīng)過(guò)運(yùn)算后,a的值a=10011011b&10//a的bit2位被被零,而其它位不變。10011011

100000110000000100000100100000110000010010000111位操作4.位操作實(shí)例(2)對(duì)變量的某位進(jìn)行賦值寄存器位通過(guò)“|=”可以對(duì)某位進(jìn)行賦值。1//a=10000011b2a|=(1<<2);3//a=10000111b位操作4.位操作實(shí)例(3)對(duì)變量的某位取反我們需要對(duì)寄存器的某個(gè)位進(jìn)行取反操作,即1變0,0變1,這可以直接用如下操作,其它位不變,見(jiàn)代碼清單。1//a=10010011b2//把bit6取反,其它位不變34a^=(1<<6);5//a=11010011bdefine宏定義define是C語(yǔ)言中的預(yù)處理命令,用于宏定義,可以提高源代碼的可讀性,方便編程。常見(jiàn)的格式:#define標(biāo)識(shí)符字符串其中“標(biāo)識(shí)符”是指:宏定義的宏名“字符串”可以是常數(shù)、表達(dá)式、格式串等例:#definePLL_M8定義PLL_M的值為8ifdef條件編譯單片機(jī)程序開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到一些情況:當(dāng)滿足某條件時(shí)對(duì)一組語(yǔ)句進(jìn)行編譯,而當(dāng)條件不滿足時(shí)則編譯另一組語(yǔ)句。條件編譯命令的常見(jiàn)形式:#ifdef標(biāo)識(shí)符程序段1#else程序段2#endif作用:當(dāng)標(biāo)識(shí)符已經(jīng)被定義過(guò)(一般使用#define命令定義),則對(duì)程序段1進(jìn)行編譯,否則編譯程序段2。extern變量聲明C語(yǔ)言中extern可以置于變量或函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。注意,對(duì)于extern聲明變量可以多次,但定義只有一次。例:如果看到externu16USART_RX_STA,那么一定就有一個(gè)地方定義了u16USART_RX_STA還要注意:extern只能引用,不能賦值。typedef類型別名typedef用于為現(xiàn)有類型創(chuàng)建一個(gè)新的名字,或稱為類型別名,用來(lái)簡(jiǎn)化變量的定義。typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_ModeGPIOSpeed_TypeDefGPIO_SpeedGPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd}GPIO_InitTypeDef;這個(gè)意思就是為結(jié)構(gòu)體定義了一個(gè)類型別名GPIO_InitTypeDef這樣就可以通過(guò)這個(gè)類型定義變量了:GPIO_InitTypeDefmy_GPIO;結(jié)構(gòu)體聲明結(jié)構(gòu)體類型:Struct結(jié)構(gòu)體名{成員列表;}變量名列表;StructU_T

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論