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