国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ADSP-TS101的嵌入式系統(tǒng)混合編程及優(yōu)化方法

2010-05-13 09:17蘇延川
現(xiàn)代電子技術(shù) 2009年20期
關(guān)鍵詞:匯編語(yǔ)言

蘇延川

摘 要:為了使DSP程序同時(shí)具備可讀性好和效率高的優(yōu)點(diǎn),提出一種采用C/C++和匯編語(yǔ)言混合編程的方法。該方法兼顧了兩種編程語(yǔ)言的優(yōu)點(diǎn),已成為嵌入式 DSP系統(tǒng)的重要編程方法?,F(xiàn)以ADSP-TS101的嵌入式系統(tǒng)為基礎(chǔ),介紹混合編程的方法和函數(shù)調(diào)用的規(guī)則,然后闡述程序優(yōu)化的幾種方法和總體策略,最后給出一個(gè)混合編程的實(shí)例。采用這種方法編寫的程序能夠在保持高級(jí)語(yǔ)言自身優(yōu)點(diǎn)的情況下,使執(zhí)行效率提高5~10倍。

關(guān)鍵詞:ADSP-TS101;C/C++;匯編語(yǔ)言;混合編程;程序優(yōu)化

中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1004-373X(2009)20-036-04

Mixed Programming and Optimized Method in Embedded System Based on ADSP-TS101

SU Yanchuan

(China Airborne Missile Academy,Luoyang,471009,China)

Abstract:In order to make DSP program has advantages of readability and high efficiency,mixed programming method which adopts C/C++ and assembler language is proposed.This method has advantages of two kinds of programming languages and it has already become the important programming method of embedded DSP system.Embedded system based on ADSP-TS101,the mixed programming method and the rule that function calls in are introduced.Some methods of optimized program and general policy are proposed,an example of mixed programming is given.The efficiency of program which uses the programming method can be improved by 5 to 10 times.

Keywords:ADSP-TS101;C/C++;assembler language;mixed programming;program optimization

0 引 言

隨著數(shù)據(jù)處理要求(如雷達(dá)、無(wú)線通信、圖像處理)的不斷提高,以及DSP的快速發(fā)展,目前許多嵌入式系統(tǒng)都以DSP為核心來(lái)構(gòu)建。嵌入式DSP系統(tǒng)的軟件設(shè)計(jì)就是為了充分利用DSP的資源,完成復(fù)雜任務(wù)算法和高速數(shù)據(jù)的實(shí)時(shí)處理,保證系統(tǒng)的可靠性,并提高工作效率。

ADSP-TS101S是ADI公司專為大信號(hào)處理任務(wù)和通信應(yīng)用而推出的一款高性能DSP芯片,在嵌入式信號(hào)處理中得到廣泛應(yīng)用。DSP軟件設(shè)計(jì)可以采用C/C++語(yǔ)言、匯編語(yǔ)言或者二者混合編程。匯編語(yǔ)言編寫的程序代碼執(zhí)行效率高,但是程序開(kāi)發(fā)難度大,而且可讀性、可移植性差;C/C++編寫的程序可讀性、移植性較好,但是執(zhí)行效率太低[1-3],在某些實(shí)時(shí)性要求高的場(chǎng)合這種方法所產(chǎn)生代碼的效率無(wú)法滿足設(shè)計(jì)要求。為了充分利用兩種語(yǔ)言的優(yōu)勢(shì)而采用二者混合編程的方法,這種方法既可充分利用芯片內(nèi)的硬件資源,又可縮短其開(kāi)發(fā)時(shí)間,維護(hù)升級(jí)也很方便。因此,在很多情況下采用混合編程方法能更好地達(dá)到設(shè)計(jì)要求,二者相互結(jié)合,可極大地提高DSP任務(wù)處理的能力,并可在有限的時(shí)間內(nèi)完成設(shè)計(jì)任務(wù)。

1 混合編程方法及規(guī)則

1.1 混合編程方法

匯編語(yǔ)言和C/C++混合編程方法[2-4]通??煞譃橐韵聝煞N:

