




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C6000 C 運(yùn)行時環(huán)境1調(diào)試是理解系統(tǒng)行為的過程C6000 C run-time environment定義The run time parameters in which your program must function. These parameters are defined by 1.the memory conventions2.register conventions3.stack organization, 4.function call conventions5.system initialization.2存儲器模型 C6000編譯器把整個存儲區(qū)當(dāng)作單個線性存儲塊,并
2、將它分為代碼區(qū)和數(shù)據(jù)區(qū)編譯器假定目標(biāo)存儲器的全部32-bit地址空間是可用的。定義存儲器映象并將代碼和數(shù)據(jù)分配到目標(biāo)存儲器的是連接器,而非編譯器。Cmd文件是linker使用的。 使用.map文件3Hello.cmd4段 & 已初始化段編譯器生成的可重定位的代碼和數(shù)據(jù)塊稱為段(sections)已初始化的段:包含數(shù)據(jù)和可執(zhí)行代碼。C/C+編譯器生成的已初始化的段有:(1).cinit段:包括變量初始值和常量值。(2).const段:包括字符串文字(string literals),浮點(diǎn)常量和在C/C+中被聲明為const的數(shù)據(jù)(如果常量沒有同時被聲明為volatile)。(3).switch段
3、:包含大的switch語句的跳轉(zhuǎn)表(jump table)(4).text段:包含所有的可執(zhí)行代碼。5未初始化段未初始化的段:存儲器(一般指RAM)中的保留空間。程序在運(yùn)行時用它來創(chuàng)建和存儲變量。C/C+編譯器生成的未初始化的段有:(1).bss段:為全局變量和靜態(tài)變量保留。如果為連接器設(shè)定-c選項(xiàng),則在程序的開始,C引導(dǎo)程序會將.cinit段的數(shù)據(jù)(可在ROM中)復(fù)制到.bss段。編譯器定義全局符號$bss,并指定它為.bss段的起始地址。(2).far段:為聲明為far的全局變量和靜態(tài)變量保留。(3).stack段:系統(tǒng)堆棧。這個存儲區(qū)用于傳遞函數(shù)的參數(shù)和為局部變量分配存儲器空間。(4).
4、sysmem段:為動態(tài)存儲空間分配保留的存儲區(qū)。提請動態(tài)存儲空間分配要求的有malloc,calloc和realloc等函數(shù)。如果C/C+程序未使用這些函數(shù),編譯器便不生成該段。6不同的bss段地址,.cinit中不同的內(nèi)容(.out文件中)7段的補(bǔ)充匯編器產(chǎn)生默認(rèn)的.text,.bss和.data段,但C/C+編譯器不使用.data段。允許用CODE_SECTION和DATA_SECTION pragma來讓編譯器生成另外的段。除了.text,.vectors段,各個初始化段和非初始化段均不能分配到內(nèi)部程序存儲器。8系統(tǒng)堆棧編譯器將堆棧用于:(1)給局部變量分配存儲空間(2)傳遞函數(shù)參數(shù)(3
5、)保存臨時結(jié)果運(yùn)行時堆棧增長方向是從高向低,編譯器用B15寄存器來管理堆棧,即將它作為堆棧指針(SP),指向堆棧中下一個空閑的存儲器位置。9初始化變量 C/C+編譯器生成的代碼可固化到ROM中,.cinit段的初始化表也是貯存在ROM中。在系統(tǒng)初始化的時候,C/C+引導(dǎo)程序?qū)⒈碇械臄?shù)據(jù)(ROM中)拷貝給.bss段中對應(yīng)的變量(RAM中)。如果程序是從目標(biāo)文件直接載入存儲器,然后運(yùn)行時,可以無需.cinit段。加載器(loader)直接地從目標(biāo)文件中讀出初始化表(而不是從ROM中),在加載時完成初始化,而不是運(yùn)行時。這個過程可以通過為連接器指定cr選項(xiàng)來實(shí)現(xiàn)。 10存儲器模式 (-mln)小存儲
6、器模式和大存儲器模式。它們的區(qū)別在于為.bss段分配存儲空間的方式。小存儲器模式:.bss 32KByte,使用DP(B14)訪問全局?jǐn)?shù)據(jù):LDW *+DP(0 x7),B5大存儲器模式:不限制.bss段的大小,訪問數(shù)據(jù)使用MVKL & MVKH: MVKL _x, A0 MVKH _x, A0 LDW *A0, B0 11寄存器使用規(guī)范 在C/C+環(huán)境下,一些具體的操作要使用哪些的寄存器來完成,是有嚴(yán)格的規(guī)范的。寄存器使用規(guī)范規(guī)定了編譯器使用寄存器的方法以及函數(shù)調(diào)用過程中數(shù)值保存的方法。 要在C/C+程序中嵌入?yún)R編語言,必須理解并遵循寄存器使用規(guī)范。 12寄存器使用規(guī)范13函數(shù)調(diào)用約定函數(shù)(
7、父函數(shù))在調(diào)用另一個函數(shù)(子函數(shù))的時候執(zhí)行下列操作 (1)將傳遞到子函數(shù)的參數(shù)放入寄存器或堆棧。 14函數(shù)調(diào)用(父函數(shù))(2)如果需要,保存寄存器(a/b09)到堆棧。(調(diào)用子函數(shù)后要再用到其中的值)(3)調(diào)用者(父函數(shù))調(diào)用函數(shù)(子函數(shù))。 15函數(shù)調(diào)用(子函數(shù))(1)被調(diào)函數(shù)(子函數(shù))為所有的局部的變量、臨時存儲區(qū)和它調(diào)用的函數(shù)的參數(shù)分配足夠的堆??臻g。 (2)如果被調(diào)函數(shù)還繼續(xù)調(diào)用其他的函數(shù),返回地址必須保存在堆棧中。(3)如果被調(diào)函數(shù)修改寄存器A10到A15或者B10到B15的值,必須將它們保存。(4)被調(diào)函數(shù)執(zhí)行其代碼。(5)存放返回值在A5:A4中。(6)恢復(fù)3中保留的寄存器值(
8、7)釋放1分配的堆棧(8)利用B3,跳轉(zhuǎn)返回父函數(shù)16C/ C+與匯編語言的接口使用獨(dú)立的匯編代碼模塊,并將其與編譯完的C/C+模塊連接在一起在C/C+源程序中使用內(nèi)聯(lián)函數(shù)(intrinsics),直接地調(diào)用匯編語句使用內(nèi)聯(lián)(inline) 匯編語言直接嵌入C/C+源程序在C/C+源程序中使用匯編程序變量和常量17C+ 調(diào)用匯編程序18內(nèi)聯(lián)函數(shù)(intrinsics) C6000編譯器可以識別若干內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)直接調(diào)用某些匯編語句,這些匯編語句在C/C+中實(shí)現(xiàn)起來是很繁復(fù)或難以表達(dá)的。int x1, x2, y;/飽和加法y = _sadd(x1, x2); 19內(nèi)聯(lián)(inline)匯編語
9、言asm(”;* 這是匯編語言的注釋”); 要很小心不要破壞C/C+環(huán)境。對插入的匯編指令,編譯器不做任何檢查或者分析。 20用C/C+訪問匯編語言變量 21系統(tǒng)初始化運(yùn)行一個C/C+程序之前,必須建立C/C+運(yùn)行環(huán)境。這個工作是由C/C+引導(dǎo)程序調(diào)用c_int00函數(shù)完成的。系統(tǒng)運(yùn)行開始時,跳轉(zhuǎn)到或調(diào)用c_int00函數(shù),但通常是硬件復(fù)位中斷的中斷服務(wù)程序調(diào)用它的。1)定義系統(tǒng)堆棧.stack段并初始化堆棧指針。2)定義.bss并初始化DP指針3)初始化全局的變量,這是通過將.cinit段中的初始化表復(fù)制給.bss段中為變量分配的存儲空間來完成的。如果是在加載時初始化變量(cr選項(xiàng)),加載器
10、(loader)在程序運(yùn)行之前就完成了這個步驟(它不是通過引導(dǎo)程序執(zhí)行的)。4)調(diào)用main函數(shù)來運(yùn)行C/C+程序。22運(yùn)行時初始化和加載時初始化23C_int_00源碼 1extern void _interrupt c_int00()/* SET UP THE STACK POINTER IN B15. */ /* THE STACK POINTER POINTS 1 WORD PAST THE TOP OF THE STACK, SO SUBTRACT 1 WORD FROM THE SIZE. */_asm( mvkl _stack,SP); _asm( mvkh _stack,SP)
11、; _asm( mvkl _STACK_SIZE - 4,B0); _asm( mvkh _STACK_SIZE - 4,B0); _asm( add B0,SP,SP);/* THE SP MUST BE ALIGNED ON AN 8-BYTE BOUNDARY */_asm( and 7,SP,SP); /* SET UP THE GLOBAL PAGE POINTER IN B14. */ _asm( .global $bss); _asm( mvkl $bss,DP); _asm( mvkh $bss,DP);24C_int_00源碼 2/* SET UP FLOATING POIN
12、T REGISTERS FOR C70 ONLY */#ifdef _TMS320C6700 _asm( mvk 0,B3); /* round to nearest */ _asm( mvc B3,FADCR); _asm( mvc B3,FMCR);#endif/* GET THE POINTER TO THE AUTOINITIALIZATION TABLES INTO THE FIRST */ /* ARGUMENT REGISTER (A4)*/ _asm( .global cinit); _asm( mvkl cinit,A4); _asm( mvkh cinit,A4);/* PASS THE CURRENT DP TO THE AUTOINITIALIZATION ROUTINE. */ _asm( mv DP,B4);25C_int_00源碼 3/* CALL THE AUTOINITIALIZATION ROUTINE */_asm( .global _auto_init); _asm( mvkl $aiRL,B3); _asm( mvkh $aiRL
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人自助循環(huán)貸款合同范本
- 東莞抵押合同范本
- 申報課題書怎么寫
- 畜牧課題申報書范文
- 原材料海外采購合同范本
- 課題申報書樣板
- 光伏承建合同范本
- 公程合同范本
- 申報書課題設(shè)計論證
- 全面提升國際化水平的實(shí)施方案
- 部隊安全保密教育課件
- 新媒體導(dǎo)論彭蘭課件
- 2024統(tǒng)編版七年級上冊歷史期末復(fù)習(xí)知識清單
- 工程數(shù)學(xué)線性代數(shù)課后答案-同濟(jì)第五版
- 四川政采評審專家入庫考試基礎(chǔ)題練習(xí)試題(一)
- 2024解析:第七章力-講核心(解析版)
- 2024解析:第十三章內(nèi)能-講核心(解析版)
- 大學(xué)生心理健康(上海交通大學(xué))知到智慧樹章節(jié)答案
- 《呼吸囊的使用》課件
- 高三百天沖刺家長會
- 《文化遺產(chǎn)概論》課程教學(xué)大綱
評論
0/150
提交評論