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