(1)獨(dú)立編寫C/C++程序和匯編程序。分開(kāi)編譯或匯編形成各自的目標(biāo)模塊,再用鏈接器將各個(gè)目標(biāo)模塊鏈接起來(lái),這是一種靈活性較大的方法。通常的做法是用C/C++編寫主程序框架,用匯編語(yǔ)言編寫調(diào)用次數(shù)較多或者執(zhí)行時(shí)間較長(zhǎng)的子程序,這樣既能發(fā)揮C/C++程序可讀性好的優(yōu)點(diǎn),又能充分體現(xiàn)匯編語(yǔ)言執(zhí)行效率高的長(zhǎng)處,但它必須了解程序運(yùn)行時(shí)的環(huán)境,維護(hù)各匯編模塊的入口和出口代碼,計(jì)算傳遞參數(shù)在堆棧中的位置,工作量稍大,不過(guò)能滿足軟件設(shè)計(jì)結(jié)構(gòu)化的要求。

(2) 在C/C++程序中直接內(nèi)聯(lián)匯編語(yǔ)句。這種方法適用于短小或者簡(jiǎn)單的算法?;旌暇幊痰囊?guī)則[5,6]是在C/C++環(huán)境下,由TigerSHARC 定義了一套嚴(yán)格的寄存器規(guī)則,它分為三類[2,3]:

第一類是保留寄存器。有j16~j25,k16~k25,xr24~xr31,yr24~yr31共40個(gè),要使用這些寄存器,需要將其保存在實(shí)時(shí)堆棧中,在C可調(diào)用的匯編子程序中也必須保存和恢復(fù)這些寄存器。

第二類是堆棧專用寄存器。有k26,k27和j26,j27。這些寄存器專門用于堆棧保護(hù),在使用高級(jí)語(yǔ)言編程時(shí),不需要使用這四個(gè)寄存器。

第三類是高速暫存寄存器。它包括除了以上兩類寄存器以外的所有寄存器。用法和匯編中的普通寄存器是一樣的,使用前不需要保存寄存器內(nèi)容。

在默認(rèn)情況下,cjmp寄存器用作存放被調(diào)用函數(shù)的返回地址,但在嵌套調(diào)用中,這個(gè)值會(huì)被修改。為了保證安全返回,一般把返回地址存放在堆棧頂部(偏移地址為0的地方)。函數(shù)調(diào)用時(shí),有時(shí)需要參數(shù)傳遞,通常,如果參數(shù)少于5個(gè),則通過(guò)寄存器傳遞,如表1所示。

表1 參數(shù)字與寄存器的對(duì)應(yīng)關(guān)系

參數(shù)字

使用的寄存器

參數(shù)為int或者指針參數(shù)為float或者雙字

參數(shù)字1j4xr4

參數(shù)字2j5xr5

參數(shù)字3j6xr6

參數(shù)字4j7xr7

如果在C/C++ 調(diào)用函數(shù)中做了正確的函數(shù)返回聲明,則被調(diào)用的匯編函數(shù)可使用寄存器j8,xr8 和xr9 返回有效值。j8用于返回整數(shù)或地址;xr9:8可提供雙字結(jié)果返回。若返回值大于2個(gè)字長(zhǎng),則必須為它們分配存儲(chǔ)空間,令j8為返回值,指向該空間的首地址即可。

在C/C++中聲明全局變量及函數(shù),匯編中加“_”前綴才能使用;匯編中的對(duì)象必須用“_”前綴命名,并用.global 聲明全局變量,才可在C/C++中訪問(wèn)到。

1.2 函數(shù)調(diào)用規(guī)則[7]

函數(shù)調(diào)用的標(biāo)準(zhǔn)運(yùn)行模式為:

(1) 調(diào)用者將參數(shù)壓入堆棧,壓入時(shí)按照反序進(jìn)行,即最右邊的參數(shù)位于堆棧的頂部;

(2) 調(diào)用函數(shù);

(3) 調(diào)用結(jié)束時(shí),調(diào)用者將參數(shù)彈出堆棧并返回。整個(gè)過(guò)程離不開(kāi)堆棧操作。

ADSP-S101的堆棧是一個(gè)先入后出存儲(chǔ)區(qū),用堆棧指針(j/k27) 和幀指針(j/k26) 來(lái)管理堆棧。調(diào)用函數(shù)時(shí),編譯器在運(yùn)行棧中建立一個(gè)幀以存儲(chǔ)信息,當(dāng)前函數(shù)幀稱為局部幀。j/k26指向當(dāng)前函數(shù)局部幀的開(kāi)始,即棧底。j/k27指向棧頂,工作方式是向低地址變化。每調(diào)用一次函數(shù),就建立一個(gè)新幀。C環(huán)境利用局部幀來(lái)實(shí)現(xiàn)如下功能:

