![嵌入式C語言編程小知識_第1頁](http://file4.renrendoc.com/view/c18efa1921f78afca32a6ec517e7c2d3/c18efa1921f78afca32a6ec517e7c2d31.gif)
![嵌入式C語言編程小知識_第2頁](http://file4.renrendoc.com/view/c18efa1921f78afca32a6ec517e7c2d3/c18efa1921f78afca32a6ec517e7c2d32.gif)
![嵌入式C語言編程小知識_第3頁](http://file4.renrendoc.com/view/c18efa1921f78afca32a6ec517e7c2d3/c18efa1921f78afca32a6ec517e7c2d33.gif)
![嵌入式C語言編程小知識_第4頁](http://file4.renrendoc.com/view/c18efa1921f78afca32a6ec517e7c2d3/c18efa1921f78afca32a6ec517e7c2d34.gif)
![嵌入式C語言編程小知識_第5頁](http://file4.renrendoc.com/view/c18efa1921f78afca32a6ec517e7c2d3/c18efa1921f78afca32a6ec517e7c2d35.gif)
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度戶外廣告牌施工及品牌推廣服務(wù)合同
- 亮化工程管理服務(wù)合同
- 瑜伽館合作合同協(xié)議書
- 地產(chǎn)項(xiàng)目居間協(xié)議書房產(chǎn)轉(zhuǎn)讓全文
- 第三方公司擔(dān)保合同
- 采購商品代理合同
- 2025年博爾塔拉貨車上崗證理論模擬考試題庫
- 2025年南通下載貨運(yùn)從業(yè)資格證模擬考試
- 2025年青海運(yùn)輸從業(yè)資格證考試試題庫
- 2025年合肥道路運(yùn)輸從業(yè)資格證考試題和答案
- 2025屆鄭州市高三一診考試英語試卷含解析
- 新《安全生產(chǎn)法》安全培訓(xùn)
- 《我國個(gè)人所得稅制下稅收征管問題研究》
- 建筑工程三通一平技術(shù)方案
- 綠化養(yǎng)護(hù)工安全培訓(xùn)
- 腫瘤中醫(yī)治療及調(diào)養(yǎng)
- DB21-T 1720-2017海水源熱泵系統(tǒng)工程技術(shù)規(guī)程
- 組長競選課件教學(xué)課件
- 《基于UTAUT2模型的虛擬學(xué)術(shù)社區(qū)用戶持續(xù)使用意愿影響因素研究》
- 2022年公務(wù)員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 2024 ESC慢性冠脈綜合征指南解讀(全)
評論
0/150
提交評論