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