1 引言
隨著微控制器技術的發展,以TI公司TMS320C2000系列為代表的DCS型數字信號處理器DSP應用廣泛。該類型DSP內部集成Flash存儲器,可將二進制代碼同化到其內部的Flash存儲器直接運行。這種運行方式在傳統嵌入式應用設計中很有效,但在一些算法比較復雜、系統響應要求快速、通訊任務比較繁重的嵌入式應用中,這種運行方式會導致控制系統響應遲緩、通訊異常、I/O操作緩慢等問題。針對這些情況,提出一種新的解決方案,來提高DSP代碼運行性能。
2 問題分析及設計方案
由于應用程序在Flash中運行速度遠低于在RAM中,因此在復雜嵌入式應用中會出現控制系統響應遲緩、通訊異常、I/O操作緩慢等問題。為了避免這些問題,只能讓程序在RAM中運行。TI公司的TMS320C2000系列DSP有2種工作模式:微處理器模式和微控制器模式。當DSP處于微控制器模式時,在RAM中程序運行速度達到峰值,但掉電后程序丟失,系統無法重新自動運行,因此這種程序運行方式僅適用于仿真調試階段。因此,DSP必須工作在微處理器模式下,使用片內Flash作為運行程序的存儲和運行介質,才能保證系統上電后自動運行。但其程序運行效率低。因此必須把這2種工作模式相結合:首先將應用程序固化到片內Flash存儲器,當系統上電后由專門設計的裝載器(Bootloader) 負責將應用程序南Flash搬移到RAM,然后Bootloader將DSP控制權交給應用程序,從而實現DSP運行速度最高和上電后應用程序自動運行,解決了因程序在不同介質的不同效率所導致的系統響應遲緩、通訊異常、I/O操作緩慢等問題。
以TMS320LF2407 DSP為例進行說明:該DSP具有獨立的數據存儲空間和數據總線,以及程序存儲空間和程序總線。只有程序空間的程序才能被DSP視為是可執行程序,數據空間上的程序將被DSP視為操作數據,因此將應用程序直接從片內Flash拷貝到數據空間的RAM后應用程序是不能運行的。若使拷貝后的應用程序能夠被 DSP視為可執行程序還必須做一些輔助工作。
通過對TMS320LF2407的存儲映射結構分析可發現:程序空間和數據空間的擴展區域有部分地址可配置成相同存儲介質(Flash或者RAM),通過某種辦法可以實現共享,也就是說DSP可以將從Flash中拷貝到共享RAM的應用程序視為可執行代碼。
3 設計方案實施
3.1 TMS320LF2407存儲空間配置及CMD文件編寫
為實現程序空間與數據空間共享RAM的存儲器配置方案,首先要熟悉C語言7個存儲段對存儲介質的要求,其具體要求如表1所示。
從表1可以看出:“.bss”、“.sysmem”、“.stack”段的存儲介質必須是RAM,且使用數據空間地址;而“.text”、“. swtich”、“.cinit”段的存儲介質可以是RAM或ROM,但必須使用程序空間地址。“.text”是用來存放應用程序的可執行代碼的專用段,它既可運行在RAM中,也可在Flash中,該段的運行介質決定應用程序是否能夠達到最大性能。根據DSP命令鏈接文件(CMD文件)對匯編段的管理方式可知,“.text”可配置成裝載與運行分離的工作模式。這種模式可以使應用程序存儲在Flash中,運行在RAM中從而實現DSP上電后全速運行。
其次由于存儲空間使用裝載與運行分離的配置模式,因此必須重新設計鏈接文件(CMD文件)。在設計新的CMD文件之前,首先介紹常用的分離配置鏈接命令指示器:“.label”定義一個可重定位代碼段標簽,該標簽表明代碼段內部地址都是相對的,在鏈接時重新定義該段分配的首地址。相應的段地址為“首地址+ 段內偏移地址”。利用該匯編指示器可提供代碼裝載地址。“.global”匯編指示器定義全局符號,該符號表示全局地址,鏈接器利用該匯編指示器定義的運行時全局地址,為程序提供在RAM中運行時的人口地址。“.”匯編指示器表示當前代碼的運行地址,它用來幫助計算運行代碼的長度。在CMD文件中定義可執行代碼的運行時首地址標簽_fun_run和代碼長度標簽_fun_len;在存儲空間配置時定義COPYCODE段用來裝載應用程序的可執行代碼:在存儲空間配置時定義DATA0段做為應用程序可執行代碼段的運行介質。
具體存儲空間配置及CMD文件編寫代碼如下:
3.2 Bootloader裝載器軟件及硬件設計
設計Bootloader裝載器時應注意兩點:首先關閉看門狗,否則可能因為搬移時間過長導致DSP被不斷復位,系統無法正常工作;必須定義 Bootloader裝載器的入口標簽_c_int0和出口標簽wfc_int0,實現Bootloader裝載完成搬移工作后順利進入用戶應用程序。
考慮到DSP上電工作順序:從系統復位指令處跳轉至運行時支持代碼;創建C語言運行環境;用戶程序入口 main();完成用戶初始化及應用代碼。因此負責從Flash將應用程序代碼拷貝到RAM的Bootloader裝載器必須在恰當的時間工作,否則應用程序不能上電自動運行。由DSP上電工作順序可以發現,系統上電復位時的復位地址是,固定的但跳轉指令所指的地址是由用戶指定的,也就是說,可以讓該復位跳轉指令指向所設計的Bootloader裝載器的首地址完成代碼搬移工作(其工作原理見圖1),然后Bootloader裝載器將DSP的控制權交給運行支持庫,完成C語言環境建立并進入用戶程序入口main()開始用戶程序。為此必須對運行支持庫做如下修改:
從運行支持庫rts.rc源文件中提取boot.asm.將boot.asm的入口地址_c_int0修改為wfc_int0地址,重新編譯boot. asm生成boot.obj文件,把boot.obj歸檔到C語言運行支持庫rts.2xx.1ib。將修改后的運行支持庫添加到工程中,實現Boot- loader裝載器先于運行支持庫代碼執行。
Bootloader裝載器利用裝載地址、運行地址以及鏈接器提供的代碼長度等信息,使用讀表指令“TBLR”將代碼從程序空間拷貝到數據空間,然后跳轉到運行支持庫入口地址開始執行程序。DSP的這種搬移指令特點僅適合將數據表從程序空間拷貝到數據空間,要實現全部設計功能必須配合相應的硬件設計,由 TMS320LF2407DSP的存儲器映射結構可以看出程序空間與數據空間是物理分離的,即有3個獨立的空間片選信號PS、DS、CS。為實現RAM共享,首先必須將PS和DS信號進行“與“操作,然后將其輸出信號作為共享RAM的片選信號,實現程序空間與數據空間的統一編址。根據 TMS320LF2407DSP的存儲器映射結構,具體的存儲空間配置如下:0x0000~0x7FFF片上RAM、外設寄存器和保留的地址區,該區域必須作為數據地址使用;利用圖2所示的硬件結構實現0x8000~0xFFFF區域程序空間和數據空間共享RAM。共享RAM配置如下:數據區 0x8000~0xBFFF;程序區0xC000~0xFFFF。
這里的硬件結構配合Bootloader裝載器和特別設計的CMD文件實現了DSP運行速度最大和上電后代碼自動運行,解決了在復雜應用情況下控制系統響應遲緩、通訊異常等問題。
具體Bootloader裝載器設計代碼如下:
4 測試結果
該方案在某型防空武器火力控制分系統的實踐中表現良好。通過提高DSP程序運行效率成功解決了因控制系統實時多任務所導致的通訊異常問題,避免了不必要的硬件升級。經實驗對比發現:當系統有5個毫秒級實時任務同時工作時,采用Flash運行方式的 TTCAN通訊接口每毫秒最多可發送2幀數據,而采用本設計方案每毫秒最多可發送6幀數據,代碼運行效率提高了3倍。
5 結束語
該設計方案不僅成功解決了程序在Flash中運行效率低所導致的各種異常問題,同時還避免了不必要的處理器升級所帶來的成本和開發風險。其設計思想可以推廣到其他類似的應用中,從而最大限度的利用現有硬件基礎提高嵌入式系統的性能。
-
處理器
+關注
關注
68文章
19165瀏覽量
229123 -
dsp
+關注
關注
552文章
7962瀏覽量
348264 -
嵌入式
+關注
關注
5068文章
19019瀏覽量
303265
發布評論請先 登錄
相關推薦
評論