保護(hù)函數(shù)的返回地址及相關(guān)寄存器 把函數(shù)返回地址,保存在j27+0的位置(棧頂),同時(shí)設(shè)置j26為j27-0x40(棧底),得到長(zhǎng)度為64的棧區(qū),并在棧區(qū)內(nèi)保護(hù)相關(guān)寄存器。

分配局部變量 在局部變量賦初值的時(shí)候,系統(tǒng)在堆棧內(nèi)給它分配一個(gè)空間。

傳遞函數(shù)的參數(shù) 前四個(gè)參數(shù)傳遞給相應(yīng)寄存器(見(jiàn)表1),后續(xù)參數(shù)按順序裝載到堆棧j27 + 0xC的起始空間中。注意,如果傳遞的參數(shù)是結(jié)構(gòu)類型,則其所有元素都將入棧。例如第五個(gè)參數(shù)是兩元素的結(jié)構(gòu)體,則元素一放于j27+0xC,元素二放于j27+0xD,在使用參數(shù)時(shí)只需從對(duì)應(yīng)的位置上讀取匯編子程序即可。

C環(huán)境在調(diào)用C函數(shù)時(shí)自動(dòng)管理這些操作,當(dāng)匯編與C接口時(shí),必須采用與C一樣的方式進(jìn)行操作。特別需要注意的是,由于C編譯器不提供檢查堆棧溢出的任何手段,因此必須保證有足夠的空間用于堆棧,否則若發(fā)生溢出現(xiàn)象,將破壞程序的運(yùn)行環(huán)境,從而導(dǎo)致程序的癱瘓。

2 軟件設(shè)計(jì)優(yōu)化策略

2.1 代碼優(yōu)

代碼優(yōu)化[8,9]包括優(yōu)化C/C++語(yǔ)言的執(zhí)行速度和代碼長(zhǎng)度?,F(xiàn)代DSP的C/C++語(yǔ)言編譯器可提供一定程度的代碼優(yōu)化,但是編譯器不能同時(shí)做兩種類型的優(yōu)化,只能涉及執(zhí)行速度和代碼大小的平衡。相對(duì)編譯器來(lái)說(shuō),手工改變代碼的大小比較困難。ADI公司的VisualDSP++4.5集成開(kāi)發(fā)環(huán)境支持C/C++語(yǔ)言編譯和優(yōu)化,同時(shí)編譯器可以進(jìn)行幾個(gè)不同級(jí)別的優(yōu)化。

2.1.1 優(yōu)化代碼的執(zhí)行速度

對(duì)于某些有時(shí)間限制或頻繁執(zhí)行的代碼段,執(zhí)行速度是非常重要的,可以通過(guò)手工的辦法做很多優(yōu)化,以提高這些代碼段的效率。中斷服務(wù)程序、高優(yōu)先級(jí)的任務(wù)、有實(shí)時(shí)限制的計(jì)算、計(jì)算密集型或者頻繁調(diào)用的函數(shù)都是優(yōu)化速度時(shí)的候選對(duì)象。在實(shí)際的嵌入式系統(tǒng)中,由于處理器的特點(diǎn)不同,所以優(yōu)化手段會(huì)有所不同。主要有算法優(yōu)化、指令優(yōu)化、數(shù)據(jù)流優(yōu)化三種[1]。

算法優(yōu)化 根據(jù)任務(wù)的具體情況,尋找最優(yōu)算法,有效提高代碼的效率,同時(shí)保證結(jié)果的正確性,如FFT和DFT的快速算法、查表法等。同時(shí)也可以根據(jù)處理器的結(jié)構(gòu)特點(diǎn),利用處理器的并行處理結(jié)構(gòu),實(shí)現(xiàn)SIMD和MIMD,甚至多DSP的并行處理,有效進(jìn)行算法優(yōu)化。必須說(shuō)明的是,算法的優(yōu)化和數(shù)據(jù)類型以及數(shù)據(jù)在內(nèi)存空間的分布也有很大的關(guān)系。例如在圖像處理時(shí),ADSP-TS101可以把一副圖像分為上下兩部分進(jìn)行同時(shí)處理,或者幾幅圖像同時(shí)進(jìn)行多片處理。

