TMS320C62X DSP的混合編程研究
發(fā)布時間:2008/5/26 0:00:00 訪問次數(shù):721
    
    
    來源:電子技術應用 作者:新聞管理員
    
    摘要:目前,c語言和匯編語言的混合編程已經在ti公司的tms320c62x上成為一種最流行的編程方法。闡述了基于tms320c62x的c語言和匯編語言混合編程應遵循的接口規(guī)范以及并行匯編代碼的編寫。給出了一個基于tms320c62x的運動補償?shù)幕旌暇幊淘O計實例。
    
    關鍵詞:dsp c語言 并行匯編 混合編程
    
    tms320c62x是美國德州儀器公司ti的新一代高性能定點數(shù)字信號處理器(dsp)芯片;冢洌螅鸬能浖O計問題,就是采用編程語言進行算法實現(xiàn)并使程序效率盡量滿足實時性要求。ti dsp的軟件設計可以采用匯編語言、高級語言c/c++以及c語言與匯編語言的混合編程。完全采用匯編語言編程復雜性高、開發(fā)周期長,而完全采用c語言編程則程序的執(zhí)行效率相對較低,不能滿足實時性的要求。為了設計出性價比最好、開發(fā)周期較短、比較復雜的dsp系統(tǒng),可以采用混合語言編程,把c語言和匯編語言的優(yōu)點有效地結合起來。c語言和匯編語言的混合編程有三種形式:在編寫c語言代碼中插入匯編語句只需在匯編語句兩邊加上雙引號和括號,在括號前面加上標識asm,如asm“匯編語句”;在編寫c代碼的過程中調用內聯(lián)函數(shù)tms320c62x中有一些直接映射為內聯(lián)的c6000指令的特殊函數(shù),內聯(lián)函數(shù)用前下劃線_表示,使用時同調用c語言的庫函數(shù)一樣調用它,如b=_nassertn>=10;匯編代碼以c代碼可以調用的函數(shù)出現(xiàn)。本文采用第三種形式。為了使程序代碼的執(zhí)行具有盡可能高的執(zhí)行效率,本文將著重點放在并行匯編代碼的編程,而不是線性匯編代碼的編程。
    
    1 c語言與匯編語言混合編程的接口規(guī)范和標準
    
    用c語言編寫的代碼中核心代碼常常只是整個程序代碼的5%,但是卻占用了整個程序約95%的執(zhí)行時間。對這些核心代碼采用匯編語言編寫,可以大大提高代碼的執(zhí)行效率,而c語言程序可以象調用c程序的一個函數(shù)那樣去調用這個匯編函數(shù)。為了實現(xiàn)c語言和匯編語言的混合編程,需要注意一些規(guī)定的接口規(guī)范和標準。
    
    (1)采用c語言和匯編語言混合編程時,tms320c62x定義了一套嚴格的寄存器規(guī)則。這個寄存器規(guī)則表明了編譯器如何使用這些寄存器以及在函數(shù)調用過程中如何保護這些寄存器。
    
    調用函數(shù)保護了寄存器a0~a9和b0~b9,這就使得在編寫匯編程序的時候可以任意的使用這幾個寄存器而不需保護它們。但當使用到寄存器a10~a15或b10~b15的時候,則必須自行對它們進行保護。長型、雙精度型或者是長雙精度型的數(shù)據對象要放在一個奇/偶寄存器對(如a1:a0)里,奇數(shù)寄存器存放著數(shù)據的符號位、指數(shù)位和最高有效位,而偶數(shù)寄存器則存放著低有效位。
    
    在默認情況下,a3用作返回結構指針寄存器,b3用作被調用函數(shù)返回地址寄存器,a15用作幀指針寄存器,b14用作數(shù)據頁指針寄存器,b15用作堆棧指針寄存器。這些寄存器在被調用的匯編函數(shù)中用到時都要進行保護。
    
    (2)調用函數(shù)將參數(shù)傳遞到被調用函數(shù)中,前十個參數(shù)將被從左到右依次放入寄存器a4、b4、a6、b6、a8、b8、a10、b10、a12和b12,如果傳遞的參數(shù)是長型、雙精度型或者是長雙精度型,則將參數(shù)依次放入寄存器組a5:a4、b5:b4、a7:a6等,并將剩下的變量按相反的順序放在堆棧里。注意,如果傳遞的參數(shù)是一個結構類型的參數(shù),則傳遞的是該結構類型的地址。
    
    (3)如果在c/c++調用函數(shù)中做了正確的函數(shù)返回聲明,則被調用的匯編函數(shù)可以返回有效值。如果返回值是整型或32位的浮點型,則放在寄存器a4中返回;如果返回值是雙精度或是長雙精度型,則放在a5:a4中返回;如果返回值是一個結構類型,則將其結構的地址放在a3中返回。
    
    (4)編譯器為所有的外部對象指定一個鏈接時的名字。當寫匯編語言代碼時,必須用與這個名字相同的名字。對于只在匯編語言模塊中用到的
    
    
    來源:電子技術應用 作者:新聞管理員
    
    摘要:目前,c語言和匯編語言的混合編程已經在ti公司的tms320c62x上成為一種最流行的編程方法。闡述了基于tms320c62x的c語言和匯編語言混合編程應遵循的接口規(guī)范以及并行匯編代碼的編寫。給出了一個基于tms320c62x的運動補償?shù)幕旌暇幊淘O計實例。
    
    關鍵詞:dsp c語言 并行匯編 混合編程
    
    tms320c62x是美國德州儀器公司ti的新一代高性能定點數(shù)字信號處理器(dsp)芯片;冢洌螅鸬能浖O計問題,就是采用編程語言進行算法實現(xiàn)并使程序效率盡量滿足實時性要求。ti dsp的軟件設計可以采用匯編語言、高級語言c/c++以及c語言與匯編語言的混合編程。完全采用匯編語言編程復雜性高、開發(fā)周期長,而完全采用c語言編程則程序的執(zhí)行效率相對較低,不能滿足實時性的要求。為了設計出性價比最好、開發(fā)周期較短、比較復雜的dsp系統(tǒng),可以采用混合語言編程,把c語言和匯編語言的優(yōu)點有效地結合起來。c語言和匯編語言的混合編程有三種形式:在編寫c語言代碼中插入匯編語句只需在匯編語句兩邊加上雙引號和括號,在括號前面加上標識asm,如asm“匯編語句”;在編寫c代碼的過程中調用內聯(lián)函數(shù)tms320c62x中有一些直接映射為內聯(lián)的c6000指令的特殊函數(shù),內聯(lián)函數(shù)用前下劃線_表示,使用時同調用c語言的庫函數(shù)一樣調用它,如b=_nassertn>=10;匯編代碼以c代碼可以調用的函數(shù)出現(xiàn)。本文采用第三種形式。為了使程序代碼的執(zhí)行具有盡可能高的執(zhí)行效率,本文將著重點放在并行匯編代碼的編程,而不是線性匯編代碼的編程。
    
    1 c語言與匯編語言混合編程的接口規(guī)范和標準
    
    用c語言編寫的代碼中核心代碼常常只是整個程序代碼的5%,但是卻占用了整個程序約95%的執(zhí)行時間。對這些核心代碼采用匯編語言編寫,可以大大提高代碼的執(zhí)行效率,而c語言程序可以象調用c程序的一個函數(shù)那樣去調用這個匯編函數(shù)。為了實現(xiàn)c語言和匯編語言的混合編程,需要注意一些規(guī)定的接口規(guī)范和標準。
    
    (1)采用c語言和匯編語言混合編程時,tms320c62x定義了一套嚴格的寄存器規(guī)則。這個寄存器規(guī)則表明了編譯器如何使用這些寄存器以及在函數(shù)調用過程中如何保護這些寄存器。
    
    調用函數(shù)保護了寄存器a0~a9和b0~b9,這就使得在編寫匯編程序的時候可以任意的使用這幾個寄存器而不需保護它們。但當使用到寄存器a10~a15或b10~b15的時候,則必須自行對它們進行保護。長型、雙精度型或者是長雙精度型的數(shù)據對象要放在一個奇/偶寄存器對(如a1:a0)里,奇數(shù)寄存器存放著數(shù)據的符號位、指數(shù)位和最高有效位,而偶數(shù)寄存器則存放著低有效位。
    
    在默認情況下,a3用作返回結構指針寄存器,b3用作被調用函數(shù)返回地址寄存器,a15用作幀指針寄存器,b14用作數(shù)據頁指針寄存器,b15用作堆棧指針寄存器。這些寄存器在被調用的匯編函數(shù)中用到時都要進行保護。
    
    (2)調用函數(shù)將參數(shù)傳遞到被調用函數(shù)中,前十個參數(shù)將被從左到右依次放入寄存器a4、b4、a6、b6、a8、b8、a10、b10、a12和b12,如果傳遞的參數(shù)是長型、雙精度型或者是長雙精度型,則將參數(shù)依次放入寄存器組a5:a4、b5:b4、a7:a6等,并將剩下的變量按相反的順序放在堆棧里。注意,如果傳遞的參數(shù)是一個結構類型的參數(shù),則傳遞的是該結構類型的地址。
    
    (3)如果在c/c++調用函數(shù)中做了正確的函數(shù)返回聲明,則被調用的匯編函數(shù)可以返回有效值。如果返回值是整型或32位的浮點型,則放在寄存器a4中返回;如果返回值是雙精度或是長雙精度型,則放在a5:a4中返回;如果返回值是一個結構類型,則將其結構的地址放在a3中返回。
    
    (4)編譯器為所有的外部對象指定一個鏈接時的名字。當寫匯編語言代碼時,必須用與這個名字相同的名字。對于只在匯編語言模塊中用到的