長江大學(xué)電子信息學(xué)院 黃志杰 孫先松
在信息化時代的今天,報刊、廣播、電視和網(wǎng)絡(luò)這些信息媒體已經(jīng)和我們的生活息息相關(guān),而媒體對信息的發(fā)布和傳播已經(jīng)發(fā)揮著至關(guān)重要的作用,而人們的日常生活特別是物聯(lián)網(wǎng)的發(fā)展推動了信息的快速傳播。本設(shè)計采用了ARM8構(gòu)架的S5P6818為主控芯片,利用Linux作為底層的操作系統(tǒng),通過C語言對圖片和音頻的檢索與分組管理,通過mplayer對視頻的播放,實現(xiàn)對信息的傳播應(yīng)用。
信息的傳遞在人們?nèi)粘I钪袩o時無刻都在發(fā)生,在廣告機(jī)出現(xiàn)之前,傳統(tǒng)的廣告展示方法,例如路牌、發(fā)光二極管、卷簾式等內(nèi)容展現(xiàn)單一,沒有立體感,只能被動的傳遞信息,內(nèi)容不具有可替代性,造成資源浪費。嵌入式系統(tǒng)的特殊媒體優(yōu)勢是:多模塊顯示:每個模塊都是相對獨立的,內(nèi)容更新不會影響其它模塊的顯示;功能全面:可以按照用戶的需求進(jìn)行內(nèi)容的搭配顯示;視覺效果豐富:畫面生動形象,立體感強(qiáng);應(yīng)用廣泛:可以配置在酒店、商城、車站、公交車站牌以及娛樂場所。
本系統(tǒng)采用ARM cotex-A53架構(gòu)的S5P6818作為主控芯片,利用Linux作為底層操作系統(tǒng),應(yīng)用C語言來劃分為管理員模式和普通用戶模式進(jìn)行對信息的管理,通過C來操作底層驅(qū)動并對各類信息進(jìn)行相應(yīng)的檢索,把檢索的圖片信息通過LCD呈現(xiàn)出來,把檢索到的音頻信息通過AC97聲卡進(jìn)行播放;最后的視頻是通過Linux下的一款開源多媒體播放器Mplayer進(jìn)行播放。
嵌入式媒體系統(tǒng)由1片大小為256M、型號為K9F2G08的NAND閃存,1片1GB的SDRAM內(nèi)存和1塊800*1024分辨率的7寸電容屏組成。SDRAM采用DDR3接口,有著單通道32位數(shù)據(jù)總線,工作頻率為800MHz。硬件框圖如圖1所示。
圖1 廣告系統(tǒng)的硬件框圖
由于嵌入式系統(tǒng)的資源有限,通常情況下都是在PC機(jī)上完成程序的開發(fā)和測試,但由于目標(biāo)平臺(ARM開發(fā)板)和宿主平臺(LinuxPC機(jī))架構(gòu)不同,導(dǎo)致PC機(jī)上編寫和編譯的程序不能直接在目標(biāo)平臺運行,為了解決此問題,在嵌入式開發(fā)過程中,通常使用交叉編譯工具。本平臺首先要做的是在虛擬機(jī)中安裝Ubuntu18.04操作系統(tǒng),進(jìn)行軟件的開發(fā)時,需要在虛擬機(jī)中設(shè)置一個共享文件夾(此文件夾共享在Windows和Linux系統(tǒng)下),最終在Windows環(huán)境下對C文件進(jìn)行編寫,Linux環(huán)境下編譯以及調(diào)試。
首先在開發(fā)板上要配置Linux的版本為2.6.32,將圖片、音頻、視頻、Mplayer播放器以及交叉編譯的二進(jìn)制文件,通過tftp-g-r傳輸?shù)絼?chuàng)建的gec/huang文件夾下,最后通過指令./文件名,執(zhí)行程序獲得結(jié)果。
本系統(tǒng)包括普通用戶模式和管理員模式。管理員模式可以對開發(fā)板上的音頻、圖片、視頻信息進(jìn)行增加、刪除;普通用戶模式可以播放圖片和對應(yīng)的背景音樂。功能系統(tǒng)設(shè)計流程圖如圖2所示。
圖2 廣告系統(tǒng)軟件設(shè)計框架圖
信息的存儲方式:
Linux操作系統(tǒng)為了更好、更高效地使用內(nèi)存,將實際的物理內(nèi)存進(jìn)行了映射,屏蔽了物理內(nèi)存的具體細(xì)節(jié),有利于簡化程序的編寫和管理。假設(shè)正在使用的計算機(jī)實際物理內(nèi)存大小只有1GB,當(dāng)前系統(tǒng)運行了3個進(jìn)程,Linux會將PM中的部分內(nèi)存映射為3個大小均為4GB的內(nèi)存,讓每個進(jìn)程都擁有了獨立的內(nèi)存空間,極大地擴(kuò)展了數(shù)據(jù)和代碼的內(nèi)存空間。而數(shù)據(jù)是存儲在虛擬內(nèi)存中的內(nèi)核鏈表里,因此ARM開發(fā)板能源源不斷的存放所需要的信息,避免了內(nèi)存不足的問題。Linux的內(nèi)核鏈表的另一個突出優(yōu)點是:由于可以方便地將其標(biāo)準(zhǔn)實現(xiàn)(即“小結(jié)構(gòu)體”)鑲嵌到任意節(jié)點當(dāng)中,因此任何數(shù)據(jù)組成的鏈表的所有操作都被完全統(tǒng)一。另外,即使在代碼維護(hù)過程中要對節(jié)點成員進(jìn)行升級修改,也完全不影響該節(jié)點原有的鏈表結(jié)構(gòu)。既然Linux內(nèi)核鏈表是一種統(tǒng)一且抽象的數(shù)據(jù)結(jié)構(gòu),那么在Linux源碼中就有與之相關(guān)的庫,實現(xiàn)了內(nèi)核鏈表的初始化、插入、刪除、遍歷、移動等功能。
圖3 數(shù)據(jù)存儲狀態(tài)示意圖
內(nèi)核鏈表的整體結(jié)構(gòu)分為數(shù)據(jù)域和指針域兩部分。指針域分為頭指針和尾指針,頭指針指向前一個數(shù)據(jù),尾指針指向下一個數(shù)據(jù);而頭結(jié)點則讓整個鏈表產(chǎn)生循環(huán)關(guān)系。信息存儲在堆空間里的存儲形式如圖3所示。
信息的遞歸檢索:
遞歸是指在函數(shù)的定義中使用函數(shù)自身的方法,遞歸問題可以分解為若干個規(guī)模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決。遞歸檢索的原理如圖4所示。
圖4 遞歸原理
在支持自調(diào)用的編程語言中,遞歸可以通過簡單的函數(shù)調(diào)用來完成,遞歸函數(shù)的數(shù)學(xué)公式如下:
Linux中一切皆文件,可以通過對文件的遞歸索引來提取信息,這里要提到的是遞歸二要素:
明確遞歸的終止條件為檢測文件的后四位.ebm.mp3.avi。
給出遞歸終止時的處理辦法為文件子目錄類型(文件的后綴名長度)為4。
這樣就方便了遞歸檢索。信息檢索結(jié)果如圖5所示。
音視頻播放的實現(xiàn)過程:
在系統(tǒng)IO函數(shù)對LCD屏幕進(jìn)行初始化的過程中,采用了一個非常重要的接口函數(shù)——mmap內(nèi)存映射函數(shù),用于解決顯示圖片時,圖片逐漸顯示完全的問題。每張圖片附加對應(yīng)的背景音樂,于是相鄰圖片的切換,采用Linux的kill-9號信號將后臺的播放器停止,這樣就實現(xiàn)了音頻和視頻對應(yīng)播放的功能。
圖5 廣告系統(tǒng)信息檢索結(jié)果
音視頻的播放采用了MPlayer,其是一款開源的多媒體播放器,以GNU通用公共許可證發(fā)布。此款軟件可在各主流系統(tǒng)使用,例如Linux和其他類Unix系統(tǒng)、微軟的視窗系統(tǒng)及蘋果電腦的Mac OS X系統(tǒng)。MPlayer是基于命令行界面的一款軟件,在各系統(tǒng)可選擇安裝不同的圖形界面。MPlayer的常用指令如:pause(暫停/取消暫停)、mute(靜音開關(guān))和seek value(向前查找到文件的位置播放參數(shù)value為秒數(shù))等。播放效果如圖6所示。
圖6 播放效果展示
總結(jié):本文以實現(xiàn)廣告機(jī)功能為主要目標(biāo),在對現(xiàn)有的廣告技術(shù)進(jìn)行深入探究的基礎(chǔ)上,利用嵌入式精簡小巧的特點,設(shè)計了一個成本較低,界面豐富的廣告機(jī)系統(tǒng)??梢赃M(jìn)一步的簡化人們獲取信息的方式,方便人們的日常。整個系統(tǒng)由多個C語言模塊實現(xiàn),基于Linux的各種底層系統(tǒng)IO函數(shù)來操作ARM開發(fā)板,最后通過網(wǎng)絡(luò)傳輸將交叉編譯的文件傳輸?shù)介_發(fā)板中,實現(xiàn)圖片、音頻和視頻的播放。