常用的指令優(yōu)化主要有用移位來(lái)實(shí)現(xiàn)除法運(yùn)算;最好用的索引方式訪問(wèn)數(shù)組;使用inline函數(shù);使用全局變量減少函數(shù)調(diào)用參數(shù);復(fù)雜運(yùn)算模塊采用手工匯編,局部利用嵌入式匯編;減少條件判斷轉(zhuǎn)移;Switch語(yǔ)句中根據(jù)發(fā)生頻率來(lái)進(jìn)行case排序,大的switch語(yǔ)句轉(zhuǎn)為嵌套switch語(yǔ)句;重點(diǎn)優(yōu)化循環(huán)體;避免使用C++的昂貴特性。

數(shù)據(jù)流優(yōu)化主要有以下幾個(gè)方面:

(1) 選用合適的數(shù)據(jù)類型;

(2) 訪問(wèn)時(shí)保證從數(shù)據(jù)對(duì)齊地址開(kāi)始;

(3) 將數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空間;

(4) 頻繁訪問(wèn)的數(shù)據(jù)放在內(nèi)部存儲(chǔ)器內(nèi);

(5) 數(shù)據(jù)的輸入/輸出及DSP間的大量數(shù)據(jù)交換,采用DMA方式進(jìn)行。

2.1.2 優(yōu)化代碼的長(zhǎng)度

優(yōu)化代碼的長(zhǎng)度與優(yōu)化代碼的執(zhí)行速度往往是互相矛盾的。因此前面提到的優(yōu)化代碼的執(zhí)行速度方法,如果反其道而行之,則會(huì)起到優(yōu)化代碼長(zhǎng)度的效果。除了編譯器自動(dòng)優(yōu)化代碼長(zhǎng)度外,還有一些手工的方法可減少代碼的大小:

(1) 避免使用大的標(biāo)準(zhǔn)化程序庫(kù)例程。很多庫(kù)例程由于設(shè)法處理很多可能情況,所以形成龐大代碼。避免使用大的標(biāo)準(zhǔn)庫(kù)例程,用簡(jiǎn)潔代碼實(shí)現(xiàn)子功能。

(2) 使用本地字長(zhǎng),減少附加指令。

(3) 使用Goto語(yǔ)句。Goto語(yǔ)句的使用與優(yōu)化代碼速度相矛盾,但是可以去除復(fù)雜控制結(jié)構(gòu)以及共享重復(fù)代碼。

除了以上技術(shù),手工編寫匯編能夠最大限度地減少代碼長(zhǎng)度。

2.2 系統(tǒng)優(yōu)化[9,10]

除了以上優(yōu)化手段,系統(tǒng)的優(yōu)化還需要保證系統(tǒng)的實(shí)時(shí)性和可靠性。

2.2.1 系統(tǒng)實(shí)時(shí)性保證

對(duì)于實(shí)時(shí)性系統(tǒng),通過(guò)優(yōu)化代碼的執(zhí)行效率來(lái)減少任務(wù)的完成時(shí)間,可以提高系統(tǒng)的實(shí)時(shí)性。但對(duì)于復(fù)雜的多DSP系統(tǒng),任務(wù)的分配和調(diào)度需要嵌入式實(shí)時(shí)操作系統(tǒng)RTOS來(lái)完成,以保證系統(tǒng)的可靠性及實(shí)時(shí)性,而開(kāi)發(fā)者只需關(guān)注應(yīng)用程序算法的研究。RTOS的高效任務(wù)管理、快速靈活的任務(wù)間通信、高度的可裁減性、動(dòng)態(tài)的內(nèi)存管理等優(yōu)點(diǎn)都有效提高了嵌入式系統(tǒng)的資源利用率,同時(shí)快速有效的中斷及異常時(shí)間處理能力保證了系統(tǒng)的安全性。常見(jiàn)的RTOS有Linux,WinCE,μCOS/Ⅱ,VxWorks等。對(duì)TS101,可用的嵌入式操作系統(tǒng)有OSE,VDK等。

另外,在多處理器系統(tǒng)中,較少通信開(kāi)銷對(duì)提高系統(tǒng)的效率非常重要。

