作者:方芳 張?zhí)?孫建成 來源:電子產(chǎn)品世界
在DSP的開發(fā)過程中,開發(fā)者難免會遇到DSP芯片內(nèi)部存儲器和片外擴展存儲器的配置等問題。本文以TMS320C54x系列DSP為例,討論DSP存儲空間的分配問題。
存儲器空間
'C54x系列DSP存儲器分為三個獨立選擇的空間—程序、數(shù)據(jù)和I/O,其中程序存儲器存放待執(zhí)行的指令和執(zhí)行中所用的系數(shù)(常數(shù)),可使用片內(nèi)或片外的RAM、ROM或EPROM等來構(gòu)成;數(shù)據(jù)存儲器存放指令執(zhí)行中產(chǎn)生的數(shù)據(jù),可使用片內(nèi)或片外的RAM和ROM來構(gòu)成。I/O存儲器存放與映象外圍接口相關(guān)的數(shù)據(jù),也可以作為附加的數(shù)據(jù)存儲空間使用。這三個空間的尋址范圍取決于DSP芯片地址線數(shù)目。例如,'C54x系列 DSP 從'C548開始,芯片有23根地址線,具有8M字節(jié)存儲空間尋址能力。
'C54x通過包含在處理器工作方式的狀態(tài)寄存器(PMST)中的3個狀態(tài)位,選擇片內(nèi)存儲器作為程序空間或數(shù)據(jù)空間。這3個狀態(tài)位是:
(1)MP/MC位。MP/MC=0,則片內(nèi)ROM安排到程序空間;MP/MC=1,則片內(nèi)ROM不安排到程序空間。
(2)OVLY位。OVLY=1,則片內(nèi)RAM安排到程序和數(shù)據(jù)空間;OVLY=0,則片內(nèi)RAM只安排到數(shù)據(jù)存儲空間。
(3)DROM位。當DROM=1,則部分片內(nèi)ROM安排到數(shù)據(jù)空間;DROM=0,則片內(nèi)ROM不安排到數(shù)據(jù)空間。
程序設(shè)計者可根據(jù)不同的需求,相應的配置這3個位,使系統(tǒng)的存儲空間滿足應用要求。同時,為了擴展'C54x系列DSP的尋址空間,還增加了一個額外的存儲器映像寄存器—程序計數(shù)器擴展寄存器XPC,以及6條尋址擴展程序空間的指令。以TMS320C5410為例,它的程序空間分成128頁面,每頁64K字。該64K字程序空間分為兩部分:一部分是公共的32K字,另一部分是各自獨立的32K字。公共存儲器為所有頁面共享,每個頁面獨立的32K字存儲器只能按指定的頁面號尋址,這個頁面號由XPC寄存器設(shè)定。
'C54x系列的程序空間、數(shù)據(jù)空間和I/O空間的配置方式圖略(詳見《電子產(chǎn)品世界》2003.1)。
'C5410片內(nèi)有64Kx16bit的RAM,16Kx16bit的ROM,其中64K RAM分為4x2K字的雙尋址RAM(DARAM)和7x8K字的單尋址RAM(SARAM)。
編寫cmd文件
TI 公司新的匯編器和鏈接器創(chuàng)建的目標文件采用一種 COFF(通用目標文件格式),該目標文件格式更利于模塊化編程, 為管理代碼段和目標系統(tǒng)存儲器提供了強有力和靈活的編程方法。讀者可以通過編寫鏈接命令文件 (.cmd 文件)將鏈接信息放在一個文件中,以便在多次使用同樣的鏈接信息時調(diào)用。在命令文件中使用兩個十分有用的偽指令MEMORY 和 SECTIONS,來指定實際應用中的存儲器結(jié)構(gòu)和進行地址的映射。Memory 用來指定目標存儲器結(jié)構(gòu),SECTIONS用來控制段的構(gòu)成與地址分配。需要說明的是:
(1)COFF文件格式在用匯編語言或高級語言編程時使用基于代碼塊和數(shù)據(jù)塊的概念,而不是一條條命令或一個個數(shù)據(jù)。
(2)代碼生成工具中,除編譯器和鏈接器外,TI還提供了可將C語言編譯為匯編語言程序的C編譯器。
查看段的分配及使用情況
在cmd文件中包括各種各樣的鏈接器選項,每種選項代表不同的含義。其中,使用-m選項可以創(chuàng)建一個擴展名為.map的鏈接器(存儲器)分配映射文件。其語法為
-m filename (文件名)
鏈接器的map文件描述以下內(nèi)容:
*存儲器結(jié)構(gòu)
*輸入和輸出段的定位
*在重新定位后外部符號的地址
通過map文件可以查看各段的分配情況,包括段的起始地址,使用的字節(jié)數(shù)等。配合cmd文件的使用,可確定各個段的使用情況,從而保證程序的正常運行和最小的空間使用。
不同的DSP芯片內(nèi)集成的存儲器大小各異,但其配置方式是類似的。讀者可通過查閱DSP芯片的數(shù)據(jù)手冊,了解芯片內(nèi)部存儲空間大小。
在實際的配置過程中,可根據(jù)開發(fā)程序的實際代碼,正確的劃分程序和數(shù)據(jù)空間中各段的大小,使其空間配置達到最優(yōu)