嵌入式C語言復習重點_第1頁
嵌入式C語言復習重點_第2頁
嵌入式C語言復習重點_第3頁
嵌入式C語言復習重點_第4頁
嵌入式C語言復習重點_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1. 印第安序。2.內存泄露的概念。指由于疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。一般我們常說的內存泄漏是指堆內存的泄漏3.斷言的概念:用于為程序增加診斷功能。Assert,編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設。4.函數重入的概念、什么情況會造成函數的重入、互斥保護:關中斷,禁止做認為切換,利用。信號量?那些被重入后依然可以正確執(zhí)行的函數稱為可重入函數。所謂可重入函數是指一個可以被多個任務調用的過程,任務在調用時不必擔心數據是否會出錯。中斷調用引起函數重入:另一個任務調用引起函數重入:遞歸調用引起函數重入。5.中斷服務程序的特點及其注意事項。* 不能

2、返回值* 不能向ISR傳遞參數* ISR應該盡可能的短小精悍* printf(char *ipFormatString,函數會帶來重入和性能的問題,不能在ISR中使用。(在ARM平臺上由于半主機機制,速度會更慢!* 其他不可能重入的函數不可使用* 耗時的函數避免調用* 大量的運算盡量避免6.調用棧幀和中斷棧幀結構(作業(yè)先壓參數;再壓程序的返回地址;接著,將Callee中可能用到的寄存器的值保存;最后保存被調函數(Callee中使用到的臨時(局部變量:調用棧幀中斷棧幀:調用+除了要保存返回地址,還需要保存中斷前的程序狀態(tài)字(PSR;中斷處理程序沒有人工入口參數,因此中斷棧幀中也沒有所傳遞的參數。

3、7.指針的偏移,不同類型偏移不同的字節(jié)數;指針變量所占的內存大小.指針的基本偏移就是地址自加之后和原地址的差。在一般情況下,這個差是由指針類型決定的,char的基本偏移是1個字節(jié),int是4個字節(jié)(32bit機中,比如int *p,p+1和p的物理地址差是4個字節(jié),對于數組int a3,情況就少復雜,在使用中a是作為指針調用的, a的基本偏移是4個字節(jié),但是你還可以對a進行如下操作&a,這個結果也是一個指針,所指向的地址跟a一樣(數組首地址,但是基本偏移是不同的,這個偏移等于sizeof(int*3,即3×4=12(其實就是sizeof(a字節(jié),加一后,它直接指向數組后面(已

4、經在數組外了??紤]二維數組的話,你會發(fā)現(xiàn)更好的結果,比如int a37,行寬是7,a的基本偏移就是4×7字節(jié),*a是4字節(jié),*a已經不是地址,它指向數組的元素,再看&a,跟一維的情況一樣它指向數組后,偏移是4×7×3(即sizeof(a。值得注意的是:以上對于數組的情況不適用于一般的指針,指針似乎只有單層次的偏移,而數組的作為指針引用的時候,偏移卻是多層的。編譯器似乎給了數組而外的屬性,sizeof對數組的作用和對指針的作用是完全不同的。在使用指針對數組引用的時候(僅用數組名,會有很多額外的屬性,而指針試圖像數組般引用確實很困難的。int a=1,b=2;

5、float x=3.4, y = 4 . 5 ;double m=3.124;char ch1='a', ch2='b'不同數據類型的變量在內存中占用的空間讓我們先看一下編譯系統(tǒng)是怎樣為變量分配內存的。變量a,b是整型變量,在內存各占2個字節(jié);x,y是實型,各占4個字節(jié);m是雙精度實型,占8個字節(jié);ch1,ch2是字符型,各占1個字節(jié)指針4個字節(jié)指針變量所占內存空間都是2個字節(jié)8.各種不同類型變量的存儲位置、作用域及其生命周期。變量存儲類:局部變量,自動類auto、寄存器類register、全局變量,靜態(tài)類static 和外部類extern。關鍵字auto加在變

6、量名及其類型前,用來說明它是自動變量。局部變量是指在函數內部說明的變量(有時也稱為自動變量。用關鍵字auto進行說明, 當auto省略時, 所有的非全程變量都被認為是局部變量, 所以auto實際上從來不用。局部變量在函數調用時自動產生, 但不會自動初始化, 隨函數調用的結束, 這個變量也就自動消失了, 下次調用此函數時再自動產生, 還要再賦值, 退出時又自動消失。所有的全局變量和靜態(tài)局部變量(定義時使用關鍵字static都保存在靜態(tài)存儲區(qū),其特點是:在編譯時分配內存空間并進行初始化。在程序運行期間,變量一直存在,直到程序結束,變量對應的內存空間才被釋放而所有的非靜態(tài)局部變量(又稱為自動變量保存

7、在棧(stack中,其特點是:在變量所在的函數或模塊被執(zhí)行時動態(tài)創(chuàng)建,函數或模塊執(zhí)行完時,變量對應的內存空間被釋放。換句話說,函數或模塊每被執(zhí)行一次,局部變量就會重新被分配空間。如果變量定義時沒有初始化,那么變量中的值是隨機所有用malloc分配的內存(又稱為動態(tài)內存都在堆(heap中,其特點是:一般通過指針來訪問動態(tài)分配的內存。即可以通過free來手動釋放動態(tài)內存,也可以在程序結束時由系統(tǒng)自動釋放全局變量的作用域從定義點開始一直到源文件的結束。如果要在定義點之前使用全局變量的話就需要使用關鍵字extern對作用域進行擴展。全局變量缺省是可以被其他文件引用的。如果希望static僅限于本文件使

8、用的話,需要在定義時使用關鍵字static對于局部變量來說,無論是靜態(tài)局部變量還是自動變量,作用域都僅限于定義該變量的函數或模塊動態(tài)內存只要沒有被釋放就可以在程序的任何地方使用,前提是要知道動態(tài)內存的地址注:static加在全局變量前影響的是作用域,加在局部變量前影響的是生命周期9.static、extern、volatile、const、typedef關鍵字的特點和使用。10.5級存儲體系中各級存儲的名字、訪問速度。往上內存小,速度快寄存器高速緩存SRAM主存儲器DRAM本地存儲器Flash,ROM,磁盤網絡存儲器Flash,ROM,磁盤11.編譯的幾個階段分別是?編譯預處理;編譯階段;優(yōu)化階段;匯編階段;連接階段。12.動態(tài)內存釋放時,為何只需要提供內存首指針,而不需要提供需要釋放的大小?頭部至少包含要動態(tài)內存釋放大小。13.makefile文件依賴的作用。14.char* pch

溫馨提示

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

評論

0/150

提交評論