DSP混合編程關(guān)鍵技術(shù)研究
②程序指針(PC)跳轉(zhuǎn)到匯編函數(shù)的代碼段;
③保存出口地址;
④保存C語言程序局部幀指針;
⑤分配局部變量;
⑥調(diào)用結(jié)束前將以上所有內(nèi)容彈出軟件棧。
下面以具體例子來講述這個操作過程。本文引用地址:http://butianyuan.cn/article/188645.htm
(2)匯編語言程序調(diào)用C函數(shù)
匯編語言程序中調(diào)用C函數(shù)。被調(diào)用的C函數(shù)在C語言環(huán)境中需要用extern進行定義,在匯編程序中用.ref說明為外部標(biāo)號,且函數(shù)名加“_”。在調(diào)用C函數(shù)之前應(yīng)手工編程將參數(shù)以逆序?qū)懭氘?dāng)前運行任務(wù)所使用的任務(wù)堆棧中,壓棧之前堆棧指針可不作調(diào)整。被調(diào)用的C函數(shù)即可正常訪問調(diào)用者傳遞的參數(shù),函數(shù)調(diào)用完畢后需要調(diào)整堆棧指針,清除函數(shù)調(diào)用中參數(shù)所占用的堆??臻g。C函數(shù)的返回值可以通過訪問累加器獲得。具體例子如下。
C語言模塊中編寫乘法函數(shù):
3 注意事項
(1)中斷的處理
LF240xA發(fā)生中斷時,程序指針(PC)就指向相應(yīng)的中斷向量,并通過中斷向量映射到相應(yīng)的中斷服務(wù)子程序。例如,在0004h~0005h處是INT2的中斷向量,在此存儲了1條跳轉(zhuǎn)指令,跳轉(zhuǎn)至INT2的服務(wù)子程序。LF240xA的C語言有interrupt修飾符可以用來定義中斷服務(wù)子程序,如下所示:
將上述2個模塊分別編譯后鏈接,就能響應(yīng)INT2中斷了。
(2)字母大小寫
在C語言環(huán)境中,對于字母大小寫的區(qū)分是很嚴(yán)格的,因此在混合編程的過程中也應(yīng)該嚴(yán)格遵守這一點。例如,在寫命令文件時,誤將“.data”寫成“.daTA”,此時系統(tǒng)將無法給初始化代碼分配存儲空間,導(dǎo)致程序無法執(zhí)行。
(3)C語言庫函數(shù)應(yīng)用
TI的C編譯器中內(nèi)置了很多函數(shù),包含在rts2xx.1ib的函數(shù)庫中。庫函數(shù)并不是C語言的一部分,它是由人們根據(jù)需要編制并提供給用戶直接使用的。每一種C編譯系統(tǒng)都提供了一批庫函數(shù),不同的編譯系統(tǒng)所提供的庫函數(shù)的數(shù)目、函數(shù)名及函數(shù)功能是不完全相同的。要使用庫函數(shù),只需在源文件中添加語句“#include”函數(shù)名.h””,就可使用相應(yīng)的庫函數(shù)了。
結(jié) 語
以上提到的LF240xA DSP的C語言和匯編語言混合編程技術(shù)已經(jīng)在筆者參與開發(fā)的卷煙機重量控制系統(tǒng)的控制軟件中得到應(yīng)用。實踐證明,采用混合編程的軟件更加契合一般嵌入式系統(tǒng)對時問和空間的嚴(yán)格約束。設(shè)計良好的混合編程軟件既能有效地滿足嵌入式系統(tǒng)對功能與性能的需求,同時也可以為程序的擴展和移植預(yù)留足夠的空間。混合編程是編制復(fù)雜的LF240xA控制軟件的有效方法,同時也是嵌入式系統(tǒng)軟件最優(yōu)化的重要途徑。
評論