




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第5章 TMS320C54x軟件開發(fā),CCS運行主窗口, 用CCS開發(fā)程序,創(chuàng)建工程文件 工程文件中包含著設(shè)計中所有的源代碼文件、鏈接器命令文件、庫函數(shù)、頭文件等。 volume.h rts.lib volume.c volume1.pjt load.asm vectors.asm volume.cmd,5.1 軟件開發(fā)過程及開發(fā)工具,1建立源程序 2C編譯器 (C Compiler) 3匯編器 (Assembler) 4連接器 (Linker) 5調(diào)試工具 6十六進制轉(zhuǎn)換公用程序 (Hex Conversion Utility),圖5-1 TMS320C54x DSP軟件開發(fā)流程,5.2 公共目標(biāo)文件格式,5.2.1 COFF文件的基本單元段,段(sections)是COFF文件中最重要的概念。一個段就是最終在存儲器映象中占據(jù)連續(xù)空間的一個數(shù)據(jù)或代碼塊。目標(biāo)文件中的每一個段都是相互獨立的。一般地,COFF目標(biāo)文件包含3個缺省的段:text段、data段、bss段。 段可以分為兩大類,即已初始化段和未初始化段。 如圖5-2所示為目標(biāo)文件中的段與目標(biāo)系統(tǒng)中存儲器的關(guān)系。,圖5-2 目標(biāo)文件中的段與目標(biāo)存儲器的關(guān)系,5.2.2 匯編器對段的處理,1未初始化段 未初始化段主要用來在存儲器中保留空間,通常將它們定位到RAM中。這些段在目標(biāo)文件中沒有實際內(nèi)容,只是保留空間而已。程序可以在運行時利用這些空間建立和存儲變量。未初始化段是通過使用.bss和.usect匯編偽指令建立的,兩條偽指令的句法分別為: .bss 符號,字?jǐn)?shù) 符號 .usect “段名”,字?jǐn)?shù),2已初始化段 已初始化段包含可執(zhí)行代碼或已初始化數(shù)據(jù)。這些段的內(nèi)容存儲在目標(biāo)文件中,加載程序時再放到TMS320C54X存儲器中。三個用于建立初始化段的偽指令句法分別為: .text 段起點 .data 段起點 .sect “段名”,段起點,例 計算 y=a1x1 + a2x2 + a3x3 +a 4x4 其中: a1=1 . a2=2 .a3= 3 . a4=4 x1=8 . X2=6. x3=4 . X4=2 匯編源程序 xx . asm . title “ xx. asm ” . mmregs stack . usect “stack ” ,10h ; . bss a , 4 ; . bss x , 4 ; . bss y , 1 ;,. def start ; . data table: . word 1, 2, 3, 4 ; .word 8, 6, 4, 2 ; .text ; start: - - STM #a , AR1 ; RPT #7 ; MVPD table , *AR1+ ; -,3命名段 命名段就是程序員自己定義的段,它與缺省的.text、.data和.bss段一樣使用,但與缺省段分開匯編。例:usect段將未初始化的變量匯編到與bss段不同的存儲器中。產(chǎn)生命名段的偽指令為: 符號 .usect “段名”,字?jǐn)?shù) .sect “段名”,段起點,4子段 子段(Subsections)是大段中的小段。鏈接器可以像處理段一樣處理子段。采用子段可以使存儲器圖更加緊密。子段的命名句法為: 基段名:子段名 子段也有兩種,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。,例 計算 y=a1x1 + a2x2 + a3x3 +a 4x4 其中: a1=1 . a2=2 .a3= 3 . a4=4 x1=8 . X2=6. x3=4 . X4=2 匯編源程序 xx . asm . title “ xx. asm ” . mmregs stack . usect “stack ” ,10h ; . bss a , 4 ; . bss x , 4 ; . bss y , 1 ;,5段程序計數(shù)器(SPC) 匯編器為每個段安排一個獨立的程序計數(shù)器,即段程序計數(shù)器(SPC)。 SPC表示一個程序代碼段或數(shù)據(jù)段內(nèi)的當(dāng)前地址。開始時,匯編器將每個SPC置0,當(dāng)匯編器將程序代碼或數(shù)據(jù)加到一個段內(nèi)時,相應(yīng)的SPC增加。如果匯編器再次遇到相同段名的段,繼續(xù)匯編至相應(yīng)的段,且相應(yīng)的SPC在先前的基礎(chǔ)上繼續(xù)增加。,圖5-3 產(chǎn)生的目標(biāo)代碼,SPC(0000H),SPC(0000H),SPC(0000H),SPC(0000H),SPC(0000H),SPC(0003H),SPC(0004H),SPC(0005H),5.2.3 鏈接器對段的處理,1.鏈接器對段的處理有兩個功能: 它將匯編器產(chǎn)生的COFF目標(biāo)文件(.obj文件)中的各種段作為輸入段,當(dāng)有多個文件進行鏈接時,它將輸入段組合起來,在可執(zhí)行的COFF輸出模塊中建立各個輸出段。 鏈接器為輸出段選擇存儲器地址。,2.鏈接器有兩個命令完成上述功能,即: MEMORY 命令定義目標(biāo)系統(tǒng)的存儲器配置圖,包括對存儲器各部分的命名,以及規(guī)定它們的起始地址和長度。 SECTIONS命令告訴鏈接器如何將輸入段組合成輸出段,在存儲器何處存放。子段可以用來更精確地編排段,可用鏈接器SECTIONS命令指定子段。,圖5-4 鏈接器默認(rèn)的存儲器分配,5.2.4 重新定位,1鏈接時重新定位 將各個段定位到存儲器中,每個段都從合適的地址開始。 將符號值調(diào)整到相對于新的段地址的數(shù)值。 調(diào)整對重新定位后符號的引用。,2運行時重新定位 將代碼裝入存儲器的一個地方,而運行在另一個地方。利用SECTIONS命令選項讓鏈接器定位兩次。一些關(guān)鍵的執(zhí)行代碼必須裝入在系統(tǒng)的ROM中,但希望在較快的RAM中運行。 鏈接器提供了一個簡單的處理該問題的方法。利用SECTIONS命令選項讓鏈接器定位兩次。第一次使用裝入關(guān)鍵字設(shè)置裝入地址,再用運行關(guān)鍵字設(shè)置運行地址。,5.2.5 程序裝入,硬件仿真器和CCS集成開發(fā)環(huán)境,具有內(nèi)部的裝入器,調(diào)用裝入器的LOAD命令即可裝入可執(zhí)行程序。 將代碼固化在片外存儲器中,采用Hex轉(zhuǎn)換工具(Hex conversion utility),例如Hex500將可執(zhí)行的COFF目標(biāo)模塊(.out文件)轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件用編程器將代碼寫入EPROM/Flash。,片外RAM,EPROM/flash,DSP 片內(nèi)RAM,輸入/輸出,5.2.6 COFF文件中的符號,COFF文件中有一個符號表,用于存儲程序中的符號信息。鏈接器對符號重定位時使用該表,調(diào)試工具也使用該表來提供符號調(diào)試。 外部符號指在一個模塊中定義,在另一個模塊中使用的符號??墒褂?def、.ref或.global匯編偽指令將符號定義為外部符號。 .def在當(dāng)前模塊中定義,可以在別的模塊中使用的符號; .ref在當(dāng)前模塊中引用,但在別的模塊中定義的符號; .global可用于以上任何一種情況。,. def start ; . data table: . word 1, 2, 3, 4 ; .word 8, 6, 4, 2 ; .text ; start: - - STM #a , AR1 ; RPT #7 ; MVPD table , *AR1+ ; -,5.3 常用匯編偽指令,1段定義偽指令 為便于鏈接器將程序、數(shù)據(jù)分段定位于指定的(物理存在的)存儲器 空間,并將不同的obj文件鏈接起來。段的使用非常靈活,但常用以下約定: .text 此段存放程序代碼。 .data 此段存放初始化了的數(shù)據(jù)。 .bss 此段存入未初始化的變量。 .sect 名稱 定義一個有名段,放初始化了的數(shù)據(jù)或程序代碼。,2條件匯編偽指令 .if、.elseif、.else、.endif偽指令告訴匯編器按照表達式的計算結(jié)果對代碼塊進行條件匯編。 .if expression 標(biāo)志條件塊的開始,僅當(dāng)條件為真(expression的值非0即為真)時匯編代碼。 .elseif expression 標(biāo)志若.if條件為假,而.elseif條件為真時要匯編代碼塊。 .else 標(biāo)志若.if條件為假時要匯編代碼塊。 .endif 標(biāo)志條件塊的結(jié)束,并終止該條件代碼塊。,3引用其他文件和初始化常數(shù)偽指令 .include 文件名 將指定文件復(fù)制到當(dāng)前位置,其內(nèi)容可以是程序、數(shù)據(jù)、符號定義等。 .copy 文件名 與.include類似。 .def 符號名 在當(dāng)前文件中定義一個符號,可以被其他文件使用。 .ref 符號名 在其他文件中定義,可以在本文件中使用的符號。 .global 符號名 其作用相當(dāng)于.def、.ref效果之和。,.mmregs 定義存儲器映射寄存器的符號名,這樣就可以用AR0、PMST等助記符替換實際的存儲器地址。 .float 數(shù)1,數(shù)2 指定的各浮點數(shù)連續(xù)放置到存儲器中(從當(dāng)前段指針開始)。 .word 數(shù)1,數(shù)2 指定的各數(shù)(十六進制)連續(xù)放置到存儲器中。 .space n 以位為單位,空出n位存儲空間。 .end 程序塊結(jié)束。,表5-2 常用的匯編偽指令,例 計算 y=a1x1 + a2x2 + a3x3 +a 4x4 其中: a1=1 . a2=2 .a3= 3 . a4=4 x1=8 . X2=6. x3=4 . X4=2 匯編源程序 xx . asm,.,.title “x1.asm“ .mmregs .def _c_int00 stack .usect “stack“,10h .bss a,4 .bss x,4 .bss y,1 .data table: .word 1 .word 2 .word 3 .word 4 .word 8 .word 6 .word 4 .word 2,.text _c_int00: k_iptr .set 1400h LDM PMST,A AND #7FH,A OR #k_iptr,A STLM A,PMST RSBX FRCT STM #0,SWWSR STM #stack+10h,SP STM #a,AR1 RPT #7 MVPD #table,*AR1+ CALL SUM end: B end SUM: LD #01h,DP STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,y RET .end,4宏定義和宏調(diào)用 TMS320C54x匯編支持宏語言。如果程序中需要多次執(zhí)行某段程序,可以把這段程序定義(宏定義)為一個宏,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏。 宏定義如下: Macname .macroparameter 1,parameter n .mexit .endm,5.4 鏈接器命令文件的編寫與使用,1 MEMORY偽指令及其使用,MEMORY偽指令就是用來指定目標(biāo)存儲器的模型。 MEMORY偽指令的一般語法為: MEMORY name : property ,property ,property . name : property ,property ,property . name : property ,property ,property . ,2 SECTIONS偽指令及其使用,SECTIONS偽指令功能如下: 說明如何將輸入段組合成輸出段。 在可執(zhí)行程序中定義輸出段。 指定輸出段在存儲器中存放的位置。 允許對輸出段重新命名。,xx.obj -o xx.out -m xx.map MEMORY PAGE 0: RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300h PAGE 1: DARAM1: origin=0100h,length=100h DARAM2: origin=0200h,length=100h ,SECTIONS .data : RAM 1 PAGE 0 .text : RAM PAGE 0 stack : DARAM1 PAGE 1 .bss : DARAM2 PAGE 1 ,鏈接命令源程序 :xx . cmd,例:,5.5 匯編語言程序編寫方法,1 匯編語言源程序格式,助記符指令一般包含4個部分,其一般組成形式為: 標(biāo)號: 助記符 操作數(shù) ;注釋 1標(biāo)號區(qū) 所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有 標(biāo)號,標(biāo)號可以長達32個字符,由AZ、az、09、_、和$符號組成,且第一個字符不能是數(shù)字,區(qū)分大小寫。,2助記符區(qū) 助記符區(qū)不能從第一列開始,否則被認(rèn)為是標(biāo)號。 3操作數(shù)區(qū) 操作數(shù)區(qū)是一個操作數(shù)列表,可以是常數(shù)、符號或常數(shù)與符號構(gòu)成的表達式。操作數(shù)間需用“,”號隔開。 4注釋區(qū) 注釋區(qū)可以從任何一列開始,可以包含ASCII字符和空格。,. def start ; 主程序 ;入口標(biāo)號 . data table: . word 1, 2, 3, 4 ; 初始化空間 .word 8, 6, 4, 2 ; 地址標(biāo)號table .text ; 代碼段 start: - - STM #a , AR1 RPT #7 MVPD table , *AR1+ ,例 ,2 匯編語言其它格式,匯編語言中的常數(shù)和字符串,匯編源程序中的符號,匯編源程序中的表達式,略P 69 P 74,5.6 TMS320C54x C語言編程,5.6.1 存儲器模式 5.6.2 寄存器規(guī)則 5.6.3 函數(shù)調(diào)用規(guī)則 5.6.4 中斷處理 5.6.5 表達式分析,返回首頁,5.6.1 存儲器模式,1段 C54x將存儲器處理為程序存儲器和數(shù)據(jù)存儲器兩個線性塊。程序存儲器包含可執(zhí)行代碼;數(shù)據(jù)存儲器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接器將代碼和數(shù)據(jù)定位進合適的存儲空間。C編譯器對C語言編譯后除了生成3個基本段,即.text、.data、.bss外,還生成.cinit、.const、.stack、.sysmem段。,2C/C+系統(tǒng)堆棧 .stack不同于DSP匯編指令定義的堆棧。DSP匯編程序中要將堆棧指針SP指向一塊RAM,用于保存中斷、調(diào)用時的返回地址,存放PUSH指令的壓棧內(nèi)容。 .stack定義的系統(tǒng)堆棧實現(xiàn)的功能是保護函數(shù)的返回地址,分配局部變量,在調(diào)用函數(shù)時用于傳遞參數(shù),保護臨時結(jié)果。 .stack定義的段大?。ǘ褩4笮。┛捎面溄悠鬟x項-stack size設(shè)定,鏈接器還產(chǎn)生一個全局符號_ _STACK_SIZE,并賦給它等于堆棧長度的值,以字為單位,缺省值為1K。,3存儲器分配 (1)運行時間支持函數(shù)。 (2)動態(tài)存儲器分配。 (3)靜態(tài)和全局變量的存儲器分配。 (4)位域/結(jié)構(gòu)的對準(zhǔn)。,返回本節(jié),5.6.2 寄存器規(guī)則,寄存器規(guī)則明確了編譯器如何使用寄存器以及在函數(shù)調(diào)用過程中如何保護寄存器。 (1)輔助寄存器 (2)堆棧指針SP (3)ARP (4)在默認(rèn)情況下,編譯器總是假定ST1中的OVM在硬件復(fù)位時被清0。若在匯編代碼中對OVM置位為1,返回到C環(huán)境時必須復(fù)位。 (5)寄存器變量,返回本節(jié),5.6.3 函數(shù)調(diào)用規(guī)則,(1)局部幀的產(chǎn)生 (2)參數(shù)傳遞 (3)函數(shù)的返回,返回本節(jié),5.6.4 中斷處理,(1)中斷的使能和屏蔽必須由程序員自己來設(shè)置。 (2)中斷程序沒有參數(shù)傳遞,即使說明,也會被忽略 (3)中斷處理程序不能被正常的C程序調(diào)用。 (4)為了使中斷程序與中斷一致,在相應(yīng)的中斷矢量中必須放置一條轉(zhuǎn)移指令,可以用.sect匯編偽指令建立一個簡單的跳轉(zhuǎn)指令表來完成此項功能。,(5)在匯編語言中,注意在符號名前面加上一個下劃線,例如c_int00記為_ c_int00。 (6)中斷程序使用的所有寄存器,包括狀態(tài)寄存器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保護。 (7)TMS320C54x C編譯器將C語言進行了擴展,中斷可以利用interrupt關(guān)鍵字由C/C+函數(shù)直接處理。,返回本節(jié),5.6.5 表達式分析,當(dāng)C程序中需要計算整型表達式時,必須注意以下幾點: (1)算術(shù)上溢和下溢。 (2)整除和取模。 (3)C代碼對16位乘法結(jié)果高16位的訪問。,返回本節(jié),5.7 用C語言和匯編語言混合編程,5.7.1 獨立的C模塊和匯編模塊接口 5.7.2 從C程序中訪問匯編程序變量 5.7.3 在C程序中直接嵌入?yún)R編語句,返回首頁,5.7.1 獨立的C模塊和匯編模塊接口,在編寫?yīng)毩⒌膮R編程序時,必須注意以下幾點: (1)不論是用C語言編寫的函數(shù)還是用匯編語言編寫的函數(shù),都必須遵循寄存器使
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份制企業(yè)合同文書撰寫要點
- 科技創(chuàng)新園區(qū)建設(shè)投資合同
- 物聯(lián)網(wǎng)項目戰(zhàn)略合作協(xié)議
- 商業(yè)價格保密協(xié)議
- 醫(yī)院與社區(qū)健康服務(wù)合作協(xié)議書
- 農(nóng)業(yè)產(chǎn)業(yè)集群發(fā)展運營方案
- 委托中介出售房屋協(xié)議
- 綠化場地租賃合同
- 媒體廣告代理協(xié)議書
- 高端消費品設(shè)計合作協(xié)議
- 山東省德州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 本人報廢車輛委托書
- 雙減政策與五項管理解讀
- 2025年道德與法治小學(xué)六年級下冊教學(xué)計劃(含進度表)
- 過橋資金操作流程
- 貨物學(xué) 課件1.2貨物的特性
- 新時代中國特色社會主義理論與實踐2024版研究生教材課件全集2章
- 色彩發(fā)展的歷史課件
- 學(xué)生成長導(dǎo)師制工作手冊
- (2023年最新版)醫(yī)師執(zhí)業(yè)、變更執(zhí)業(yè)、多機構(gòu)備案申請審核表
- 醫(yī)療器械臨床試驗質(zhì)量管理規(guī)范培訓(xùn)課件
評論
0/150
提交評論