Linux下Cold Fire 片內SRAM的應用程序優化設計
本文以MP3解碼器為例,介紹了一種在嵌入式Linux系統下配置使用處理器片內SRAM的應用方案,有效提高了代碼的解碼效率,降低了執行功耗。該方案不論在性能還是成本上都得到了很大改善。
1 硬件平臺和軟件架構
硬件平臺采用Freescale公司的MCF5329EVB開發板。終端硬件包括ColdFire5329處理器、32 KB的片內SRAM、1 800×600矩陣LCD顯示屏、9×3陣列矩陣鍵盤、I2S音頻解碼芯片、64 MB的SDRAM、10/100M以太網接口,以及3個UART接口。軟件構架如圖1所示,主要包括MP3解碼器、音頻驅動、鍵盤驅動和用戶圖形界面(GUI)等模塊。采用μClinux作為操作系統。μClinux針對嵌入式應用的特點作了較大的簡化和修改,支持多種文件系統和多任務處理,而且具有相對完整的網絡體系協議,因而特別適合嵌入式應用。
2 MP3解碼算法分析
本文選用MP3解碼程序作為方案驗證代碼。MPEG-1/2 Audio Layer 3是專門針對音樂和語音數據設計的有損壓縮算法。該算法的解碼過程比較復雜,主要包括反向修正離散余弦變換(IMDCT)、逆量化、Huffman解碼、子帶綜合等功能模塊。讀入一段MP3數據后,首先要檢測數據流中的同步字,以確定一幀數據的開始;然后提取幀頭信息,特別是解碼所需要的一些參數,同時分離出幀邊信息和主數據;之后對邊信息數據解碼得到Huffman解碼信息和逆量化信息,再經過重新排序、立體聲處理、反混疊處理、IMDCT變換和子帶綜合濾波器組后,就可以得到PCM輸出。
MP3解碼流程如圖2所示。大致分為兩個階段,即數據流控制階段和數值計算階段。數據流控制階段包括幀同步、邊帶信息解碼和Huffman解壓縮等過程。其中,Huffman解壓縮是對編碼數據進行操作,其他過程則是對幀控制部分進行操作。
3 基于片內SRAM的優化設計方案
3.1 方案分析
SRAM指令執行速度要比DRAM快得多。Cold-Fire5329處理器內部集成了32 KB的SRAM,本設計方案將充分利用處理器片內SRAM來對解碼程序進行優化。首先對源代碼中的主要解碼函數進行分析,如表1所列。可以看到驅動寫函數(write)、子帶綜合(MPEGSUB_synthesis)、反向修正離散余弦變換(imdct_I)和快速離散余弦變換(fast_dct)對處理器資源消耗較大,幾乎占用80%的解碼時間。根據分析結果,分別把音頻驅動程序和上述解碼函數放進SRAM中執行,以提高流媒體解碼器的執行速度,降低其對處理器資源的消耗。
3.2 配置音頻驅動程序到片內SRAM中執行
Linux操作系統把內核和運行在其上的應用程序分成兩個管理層次,也就是常說的“內核態”和“用戶態”。內核態具有較高的應用權限,可以控制處理器內存的映射和分配方式。音頻驅動程序是系統內核的重要組成部分,工作在內核態,實現不斷從用戶空間解碼文件中讀取音頻信息,以及驅動音頻芯片播放聲音等相關功能。通過修改μClinux-2.6內核代碼,可以將音頻驅動程序配置到片內SRAM中執行,主要通過修改系統鏈接文件來實現。系統鏈接文件用于將輸入文件根據一定的規則合并成一個輸出文件,并對符號與地址進行綁定。
評論