2.2.2 系統(tǒng)可靠性保證

系統(tǒng)可靠性保證是指通過(guò)軟件設(shè)計(jì)上的一些措施來(lái)實(shí)現(xiàn)對(duì)系統(tǒng)故障的檢測(cè)、隔離以及實(shí)時(shí)監(jiān)控系統(tǒng)遇到的異常信息,并盡可能保證在異常狀態(tài)或帶故障狀態(tài)下,系統(tǒng)能完成正常的任務(wù),避免系統(tǒng)死機(jī)。提高系統(tǒng)的可靠性是軟件設(shè)計(jì)優(yōu)化的一個(gè)重要方面。

在實(shí)時(shí)環(huán)境下,由于外部異常導(dǎo)致系統(tǒng)中數(shù)據(jù)傳輸或者通信被打斷,需要重新建立通信,保證數(shù)據(jù)傳輸?shù)臅惩?。算法出現(xiàn)的異常,如除法溢出、數(shù)值超出范圍等,需要建立相應(yīng)的處理機(jī)制。例如,在總線共享結(jié)構(gòu)的多DSP處理系統(tǒng)中,軟件設(shè)計(jì)上加入實(shí)時(shí)的系統(tǒng)狀態(tài)查詢操作,多片工作時(shí)當(dāng)一片出現(xiàn)問(wèn)題,主控處理器會(huì)根據(jù)具體的出錯(cuò)狀態(tài)來(lái)自動(dòng)將其隔離,并通知其他的處理器,重新進(jìn)行任務(wù)分配,利用它們完成剩余的工作。

異常維護(hù)操作必然會(huì)使軟件運(yùn)行效率下降,這就需要根據(jù)系統(tǒng)具體的運(yùn)行環(huán)境進(jìn)行取舍。為此它通常用于對(duì)可靠性維護(hù)的操作,以模塊子函數(shù)的形式存放在軟件相應(yīng)的故障對(duì)策庫(kù)中,以便根據(jù)故障的具體情況來(lái)選擇應(yīng)用中應(yīng)采取的相應(yīng)措施。

2.3 程序優(yōu)化的總體策略

根據(jù)不同的處理器及實(shí)際應(yīng)用,嵌入式DSP系統(tǒng)的優(yōu)化情況有所不同。同時(shí)應(yīng)當(dāng)指出,編譯器的優(yōu)化是速度優(yōu)化與代碼長(zhǎng)度優(yōu)化的折中,多數(shù)情況下代碼速度優(yōu)化與長(zhǎng)度優(yōu)化是互相矛盾的,應(yīng)當(dāng)根據(jù)實(shí)際情況有所取舍。在優(yōu)化系統(tǒng)的過(guò)程中,要兼顧以下幾點(diǎn):

(1) 不要一味地追求程序的效率,應(yīng)當(dāng)在滿足正確性、可靠性、健壯性、可讀性等質(zhì)量因素的前提下,設(shè)法提高程序的效率;

(2) 以提高程序的全局效率為主,提高局部效率為輔;

(3) 在優(yōu)化程序的效率時(shí),應(yīng)當(dāng)先找出限制效率的“瓶頸”,不要在無(wú)關(guān)緊要之處優(yōu)化;

(4) 先優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,再優(yōu)化執(zhí)行代碼;

(5) 不要追求緊湊的代碼,因?yàn)榫o湊的代碼并不能產(chǎn)生高效的機(jī)器碼。

同時(shí),充分了解系統(tǒng)硬件結(jié)構(gòu),特別是處理器內(nèi)部結(jié)構(gòu),與硬件工程師有效協(xié)調(diào)配合,設(shè)計(jì)出高效率代碼,同時(shí)保證系統(tǒng)的安全性及實(shí)時(shí)性。

3 混合編程在程序中的應(yīng)用

下面以一個(gè)嵌入式DSP程序?yàn)槔?其系統(tǒng)由兩片DSP構(gòu)成,主DSP0 負(fù)責(zé)通過(guò)IRQ0接收控制臺(tái)從RS 232串口傳來(lái)的控制字、譯碼,并通過(guò)控flag3產(chǎn)生下降沿觸發(fā)IRQ3 中斷來(lái)啟動(dòng)另一片DSP。這里用C搭建框架,匯編控制底層硬件,效率高,可讀性強(qiáng)。由于篇幅限制,這里略去串口初始化、串口數(shù)據(jù)接收函數(shù)以及其他芯片的處理程序。以下是系統(tǒng)管理中的混合編程:

