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