嵌入式C語言編程小知識_第1頁
嵌入式C語言編程小知識_第2頁
嵌入式C語言編程小知識_第3頁
嵌入式C語言編程小知識_第4頁
嵌入式C語言編程小知識_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——嵌入式C語言編程小知識嵌入式C語言編程小學(xué)識

嵌入式系統(tǒng)是用來操縱或者監(jiān)視機(jī)器、裝置、工廠等大規(guī)模設(shè)備的系統(tǒng)。下面為大家整理了一些嵌入式C語言編程小學(xué)識,一起來看看吧!

1.流水線被指令填滿時(shí)才能發(fā)揮最大效能

即每時(shí)鐘周期完成一條指令的執(zhí)行僅指單周期指令。假設(shè)程序發(fā)生跳轉(zhuǎn),流水線會被清空,這將需要幾個(gè)時(shí)鐘才能使流水線再次填滿。因此,盡量少的使用跳轉(zhuǎn)指令可以提高程序執(zhí)行效率,解決發(fā)案就是盡量使用指令的“條件執(zhí)行”功能。

2.在LPC2200系列中:

可以通過過下面的程序延遲10毫秒:

fori=0;i200;i++

forj=0;j200;j++;

3.同過下面語句將一個(gè)16位的變量放在兩個(gè)8位的變量中。

//IP數(shù)據(jù)報(bào)總長度高字節(jié)

IpHeadUint8[10]=IpHead.e_ip.Crc0xff008;

//IP數(shù)據(jù)報(bào)總長度低字節(jié)

IpHeadUint8[11]=IpHead.e_ip.Crc0x00ff;

4.在對全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長度。

eg;inta[]=1,2,3,4,5;

但假設(shè)當(dāng)輸出第a[5]以上的元素時(shí),系統(tǒng)回輸出隨機(jī)數(shù)值,所以使用此方法時(shí),不能使用超過初始值元素以上的元素。

5.關(guān)鍵字register的用法:

當(dāng)對一個(gè)變量頻繁被讀寫時(shí),需要反復(fù)訪問內(nèi)存,從而花費(fèi)大量的存取時(shí)間。為此,C語言供給了一種變量,即寄放器變量。這種變量存放在CPU的寄放器中,使用時(shí),不需要訪問內(nèi)存,而直接從寄放器中讀寫,從而提高效率。寄放器變量的說明符是register。對于循環(huán)次數(shù)較多的循環(huán)操縱變量及循環(huán)體內(nèi)反復(fù)使用的變量均可定義為寄放器變量,而循環(huán)計(jì)數(shù)是應(yīng)用寄放器變量的最好候選者。

1只有局部自動(dòng)變量和形參才可以定義為寄放器變量。由于寄放器變量屬于動(dòng)態(tài)存儲方式,凡需要采用靜態(tài)存儲方式的量都不能定義為寄放器變量,包括:模塊間全局變量、模塊內(nèi)全局變量、局部static變量;

2register是一個(gè)建議型關(guān)鍵字,意指程序建議該變量放在寄放器中,但最終該變量可能由于條件不得志并未成為寄放器變量,而是被放在了存儲器中,但編譯器中并不報(bào)錯(cuò)在C++語言中有另一個(gè)建議型關(guān)鍵字:inline。

6.對于程序代碼

已經(jīng)被燒錄在FLASH或ROM中,我們可以讓CPU直接從其中讀取代碼執(zhí)行,但通常這不是一個(gè)好手段,我們最好在系統(tǒng)啟動(dòng)后將FLASH或ROM中的目標(biāo)代碼拷貝入RAM中后再執(zhí)行以提高取指令速度;

CPU對各種存儲器的訪問速度,根本上是:

CPU內(nèi)部RAM外部同步RAM外部異步RAMFLASH/ROM

7.函數(shù)指針

1C語言中函數(shù)名直接對應(yīng)于函數(shù)生成的指令代碼在內(nèi)存中的地址,因此函數(shù)名可以直接賦給指向函數(shù)的指針

2調(diào)用函數(shù)實(shí)際上等同于“調(diào)用指令+參數(shù)傳遞處理+回歸位置入?!?,本質(zhì)上最核心的操作是將函數(shù)生成的目標(biāo)代碼的首地址賦給CPU的PC寄放器。

3由于函數(shù)調(diào)用的本質(zhì)是跳轉(zhuǎn)到某一個(gè)地址單元的code去執(zhí)行,所以可以“調(diào)用一個(gè)根本就不存在在函數(shù)實(shí)體