Main.c 文件:

# include < signal.h >

# include < sysreg.h >

# include " def TS101.h"

int code[ 2 ] ;

volatile int inruptflag = 0,IRQ3flag = 0 ;

extern void INITIAL_DSP ( ) ;

extern int decode (int ( 3 p) [ ]) ;

extern void IRQ0_int () ;

# pragma interrupt //中斷服務(wù)程序標(biāo)識(shí)(第2 種方法)

void IRQ3_int (void) { IRQ3flag = 1 ;}

main ()

{

int temp,r ;

INITIAL_DSP() ;// 一些初始化設(shè)置

temp = __builtin_sysreg_read (__IMASKH) ;

// 讀取IMASKH

temp | = (1 < < IN T_IRQ0_P) | (1 < < INT_IRQ3_P) ;

__builtin_sysreg_write (__IMASKH,temp ) ;

// 打開(kāi)IRQ0 、IRQ3 中斷屏蔽位

interrupt (SIGIRQ0,IRQ0_int) ;

// 賦IRQ0 中斷入口地址

while(inruptflag = = 0) { } //等待接收IRQ0傳命令字

Rev8byte ( &code;) ;

// 接收串口命令字并存放于code (略)

r = decode ( &code;) ;/ / 調(diào)用asm 譯碼程序

if ( 3 (int 3 ) (r + 1) = = 2)

{// 判斷命令碼第2 個(gè)字是否為2

__builtin_sysreg_write (__IVIRQ0,(int) IRQ3_int) ;

// 第2 種方法設(shè)置中斷矢量表

__builtin_sysreg_write ( __SQCTLCL,0xf0ffffff) ;

// 拉低FLAG3,產(chǎn)生IRQ3 中斷

while( IRQ3flag = = 0) { } // 等中斷啟動(dòng)各片DSP

…}

… }

INITIAL.asm 文件:

# include " def TS101.h"

# define mPUSHQ(arg) Q[ k27 + = - 4 ] = arg;

// 宏定義保存寄存器

# define mPOPQ(arg) k27 = k27 + 4;arg = Q[ k27 + = 0 ];// 宏定義釋放寄存器

# define mENTER j26 = j27 - 0x40 ;k26 = k27 - 0x40;

// 宏定義實(shí)現(xiàn)調(diào)用進(jìn)入

[ j27 + = 0xFFFFFFF4 ] = cJMP ;k27 = k27 - 0x04;

# define mRETURN cjmp = [j26 + 0x40 ];

// 宏定義實(shí)現(xiàn)調(diào)用返回

cjmp(ABS) (NP) ;j27:24 =Q[j26 + 0x44] ;k27:24 =Q[k26 + 0x44];

.global _INITIAL_DSP,_IRQ0_int,_decode,_Rev8byte ;// 聲明為全局變量

.extern _inruptflag,_code ;// 外部變量

.section flags ;

.var dsp_code[8 ] ;

.section program ;

_INITIAL_DSP:mEN TER

xr5 = 0x08800000;sqctlst = xr5;

// 令flag3 為輸出高電平

xr5 = 0xfff6ffff;sqctlcl = xr5;

// 設(shè)置IRQ3、IRQ0 為邊沿觸發(fā)

xr0 = 0xD0010000;IMASKH = xr0;//打開(kāi)異常中斷

yr17 = j27;yr16 = j26;yr15 = k27;yr14 = k26 ;

// 嵌套調(diào)用,保護(hù)堆棧指針寄存器

. align_code 4 ;call InitialSPA(np) (abs);

// 調(diào)用UART 芯片初始化程序(略)

j27 = yr17;j26 = yr16;k27 = yr15;k26 = yr14;

// 釋放堆棧指針寄存器

_INITIAL_DSP.END:mRETURN

_decode:mEN TER

xr3 = [ j4 + 0 ];j2 = dsp_code;[ j2 + = 1 ] = xr3;

// j4 傳遞參數(shù),譯碼結(jié)果存于dsp_code

j8 = dsp_code;// j8作為返回值返dsp_code的首地址

