版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
DSP芯片原理與應用第11講C55x匯編語言的DSP芯片軟件開發(fā)(二)——匯編程序設計1引言1C55x匯編語言程序目錄2C55x匯編代碼的優(yōu)化CONTENTS3匯編和C混合編程1、C55x匯編語言程序一種源程序后綴名:.asm利用編譯器可以得到目標代碼.o由C/C++源程序也可以經(jīng)過匯編得到相應的匯編語言程序1、C55x匯編語言程序**第1步:分配塊??????利用助記符指令撰寫、也可以用代數(shù)指令撰寫.defx,y,init.usect"vars",4.usect"vars",1.sect"table"xy;;;為變量x保留4個未初始化的16位內(nèi)存空間為變量y保留4個未初始化的16位內(nèi)存空間創(chuàng)建一個名為“table”的初始化數(shù)據(jù)塊1,2,3,4;定義一個數(shù)組init,包含4個整形數(shù).text.defstart;;;創(chuàng)建一個代碼塊(默認是.text)定義代碼的起始標號(起始地址)標號start*第2步:初始化處理器模式*??????BCLRC54CMBCLRAR0LCBCLRAR6LC;;;設置處理器為C55x本地模式設置寄存器AR0處于線性尋址狀態(tài)設置寄存器AR0處于線性尋址狀態(tài)匯編程序示例1、C55x匯編語言程序匯編語言程序???由源語句構(gòu)成的代碼,通常放在.text塊中,也可以自定義塊名預先規(guī)定的數(shù)據(jù)塊,通常放在.data,.bss等塊中各段代碼可以構(gòu)成調(diào)用關(guān)系??CALL,調(diào)用RET,返回1、C55x匯編語言程序匯編語言程序
保護當前正在使用的數(shù)據(jù)
確定調(diào)用函數(shù)的入口地址
函數(shù)調(diào)用中參數(shù)值的傳遞函數(shù)調(diào)用CALL2000h返回堆棧指針SP減1,PC+2保存在堆棧中,PC值改為2000h,開始從地址2000h執(zhí)行1、C55x匯編語言程序匯編語言程序
保護當前正在使用的數(shù)據(jù)
確定調(diào)用函數(shù)的入口地址
函數(shù)調(diào)用中參數(shù)值的傳遞函數(shù)調(diào)用返回與調(diào)用配套,放在函數(shù)結(jié)尾處堆棧頂端保存的返回地址送入PC中,SP加11、C55x匯編語言程序匯編語言程序函數(shù)的參數(shù)傳遞
函數(shù)調(diào)用前,第一個參數(shù)通過累加器AC0傳遞,其他傳遞參數(shù)按照逆序保存在堆棧中
函數(shù)中,先將累加器AC0中的值賦予第一個參數(shù),隨后按順序?qū)⒍褩V械闹蒂x予其他參數(shù)
返回數(shù)據(jù)保存在累加器AC0中傳遞start;標號*??????MOVCALLcont……#16,AC0;將16賦值為AC0;調(diào)用cont,16是參數(shù)cont;標號*??????SUBRET#1,AC0;;將A減1返回1、C55x匯編語言程序匯編語言程序函數(shù)的參數(shù)傳遞
函數(shù)調(diào)用時必須確定有用數(shù)據(jù)都已被保存
函數(shù)調(diào)用不影響狀態(tài)寄存器,因此在編寫函數(shù)時,必須確定該函數(shù)中各狀態(tài)寄存器的設置是否與主調(diào)函數(shù)中的一致
若不一致,在被調(diào)函數(shù)的開始階段修改,在被調(diào)函數(shù)返回前必須修改回來在涉及代數(shù)運算的函數(shù)中,由于影響計算結(jié)果的功能比特很多,匯編語言程序撰寫比較麻煩start;標號*??????MOVCALLcont……#16,AC0;將16賦值為AC0;調(diào)用cont,16是參數(shù)cont;標號*??????SUBRET#1,AC0;;將A減1返回1、C55x匯編語言程序匯編語言程序的執(zhí)行過程C語言程序從main開始,匯編語言程序呢?匯編語言程序由源語句構(gòu)成源語句的核心是各條指令默認的執(zhí)行過程是從上至下按照源語句的順序執(zhí)行利用程序控制的指令可以控制程序的執(zhí)行過程
RESET
跳轉(zhuǎn)
函數(shù)調(diào)用
塊重復
軟、硬件中斷1引言1C55x匯編語言程序目錄2C55x匯編代碼的優(yōu)化CONTENTS3C55x匯編和C混合編程2、C55x匯編語言的優(yōu)化有效使用雙MAC硬件C55x芯片中包含兩個硬件的MAC單元,使用好這兩個單元,將會有效提高執(zhí)行效率。?雙MAC/MAS操作只能使用三個操作數(shù),即MAC/MAS操作要共用其中的一個操作數(shù);共用操作數(shù)必須使用XCDP(系數(shù)指針)尋址,并保存在內(nèi)部存儲器中;共用操作數(shù)應與其他兩個操作數(shù)存放在不同的存儲塊中。??2、C55x匯編語言的優(yōu)化充分使用并行執(zhí)行的特性C55x結(jié)構(gòu)允許在一個指令周期并行執(zhí)行兩條指令,以減少執(zhí)行時間。C55x支持并行方式可分為三類:???單指令內(nèi)建并行:自動的用戶自定義并行:用戶可選擇來實現(xiàn)的內(nèi)建和用戶自定義混合并行:2、C55x匯編語言的優(yōu)化實現(xiàn)高效循環(huán)C55匯編語言中實現(xiàn)循環(huán)的方法單循環(huán):repeat(CSR/k8/k16),[CSR+=TA/k4];局部塊循環(huán):localrepeat{};塊循環(huán):blockrepeat{};當輔助寄存器非零時跳轉(zhuǎn):這是代數(shù)指令形式無開銷循環(huán)if(ARn_mod!=0)goto#loop_start。與C程序流程的條件判斷-跳轉(zhuǎn)方式一樣,需要進行判斷、跳轉(zhuǎn)才能執(zhí)行核心的循環(huán)操作2、C55x匯編語言的優(yōu)化實現(xiàn)高效循環(huán)C55匯編語言中實現(xiàn)無開銷循環(huán)的方法單循環(huán):這是匯編指令形式RPT(CSR/k8/k16)//緊接的源語句執(zhí)行CSR/k8///k16+1次
使用單循環(huán)指令后,可以充分利用流水線的優(yōu)勢,將后續(xù)指令的連續(xù)執(zhí)行時間減到最少
執(zhí)行完單循環(huán)指令后,才執(zhí)行中斷2、C55x匯編語言的優(yōu)化實現(xiàn)高效循環(huán)C55匯編語言中實現(xiàn)無開銷循環(huán)的方法局部塊循環(huán):RPTBLOCALpmad//重復執(zhí)行從緊接的源語句到pmad//處的一段指令,次數(shù)=(BRC0/1)//+1次。僅限于IRQ中的指令塊循環(huán)RPTBpmad//重復執(zhí)行從緊接的源語句到pmad//處的一段指令,次數(shù)=(BRC0/1)//+1次。2、C55x匯編語言的優(yōu)化實現(xiàn)高效循環(huán)C55匯編語言中實現(xiàn)無開銷循環(huán)的方法局部塊循環(huán):RPTBLOCALpmad//塊循環(huán)RPTBpmad//
循環(huán)的塊首地址放在RSA中,結(jié)束地址放在REA中
RPTB執(zhí)行時,ST1中的BRAF為1,當BRC減為0時,ST1中的BRAF為0,禁止塊重復操作
可以通過將ST1中的BRAF設為0來中止塊重復操作2、C55x匯編語言的優(yōu)化實現(xiàn)高效循環(huán)C55匯編語言中實現(xiàn)無開銷循環(huán)的方法
注意:
受寄存器資源的限制,塊重復不允許嵌套使用
RPT指令和RPTB指令使用的寄存器資源不同,RPT指令可以在塊重復中使用2、C55x匯編語言的優(yōu)化最小化流水線和IBQ延遲C55x芯片中的流水線指令3指令2指令1取指流水線指令3指令2指令1執(zhí)行流水線在受保護情況下,如果同時執(zhí)行的指令在數(shù)據(jù)訪問發(fā)生沖突時,會自動對其中的某條指令插入額外的周期以防止發(fā)生錯誤,但也會增加處理延時。優(yōu)化方法:指令重排、使用CPU寄存器、使用局部循環(huán)、重新安排變量和數(shù)組在內(nèi)存中的位置……1引言1C55x匯編語言程序目錄2C55x匯編代碼的優(yōu)化CONTENTS3C55x匯編和C混合編程3、C55x匯編和C混合編程典型方法(1)獨立的C和匯編接口分別編寫C和匯編程序,分開編譯或匯編,形成各自的目標代碼模塊,然后用鏈接器將C模塊和匯編模塊鏈接起來。舉例:信號分析的程序FFT程序一般采用匯編語言編寫C程序中調(diào)用FFT程序3、C55x匯編和C混合編程典型方法(1)獨立的C和匯編接口。?不論何種語言實現(xiàn)的函數(shù),都必須遵循C語言環(huán)境中的寄存器使用規(guī)則。?必須保護函數(shù)要用到的幾個特定寄存器。在C55x中,這些特定的寄存器包括:T2、T3、AR5~7和SP。其中,若SP是被正常使用,則不必明確加以保護,其他寄存器則可以自由使用。?從匯編程序調(diào)用C函數(shù)時,參數(shù)傳遞必須要滿足C語言運行環(huán)境的要求。函數(shù)返回值要滿足C語言運行環(huán)境要求。3、C55x匯編和C混合編程典型方法(1)獨立的C和匯編接口。?特殊函數(shù)的處理。?C語言編寫的程序無法通過IMR寄存器對中斷進行允許或屏蔽。此時,實現(xiàn)中斷管理的方法就是采用在C語言中嵌入?yún)R編指令的方法來進行。中斷程序必須保護所有用到的寄存器。調(diào)用一個用C54x匯編語言編寫的函數(shù),必須要用pragma預處理選項:C54X_CALL或者C54X_FAR_CALL。???長整數(shù)和浮點數(shù)存儲在存儲器中的方法是最高有效字在低位地址。3、C55x匯編和C混合編程典型方法(1)獨立的C和匯編接口。?匯編語言程序調(diào)用C語言程序?C編譯器假定堆棧初始化在偶地址上,如果匯編代碼調(diào)用C代碼函數(shù),必須將SP保證SP指針為偶數(shù)。如果SP指針為奇數(shù),可以通過減1來將其變?yōu)榕紨?shù)。例如:_func:AADD#?1,SP;使SP為偶數(shù)...AADD#1,SP;釋放堆??臻gRET;函數(shù)體;函數(shù)返回?編寫匯編語言程序時,必須在C程序可以訪問的所有對象前加“_”。例如,在C程序中定義了變量x,如果在匯編程序中要使用,即為_x。3、C55x匯編和C混合編程典型方法(1)獨立的C和匯編接口。?C語言程序調(diào)用匯編語言程序?匯編模塊不能改變由C產(chǎn)生的.cinit塊,如果改變其內(nèi)容則會引起不可預測的后果。任何在匯編中定義的對象或函數(shù),如果需在C中訪問或調(diào)用,則必須用匯編指令.global定義。如果在C中定義的對象或函數(shù),需在匯編中訪問或調(diào)用,在匯編中也必須用.global指令定義C語言編寫的程序在編譯匯編后,將CPL置為1,因此調(diào)用的匯編函數(shù)中若需訪問直接地址對象,唯一方法就是使用間接立即數(shù)尋址模式。若匯編函數(shù)中CPL設置為0,則在返回C語言程序前須將CPL置為1。???3、C55x匯編和C混合編程典型方法(2)從C程序中訪問匯編程序變量變量定義步驟????采用.bss命令或.usect命令定義變量用.global命令定義為外部變量在變量名前加一下劃線“_”在C程序中將變量說明為外部變量3、C55x匯編和C混合編程典型方法(2)從C程序中訪問匯編程序變量變量在.bss塊中定義匯編程序:.bss.global_var_var,1;定義變量;說明為外部變量C程序:externvar=1;intvar;/*外部變量*//*訪問變量*/3、C55x匯編和C混合編程典型方法(2)從C程序中訪問匯編程序變量常數(shù)匯編程序:_table_size.global.set10000;常數(shù)定義;定義為全局_table_sizeC程序:table_size;#defineTABLE_SIZE((int)(&table_size))for(i=0;i<TABLE_SIZE;++i)…3、C55x匯編和C混合編程典型方法(4)在C程序中直接嵌入?yún)R編語句asm("匯編語句");優(yōu)點?在C程序中實現(xiàn)用C語言無法實現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器、中斷使能或無效、讀取狀態(tài)寄存器和中斷標志寄存器等?在C程序中的關(guān)鍵部分用匯編語句代替C語句以優(yōu)化程序缺點?比較容易破壞C環(huán)境3、C55x匯編和C混合編程典型方法(4)在C程序中直接嵌入?yún)R編語句asm("匯編語句");與獨立編寫匯編程序?qū)崿F(xiàn)混合編程相比:?程序的入口和出口由C自動管理,不必手工編寫匯編程序?qū)崿F(xiàn)。保留了C程序的結(jié)構(gòu),如變量的定義等,程序結(jié)構(gòu)清晰,可讀性強。C程序中的變量全部由C來定義,程序調(diào)試方便,用C源碼調(diào)試器可以方便地觀察C變量。??3、C55x匯編和C混合編程典型示例C主程序:/*cmain.c,將local的值加到global上*/externvoidasmfunc(int*);intglo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無錫財務培訓
- 消防安全知識培訓課件模板
- 籃球培訓課件制作
- 施工用電標準化培訓課件
- 護理教學實踐與科研能力提升
- 2026年汽車零部件采購培訓
- 2026年海外市場營銷策略培訓
- 簡歷診斷培訓課件
- 肺功能培訓課件
- 2026年益陽市南縣事業(yè)單位招考(10人)易考易錯模擬試題(共500題)試卷后附參考答案
- 通往2026中國消費零售市場十大關(guān)鍵趨勢:乘勢而上 利涉大川
- (2025年)(完整版)建筑工地三級安全教育試題(附答案)
- 2026新人教版七年級下冊英語知識點(生詞+詞組+語法)
- 財務部資金管理培訓課件
- 2026年鄭州澍青醫(yī)學高等??茖W校單招職業(yè)技能測試模擬測試卷附答案
- 名師工作室工作考核自評報告
- 北京通州產(chǎn)業(yè)服務有限公司招聘備考題庫附答案
- 工會法知識試題及答案
- 2025年深圳證券交易所及其下屬單位信息技術(shù)人員公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 運輸合同模版2025年示范版
- 擒敵術(shù)課件底圖
評論
0/150
提交評論