4int*p;定義p是一個(gè)指向函數(shù)的指針變量,次函數(shù)返回帶回整型的返回值。*P兩側(cè)的括號不能省略,表示p先于*結(jié)合,是指針變量,然后再與后面的結(jié)合,表示此指針指向函數(shù)。

識別:int*p表示這個(gè)函數(shù)的返回值是指向整型變量的指針。

說明:

1指向函數(shù)的指針變量的一般定義形式為:

數(shù)據(jù)類型*指針變量名;

1此處的“數(shù)據(jù)類型”是指函數(shù)返回值的類型

2返回指針值的'函數(shù):

類型名*函數(shù)名參數(shù)表

eg:int*funcintx,inty

func是函數(shù)名,調(diào)用它以后能返回一個(gè)指向整型數(shù)據(jù)的指針。x,y是func的形參。

識別方法:

a.從右往左找第一個(gè)括號,括號里面的是函數(shù)的形參。

b.括號外面的第一個(gè)標(biāo)識符是函數(shù)的名字,函數(shù)前面的表示函數(shù)的返回?cái)?shù)值。

8.數(shù)組指針

1int*p[4]

表示*p有4個(gè)元素,每個(gè)元素為整型。也就是p所指的對象有4個(gè)整型元素的數(shù)組,既P是行指針。

2指針數(shù)組

一個(gè)數(shù)組,其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組;即指針數(shù)組中的每一個(gè)元素都相當(dāng)于一個(gè)指針變量。

一維指針數(shù)組的定義形式為:

類型名*數(shù)組名[數(shù)組長度]

eg:int*p[4]:

作用:它用于指向若干個(gè)字符串,使字符串處理更加便當(dāng)生動(dòng)。適用于一個(gè)二維字符串?dāng)?shù)組,其中每一行的字符數(shù)組的長度各不一致

eg:char*name[]=“Followme”,”BASIC”,”GreatWall”;

9.布局體

1可以用布局體變量做實(shí)參。但是用布局體變量作實(shí)參時(shí),采取的是“值傳遞”的方式,將布局體變量所占的內(nèi)存單元的內(nèi)容全部依次遞給形參。形參也務(wù)必是同類型的布局體變量。

eg:pintsu;//注在此處su為布局體

注:這種傳遞方式在空間和時(shí)間上開銷較大,假設(shè)布局體的規(guī)模較大時(shí),開銷是很可觀的。

2用直向布局體變量或數(shù)組的指針作實(shí)參,將布局體變量或數(shù)組的地址傳給形參

eg:printsu;//注在此處su為布局體

10.共用體

1共用體把幾種不同數(shù)據(jù)類型的變量存放在同一塊內(nèi)存里。公用體中的變量共享同一塊內(nèi)存。

2定義公用體類型變量的一般形式為:

union共用體名

成員列表;

變量列表;

3在共用體中同一塊內(nèi)存可以用來存放幾種不同類型的數(shù)據(jù),但在某一時(shí)刻只能在其中存放一個(gè)成員變量。共用體變量中起作用的成員是結(jié)果一次存入的數(shù)據(jù)。

eg:uniondata

inti;

charc;

doubled;

;

uniondataa;

共用體變量a中的成員i,c,d三個(gè)變量在內(nèi)存中從同一個(gè)地址開頭存儲。如舉行如下賦值:

a.i=100;

a.c=‘A’;

那么此時(shí)共用體變量a中的成員i已經(jīng)沒有值了,由于存儲該值的內(nèi)存現(xiàn)在已經(jīng)被用來存儲成員c的值了。

3共用體變量的長度取決于其成員的最大長度:

說明:

布局體變量所占內(nèi)存的長度是各個(gè)成員的總和,每個(gè)成員分別占有自己的存儲空間。共用體變量所占內(nèi)存的長度是其最長成員的長度。當(dāng)然,編譯器出于提高訪問效率的目的,在編譯調(diào)配存儲空間時(shí)往往要舉行對齊操作。

對齊操作以最大根本類型為準(zhǔn)。即以最大根本類型為根本單元。若按實(shí)際算下的長度不是根本單元的整數(shù)倍,那么其實(shí)際長度理應(yīng)是根本單元的整數(shù)倍。

在TurboC中不舉行對齊,在Linux中舉行對齊

11.CPU字長與存儲器位寬不一致處理

例如:使用共用體來解決這一沖突:

unionsend_temp

uint16words;

uint8bytes[2];

send_buff;

eg:send_buff.bytes[0]=a;//此處a是8位

溫馨提示

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

評論

0/150

提交評論