_decode.end:mRETURN

_IRQ0_int:mPUSHQ(xr3:0) mPUSHQ(j3:0)

// 保存所有寄存器

j1 = _inruptflag;xr0 = 1;[ j1 + 0 ] = xr0;

mPOPQ(j3:0) mPOPQ(xr3:0) // 釋放所有寄存器

_IRQ0_int .end:rti (ABS) (NP) ;nop ;nop ;nop;

4 結(jié) 語(yǔ)

匯編語(yǔ)言與高級(jí)語(yǔ)言的混合編程方法能夠最大限度地發(fā)揮兩種編程方法的優(yōu)勢(shì),讓開(kāi)發(fā)者寫出可移植性好,執(zhí)行效率高的DSP應(yīng)用程序。設(shè)計(jì)良好的混合編程軟件既能有效滿足嵌入式系統(tǒng)對(duì)功能與性能的需求,也可以為程序的擴(kuò)展和移植預(yù)留足夠的空間。該方法對(duì)ADI公司其他系列的DSP編程也有很大的參考價(jià)值。

參考文獻(xiàn)

[1]Michael Barr.Programming Embedded Systems in C and C++ [M].First Edition.O′Reilly,1999.

[2]王霞,馮立營(yíng),趙曉群.一種TI5000系列DSP C/C++語(yǔ)言和匯編語(yǔ)言混合編程的方法[J].現(xiàn)代電子技術(shù),2004,27(15):71-74.

[3]齊崇英.TMS320C3x DSP的C匯編語(yǔ)言混合編程及中斷的C語(yǔ)言實(shí)現(xiàn)[J].國(guó)外電子元器件,2002(4):23-25.

[4]Analog Devices INC.ADSP-TS101 TigerSHARC Processor Software Reference[Z].2003.

[5]張永.C語(yǔ)言與匯編語(yǔ)言混合編程的研究與實(shí)現(xiàn) [J].計(jì)算機(jī)與數(shù)字工程,2006(5):120-122.

[6]劉書明.TigerSHARC DSP 應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2004.

[7]陳麗安,魏宏偉.C54x DSP混合編程及中斷的C語(yǔ)言實(shí)現(xiàn)[J].微處理機(jī),2005(6):52-56.

[8]任志考.用C語(yǔ)言進(jìn)行DSP軟件設(shè)計(jì)的優(yōu)化方法[J].青島科技大學(xué)學(xué)報(bào),2003(9):102-104.

[9]劉朝暉,鄭玉墻.用C語(yǔ)言進(jìn)行DSP軟件設(shè)計(jì)的優(yōu)化考慮[J].空軍雷達(dá)學(xué)院學(xué)報(bào),2001(2):49-52.

[10]Andrew Sloss.ARM System Developer's Guide:Designing and Optimizing System Software[M].Elsevier,2005.

猜你喜歡
匯編語(yǔ)言
高等學(xué)校計(jì)算機(jī)專業(yè)課程教學(xué)改革實(shí)踐——以匯編語(yǔ)言與接口技術(shù)課程為例
匯編語(yǔ)言與C語(yǔ)言的混合程序設(shè)計(jì)技術(shù)研究
提高《匯編語(yǔ)言程序設(shè)計(jì)》教學(xué)效率的思考與實(shí)踐
計(jì)算機(jī)中幾個(gè)語(yǔ)言的理解
匯編語(yǔ)言在C語(yǔ)言學(xué)習(xí)中的應(yīng)用
匯編語(yǔ)言在大學(xué)生能力培養(yǎng)中的研究與探索
試論匯編語(yǔ)言與C語(yǔ)言的混合程序設(shè)計(jì)技術(shù)
教改,不能只做減法了事
拉萨市| 肃南| 阿坝县| 文安县| 通化县| 曲阳县| 莱州市| 高陵县| 宿州市| 盈江县| 休宁县| 自治县| 绥棱县| 洱源县| 扶风县| 陵川县| 武邑县| 广平县| 女性| 同德县| 尖扎县| 琼结县| 秭归县| 虹口区| 皮山县| 莱阳市| 南和县| 堆龙德庆县| 庄浪县| 长沙市| 汝阳县| 滦平县| 万安县| 黄浦区| 安多县| 同心县| 和林格尔县| 安阳市| 句容市| SHOW| 南宫市|