




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、上章回顧編碼的規(guī)范和程序版式管理和申明 頭文件結(jié)構(gòu)和作用程序命名程序注釋和代碼布局規(guī)范assert斷言函數(shù)的應(yīng)用與0或NULL值的比較內(nèi)存的分配和常量特性細(xì)節(jié),避免內(nèi)存泄露家園家園-開發(fā)板商城/上海第九章C語言在中的應(yīng)用家園家園-開發(fā)板商城/上海預(yù)習(xí)檢查系統(tǒng)有哪些特點關(guān)鍵字volatile的作用家園家園-開發(fā)板商城/上海課程目標(biāo)本章概述以實例說明C在中的應(yīng)用,以及注意事項 。本章目標(biāo)了解C語言在系統(tǒng)中的重要性C語言編程的特點和環(huán)境熟悉了解如何優(yōu)化C語言編程的性能重點了解平臺的特點,性編程難點C語言嵌入編程的性能優(yōu)化家園家園-開發(fā)板商城/上海本章結(jié)
2、構(gòu)C語言在中的應(yīng)用系統(tǒng)編程性能優(yōu)化家園家園-開發(fā)板商城/上海C編碼C語言在系統(tǒng)地位9 C語言在中的應(yīng)用C語言在系統(tǒng)中的地位系統(tǒng)編程的特點C編程的性能優(yōu)化家園家園-開發(fā)板商城/上海9.1 C語言在系統(tǒng)中的地位C語言背景系統(tǒng)編程C語言的嵌入應(yīng)用與匯編語言編程相比的優(yōu)勢C語言的應(yīng)用發(fā)展家園家園-開發(fā)板商城/上海9.1.1C語言背景C語言的特點C 中蘊含的OO,GP強大的語言功能靈活的語言機制家園家園-開發(fā)板商城/上海9.1.2系統(tǒng)編程系統(tǒng)有三個特點嵌入性性計算性受限的環(huán)境家園家園-開發(fā)板商城/上海9.1.2系統(tǒng)編程系統(tǒng)有三個特點嵌入性表示系
3、統(tǒng)通常需要嵌入到其他對象系統(tǒng)中性表示系統(tǒng)的軟件和硬件要有可裁剪性計算性表示系統(tǒng)必須是能滿足對象系統(tǒng)需要的電腦系統(tǒng)家園家園-開發(fā)板商城/上海9.1.2系統(tǒng)編程系統(tǒng)運行環(huán)境受限的環(huán)境應(yīng)用種類繁多家園家園-開發(fā)板商城/上海9.1.2系統(tǒng)編程C語言在系統(tǒng)的不足ISO C 的語法特性會導(dǎo)致代碼體積膨脹和執(zhí)行效率的低下C 有可能會對軟件帶來額外的開銷C語言的改造1998年,Embedded C 規(guī)范正式出爐 (EC)EC 是標(biāo)準(zhǔn)C 語言的一個子集剔除了一些實現(xiàn)復(fù)雜和會導(dǎo)致額外負(fù)擔(dān)語法元素。例如:多重繼承和虛基類、RTTI、異常處理、模版、命名空間等等在標(biāo)準(zhǔn)庫方面,EC 規(guī)范也做了刪
4、減,STL和Stream等被剔除了家園家園-開發(fā)板商城/上海9.1.3 C語言的嵌入應(yīng)用常見的VxWorksLinux Windows CE操作系統(tǒng)C語言應(yīng)用研發(fā)的和欣(Elastos)科泰世紀(jì)公司BrickOS Symbian OS Windows CE家園家園-開發(fā)板商城/上海9.1.3 與匯編語言編程相比的優(yōu)勢C語言相比匯編語言的優(yōu)勢編程調(diào)試靈活方便生成的代碼編譯效率高完全模塊化可移植性好便于項目維護管理家園家園-開發(fā)板商城/上海9.2C編程編程環(huán)境模塊劃分多任務(wù)與單任務(wù)中斷服務(wù)程序硬件驅(qū)動模塊家園家園-開發(fā)板商城/上海9.2.1編程的環(huán)境
5、理解全貌檢查環(huán)境器I/O指針與地址通訊過程 中斷接觸硬件家園家園-開發(fā)板商城/上海9.2.2模塊劃分概念:合理的將一個很大的軟件劃分為一系列功能獨立的部分合作完成系統(tǒng)的需求一個系統(tǒng)通常包括兩類模塊硬件驅(qū)動模塊,一種特定硬件對應(yīng)一個模塊軟件功能模塊,其模塊的劃分應(yīng)滿足低偶合、高內(nèi)聚的要求家園家園-開發(fā)板商城/上海9.2.3 多任務(wù)與單任務(wù)概念該系統(tǒng)不能支持多任務(wù)并發(fā)操作,宏觀串行地執(zhí)行一個任務(wù)可以宏觀并行地“同時”執(zhí)行多個任務(wù)堆棧溢出多任務(wù)特點依賴于一個多任務(wù)操作系統(tǒng)(OS)多任務(wù)OSVxworksucLinux家園家園-開發(fā)板商城/上海9.2.3 多任務(wù)與單
6、任務(wù)單任務(wù)程序典型架構(gòu)從CPU 復(fù)位時的指定地址開始執(zhí)行;跳轉(zhuǎn)至匯編代碼startup 處執(zhí)行;跳轉(zhuǎn)至用戶主程序main 執(zhí)行,在main 中完成:初試化各硬件設(shè)備;初始化各軟件模塊;進入死循環(huán)(無限循環(huán)),調(diào)用各模塊的處理函數(shù)家園家園-開發(fā)板商城/上海9.2.3 多任務(wù)與單任務(wù)循壞模式循壞模式while(1)循壞模式for(;)死循壞例子操作系統(tǒng)是死循環(huán);WIN32 程序是死循環(huán);系統(tǒng)軟件是死循環(huán);多線程程序的線程處理函數(shù)是死循環(huán)。家園家園-開發(fā)板商城/上海9.2.4 中斷服務(wù)程序中斷服務(wù)程序的要求不能返回值;不能向ISR 傳遞參數(shù);ISR 應(yīng)該盡可能的短小精悍函數(shù)不
7、能帶來重入和性能問題家園家園-開發(fā)板商城/上海9.2.5 硬件驅(qū)動模塊硬件驅(qū)動模塊通常應(yīng)包括如下函數(shù)中斷服務(wù)程序ISR 硬件初始化修改寄存器,設(shè)置硬件參數(shù)將中斷服務(wù)程序地址寫入中斷向量表:設(shè)置CPU該硬件的線設(shè)置CPU 內(nèi)部對應(yīng)寄存器使其作為信號;位,設(shè)置中斷方式設(shè)置CPU 內(nèi)部的該設(shè)備的中斷提供一系列該設(shè)備的操作接口函數(shù)家園家園-開發(fā)板商城/上海階段小節(jié)Ô系統(tǒng)編程軟件架構(gòu)方面的知識Ô 模塊劃分、多任務(wù)還是單任務(wù)選取Ô 中斷服務(wù)程序、硬件驅(qū)動模塊設(shè)計Ô 單任務(wù)程序典型架構(gòu)家園家園-開發(fā)板商城/上海9.3系統(tǒng)編程的特點C
8、語言語法優(yōu)化字節(jié)對齊詳解關(guān)鍵字volatile 中斷程序利用硬件特性活用位操作 內(nèi)嵌匯編使用寄存器變量家園家園-開發(fā)板商城/上海9.3.1 C語言語法優(yōu)化數(shù)據(jù)類型關(guān)于局部變量函數(shù)操作語法結(jié)構(gòu)優(yōu)化家園家園-開發(fā)板商城/上海數(shù)據(jù)類型硬件系統(tǒng)編譯器設(shè)置某些編譯器選項dclcom家家園-開發(fā)板/上海城C語言性能數(shù)據(jù)類型結(jié)構(gòu)體數(shù)據(jù)的優(yōu)化規(guī)則小的元素放在結(jié)構(gòu)體的開始,大的元素放在結(jié)構(gòu)體的最后;避免使用過大的結(jié)構(gòu)體,用層次話的小結(jié)構(gòu)體代替;人工對API的結(jié)構(gòu)體增加填充位以提高移植性;枚舉類型要慎用,因為它的大小與編譯器相關(guān);家園家園-開發(fā)板商城
9、/上海 關(guān)于局部變量局部變量的數(shù)據(jù)類型最好有系統(tǒng)操作位一致比如:ARM數(shù)據(jù)處理操作都是32位的,局部變量應(yīng)盡可能使用32位的數(shù)據(jù)類型(int或long)分析short checksum_v3(short * data)unsigned int i; short sum = 0;for(i = 0; i < 64 ; i+)sum = (short)( sum + datai );return sum;shortshortint降低程序的效率家園家園-開發(fā)板商城/上海 關(guān)于局部變量程序分析提高性能short checksum_v3(sho
10、rt * data)unsigned int i; int sum = 0;for(i = 0; i < 64 ; i+)sun += ( data +);return (short) sum;家園家園-開發(fā)板商城/上海 函數(shù)操作ARM函數(shù)參數(shù)特性系統(tǒng)寄存器堆棧家園家園-開發(fā)板商城/上海 函數(shù)操作函數(shù)優(yōu)化規(guī)則盡量限制函數(shù)參數(shù),不要超過四個,也可以把相關(guān)的參數(shù)組織在結(jié)構(gòu)體傳遞。把比較小的被調(diào)用函數(shù)和調(diào)用函數(shù)放在同一個源文件中用_inline內(nèi)聯(lián)性能影響較大的重要函數(shù)。函數(shù)參數(shù)和返回值應(yīng)盡量使用int類型;對于調(diào)用頻率較低的全局變量,盡量使
11、用小的數(shù)據(jù)類型以節(jié)省空間。家園家園-開發(fā)板商城/上海 語法結(jié)構(gòu)優(yōu)化語法結(jié)構(gòu)規(guī)則使用減數(shù)到零的循環(huán)體,以節(jié)省指令和寄存器的使用;使用無符號的循環(huán)計數(shù)值,并用條件 i != 0中止;如果循環(huán)體至少執(zhí)行一次,用優(yōu)先選用dowhile;適當(dāng)情況下展開循環(huán)體;盡量使用數(shù)組的大小是4或8的倍數(shù),用此倍數(shù)展開循環(huán)體;盡量避免使用邊界不對齊數(shù)據(jù)。家園家園-開發(fā)板商城/上海什么是字節(jié)對齊對齊的定義按照一定的規(guī)則在空間上排列,而不是順序的一個接一個的排放對齊的各個硬件平臺對空間的處理上有很大的不同對齊的作用提高存取效率家園家園-開發(fā)板商城/上海9.3
12、.1.6 字節(jié)對齊對程序的影響例A例Bstruct Bchar b; int a; short c;struct Aint a; char b; short c;假定運行在32位系統(tǒng)結(jié)果sizeof(strcut A)的值為?sizeof(struct B)的值是?812家園家園-開發(fā)板商城/上海 字節(jié)對齊對程序的影響例D例C/*指定按2字節(jié)對齊*/ #pragma pack (2) struct Cchar b; int a; short c;#pragma pack ()/*指定按1字節(jié)對齊*/ #pragma pack (1) struct Dchar b; i
13、nt a; short c;#pragma pack ()假定運行在32位系統(tǒng)結(jié)果sizeof(strcut C)的值為?sizeof(struct D)的值是?87家園家園-開發(fā)板商城/上海編譯器是按照什么樣的原則進行對齊的基本概念數(shù)據(jù)類型自身的對齊值:char型數(shù)據(jù),其自身對齊值為1 short型為2,int,float,double類型,其自身對齊值為4結(jié)構(gòu)體或者類的自身對齊值:其成員中自身對齊值最大的那個值。指定對齊值:#pragma pack (value)時的指定對齊值value。數(shù)據(jù)成員、結(jié)構(gòu)體和類的有效對齊值:自身對齊值和指定對齊值中小的那個值。重要概
14、念有效對齊N存放起始地址%N=0對齊值圓整結(jié)構(gòu)體成員變量占用總長度需要是對結(jié)構(gòu)體有效對齊值的整數(shù)倍家園家園-開發(fā)板商城/上海 編譯器是按照什么樣的原則進行對齊的例Astruct Bchar int例A分析假定B起始地址為0X0000b -> 0x0000%1=0 ->0X000-0X000 a -> 0x0004%4=0 ->0X004-0X007 c -> 0x0008%2=0 ->0X008-0X009結(jié)構(gòu)體的有效對齊值MAX(1,4,2) -> 4B ->(10+2)%40 ->0X000-0X00Bb;a;
15、short c;假定運行在32位系統(tǒng)結(jié)果sizeof(struct B)的值是?12家園家園-開發(fā)板商城/上海編譯器是按照什么樣的原則進行對齊的例C例C分析假定B起始地址為0X0000b -> 0x0000%1=0 ->0X000-0X000b有效對齊值->MIN(2,4)->2a -> 0x0004%2=0 ->0X002-0X003 a -> 0x0006%2=0 ->0X004-0X005 c -> 0x0008%2=0 ->0X006-0X007結(jié)構(gòu)體的有效對齊值MAX(4,2) -> 2B -
16、> (8)%20 ->0X000-0X007/*指定按2字節(jié)對齊*/ #pragma pack (2) struct Cchar int shortb;a;c;#pragma pack ()假定運行在32位系統(tǒng)結(jié)果sizeof(struct C)的值是?家園8家園-開發(fā)板商城/上海字節(jié)對齊,我們在編程中如何考慮如何節(jié)約空間結(jié)構(gòu)中的變量按照類型大小從小到大以空間換取時間 顯式struct Achar a; char int b;3;/使用空間換時間家園家園-開發(fā)板商城/上海 字節(jié)對齊可能帶來的隱患如下例子有什么問題?分析unsign
17、ed int i = 0x12345678; unsigned char *p=NULL; unsigned short *p1=NULL;p=&i;*p=0x00;p1=(unsigned short *)(p+1);*p1=0x0000;家園家園-開發(fā)板商城/上海0 如何查找與字節(jié)對齊方面的問題編譯器的big little端設(shè)置看這種體系本身是否支持非對齊如果支持看設(shè)置了對齊與否,如果沒有則看時需要加某些特殊的修飾來標(biāo)志其特殊操作。家園家園-開發(fā)板商城/上海1 對齊的使用 align(num) packed家園家園-開發(fā)板商城ub
18、.com/上海9.3.2 關(guān)鍵字volatilevolatile特點:變量可能會被意想不到地改變優(yōu)化器在用到這個變量時必須每次都重新這個變量的值主要的應(yīng)用實例并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器);到的非自動變量(也就是全局變量);一個中斷服務(wù)子程序中會多線程應(yīng)用中被幾個任務(wù)共享的變量家園家園-開發(fā)板商城/上海9.3.3 關(guān)鍵字volatile例子分析int a,b,c;/*I/O空間0x100端口的內(nèi)容存入a變量*/a = inWord(0x100); b = a;/*再次I/O空間0x100端口的內(nèi)容存入a變量*/a = inWord (0x100); c = a;會出現(xiàn)什么錯
19、誤呢?家園家園-開發(fā)板商城/上海9.3.3 關(guān)鍵字volatile例子分析系統(tǒng)優(yōu)化int a,b,c;/*I/O空間0x100端口的內(nèi)容存入a變量*/a = inWord(0x100); b = a;/*再次I/O空間0x100端口的內(nèi)容存入a變量*/a = inWord (0x100); c = a;會出現(xiàn)什么錯誤呢?家園家園-開發(fā)板商城/上海9.3.3 關(guān)鍵字volatile例子分析正確改正int b,c; volatile int a;/*I/O空間0x100端口的內(nèi)容存入a變量*/a = inWord(0x100); b = a;/*再次I/O空間0x100端口
20、的內(nèi)容存入a變量*/a = inWord (0x100); c = a;會出現(xiàn)什么錯誤呢?家園家園-開發(fā)板商城/上海9.3.3 關(guān)鍵字volatilevolatile的特點一個參數(shù)既可以是const還可以是volatile嗎?解釋為什么? 一個指針可以是volatile 嗎?解釋為什么。下面的函數(shù)有什么錯誤:家園家園-開發(fā)板商城/上海9.3.4 中斷程序中斷程序特性分析 interrupt double compute_area (double radius)double area = PI * radius * radius; printf(" Area =
21、 %f", area);return area;家園家園-開發(fā)板商城/上海9.3.4 中斷程序中斷程序特性分析ISR 不能返回一個值。ISR 不能傳遞參數(shù)。在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額處的寄存器入棧,有些處理器/編譯器就是不在ISR中做浮點運算。此外,ISR應(yīng)該是短而有效率的,在ISR中做浮點運算是不明智的。printf()經(jīng)常有重入和性能上的問題家園家園-開發(fā)板商城/上海9.3.5 利用硬件特性器的速度選擇CPU內(nèi)部RAM FLASH/ROM>外部同步RAM>外部異步RAM>硬件內(nèi)部的空間利用
22、減少了CPU 對外設(shè)的干預(yù)家園家園-開發(fā)板商城/上海9.3.6 活用位操作位操作特點位是可以操作的最小數(shù)據(jù)理論上可以用“位運算”來完成所有的運算和操作提高程序運行的效率例子:/* 方法1 */int i,j;i = 879 / 16;j = 562 % 32;/* 方法2 */int i,j;i = 879 >> 4;j = 562 - (562 >> 5 << 5);家園家園-開發(fā)板商城/上海9.3.6 活用位操作硬件寄存器進行位設(shè)置寄存器的第低6位設(shè)置為0#define INT_I2_MASK0x0040wTemp = inword(INT_MASK); outword(INT_MASK, wTemp &INT_I2_MASK);寄存器的第低6位設(shè)置為1設(shè)置寄存器的第低6位設(shè)置是否為1#define INT_I2_MASK0x0040wTemp = inword(INT_MASK); if(wTemp & INT_I2_MASK)/* 該位為1 *//上海家園 開發(fā)板商城 9.3.7 內(nèi)嵌匯編內(nèi)嵌匯編特點提高運算速度內(nèi)嵌匯編語法_asm 例子/* 把兩個輸入?yún)?shù)的值相加,結(jié)果存放到另外一個全局變量中*/ int result;void Add(long a, l
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年兩人股份協(xié)議書模板
- 2025年技術(shù)轉(zhuǎn)讓合同模板版
- 六年級下冊數(shù)學(xué)教案- 3.2 正比例 正比例的意義|西師大版
- 五年級上冊數(shù)學(xué)教案-4.小數(shù)的大小比較 蘇教版
- 《野望》歷年中考古詩欣賞試題匯編(截至2022年)
- 2025年湖南省邵陽市單招職業(yè)適應(yīng)性測試題庫審定版
- 2024年水輪機及輔機項目資金需求報告
- 2025年嘉興職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫新版
- 2025年河南省新鄉(xiāng)市單招職業(yè)傾向性測試題庫及答案1套
- 微專題21 圓錐曲線經(jīng)典難題之一類探索性問題的通性通法研究 -2025年新高考數(shù)學(xué)二輪復(fù)習(xí)微專題提分突破140分方案
- 采購部組織結(jié)構(gòu)圖
- 土力學(xué)與地基基礎(chǔ)(課件)
- 股票入門-k線圖基礎(chǔ)知識
- 全國大全身份證前六位、區(qū)號、郵編-編碼
- 種植林業(yè)可行性研究報告
- 金和物業(yè)公司簡介
- 廣東省五年一貫制考試英語真題
- 2023年中央廣播電視總臺校園招聘筆試參考題庫附帶答案詳解
- 項目部崗位廉潔風(fēng)險情景教育案例
- 小學(xué)英語-What a dream教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 消防栓定期檢查記錄表
評論
0/150
提交評論