|
嵌入式硬件工程師網(wǎng)上培訓(xùn)_嵌入式系統(tǒng)C語言開發(fā)ADSP21XX的方法,
隨著嵌入式系統(tǒng)復(fù)雜程度的不斷提高,用匯編語言編寫一個巨大的程度將是困難,甚至是不可能的。為此,AD公司推出了針對ADSP21XX系列DSP的嵌入式C和C++語言集成開發(fā)工具,分別是VisualDSP和VisualDSP++系列,這些開發(fā)工具提供了C語言和C++語音的開發(fā)功能。以下就以筆者在實際開發(fā)中的一些經(jīng)驗,結(jié)合VisualDSP6.1版本,介紹用C語言開發(fā)VisualDSP6.1版本,介紹用C語言開發(fā)ADSP21XX的方法。VisualDSP提供了一個開放源碼軟件組織GNU的C編譯器,和一套成熟穩(wěn)定的C運(yùn)行時間庫(C Run TIme Library)等。GNU的編譯器一向以編譯效率高著稱,在編譯后的代碼長度和運(yùn)行速度方面非常優(yōu)秀;C運(yùn)行時間庫則把很多重復(fù)性的工作,如浮點運(yùn)行、三角函數(shù)、FFT等作為C語言的庫函數(shù),提供給用戶,大大提高了用戶的開發(fā)效率和程序的穩(wěn)定性,降低了開發(fā)難度,另外,由于把這些庫函數(shù)的源代碼提供給了用戶,還提高了C語言與匯編語言之間的透明性,使用戶開發(fā)的程序兼具兩者的優(yōu)點。
1 Visual DSP簡介
VisualDSP是AD公司的DSP開發(fā)工具,主要由可執(zhí)行文件、庫文件和各種幫助文檔組成。6.1版本還帶有一個基于圖形界面,針對21XX系列DSP的軟件仿真和調(diào)試工具。
VisualDSP的可執(zhí)行文件包括匯編、編譯、鏈接工具以及可執(zhí)行文件重新格式化工具等,見表1。
表1 VisualDSP的可執(zhí)行文件及用途
注:“*”代表該程序一般不單獨(dú)使用,而昌由G21.exe或ASM21.exe調(diào)用。
VisualDSP套件中的軟件仿真調(diào)試工具DEBUGAPP,采用Windows圖形界面,使用方便。它的主要特點是:可以仿真調(diào)試從ADSP2101~2189全系列的DSP;支持?jǐn)帱c、單步、全速運(yùn)行等各種常見調(diào)試方法;可以隨時查詢和修改DSP的程序RAM(PM)、數(shù)據(jù)RAM(DM)和各寄存器的內(nèi)容;可以仿真中斷,進(jìn)行可執(zhí)行程序性能評估(Profile),因此可以進(jìn)行時序仿真。DEBUGAPP是調(diào)試程序和驗證復(fù)雜算法的極好工具。
VisualDSP6.1還提供了豐富的幫助文檔,包括21XX系列的用戶手冊、匯編和C語言工具以及仿真調(diào)試程序的使用手冊;還有C運(yùn)行庫的參考手冊,列出了所有可用的C庫函數(shù)。
2 C語言運(yùn)行庫結(jié)構(gòu)
C語言運(yùn)行時間庫是位于LIB目錄下的*.a文件,是整個C開發(fā)工具的核心之一,提供了大量的可以直接調(diào)用的庫函數(shù)。這些庫函數(shù)的函數(shù)原型包含在INCLUDE目錄下的頭文件中。這些頭文件有的還包含一些宏定義。另外,VisualDSP還把這些庫函數(shù)的匯編語言源代碼提供給出了用戶,方便了用戶從中提取有用的代碼,甚至修改源代碼,生成新的庫,來適應(yīng)自己的要求。利用LIB21程序,還可以把自己的常用匯編子程序做成庫,或是將實時性要求較高的代碼用匯編語言來寫,做成庫,供C語言程序調(diào)用。
VisualDSP的C語言運(yùn)行庫由兩部分組成:應(yīng)用程序框架和預(yù)定義的各種庫函數(shù)。
不同的DSP型號有不同的硬件結(jié)構(gòu)、中斷向量表,所以對應(yīng)的應(yīng)用程序框架庫也不同,相應(yīng)的文件是21*_HDR.DSP.其中*代表不同的DSP型號。應(yīng)用程序框架的主體是中斷向量處理部分,把中斷向量引到合適的地址。其中最重要的是對系統(tǒng)復(fù)位(RESET_VECTOR)的中斷向量的處理:初學(xué)嵌入式的書, 廣場嵌入式座椅設(shè)計, 嵌入式開發(fā)書籍1, 嵌入式開發(fā)書籍推薦, 嵌入式三級講解, 嵌入式畢業(yè)2年待遇, 制作嵌入式app, 自考嵌入式專業(yè)本科, 嵌入式系統(tǒng)MMU, 移動公司嵌入式管理, 計算機(jī)與嵌入式, 嵌入式軟件退稅用途, 嵌入式單片機(jī)語言, 研究生畢業(yè)的嵌入式, 美國杰士嵌入式音響, 嵌入式程序架構(gòu)圖, 工業(yè)攝像機(jī)嵌入式, it嵌入式是做什么, 嵌入式系統(tǒng)的編程語言, 嵌入式技術(shù)專業(yè)實踐,
第一條指令是調(diào)用C庫函數(shù)中的_ _lib_setup_everything函數(shù)作程序啟動時的初始化工作。接下來,調(diào)用C語言程序中的main_函數(shù),進(jìn)入C程序的主體,也就是進(jìn)入用戶自己程序,開始正常工作。主程序結(jié)束后,再調(diào)用_lib_prog_term函數(shù),作程序退出時的結(jié)尾工作。由于嵌入式系統(tǒng)的特性,系統(tǒng)絕大多數(shù)都在主程序運(yùn)行時被繼電了,所以_lib_prog_term得到執(zhí)行的機(jī)會很小。
其它的中斷向量由C運(yùn)行庫來管理,匯編指令如下:
_Interrupt2:JUMP_lib_int2_ctrl;NOP;NOP;NOP;
其中的_lib_int2_crtl就是C語言庫中控制INT2的函數(shù)。如果用戶要使用該中斷,應(yīng)先把中斷服務(wù)程序用一個C庫函數(shù)Interrupt()把服務(wù)函數(shù)指針設(shè)定好,并打開相應(yīng)的中斷允許位,當(dāng)該中斷發(fā)生時,_lib_int2_ctr1函數(shù)就會控制DSP跳轉(zhuǎn)到相應(yīng)的指針位置。
VisualDSP預(yù)定義的C語言庫函數(shù)包括數(shù)學(xué)函數(shù)、FFT函數(shù)、ANSI標(biāo)準(zhǔn)內(nèi)存管理和字符串管理函數(shù)的一個子集。所有的函數(shù)列表可參考VisualDSP的聯(lián)機(jī)文檔。這些庫函數(shù)以二進(jìn)制代碼的形式,打包集合在lib*.a文件中,用戶的C語言程序可以像使用自己的子程序一樣方便地調(diào)用這些庫函數(shù)。下面是調(diào)用庫函數(shù)的一個例子。
編譯后產(chǎn)生的匯編源代碼中有call sin_指令,就是調(diào)用sin庫函數(shù)的匯編語言指令語句。
從嵌入式開發(fā)的角度講,VisualDSP的C語言工具已經(jīng)提供了一個操作系統(tǒng)雛形的功能。在AD公司的ADMC系列DSP中,已經(jīng)把這些庫函數(shù)和一些電機(jī)控制專用的函數(shù),以及程序加載功能,集成在了DSP的片內(nèi)ROM中。
3 C語言與匯編語言混合編程方法
用C語言開發(fā)的缺點是不能精確控制程序運(yùn)行的時間,對于實時性要求較高的應(yīng)用,必須用匯編語言。VisualDSP為用戶提供了兩種與匯編語言的接口方法:用ASM()方法,直接嵌入?yún)R編語言語句;用匯編語言編寫子程序,供C語言程序調(diào)用。為了支持C語言與匯編程序程序的接口,VisualDSP預(yù)定義了諸如FUNCTION_ENTRY、EXIT、SAVE_REG、RESTORE_REG等13個宏。限于篇幅,不詳細(xì)介紹其功能。使用這些宏以前,要包含asm_sprt.h頭文件。
|
|