長江大學電子信息學院 黃志杰 孫先松
在信息化時代的今天,報刊、廣播、電視和網絡這些信息媒體已經和我們的生活息息相關,而媒體對信息的發布和傳播已經發揮著至關重要的作用,而人們的日常生活特別是物聯網的發展推動了信息的快速傳播。本設計采用了ARM8構架的S5P6818為主控芯片,利用Linux作為底層的操作系統,通過C語言對圖片和音頻的檢索與分組管理,通過mplayer對視頻的播放,實現對信息的傳播應用。
信息的傳遞在人們日常生活中無時無刻都在發生,在廣告機出現之前,傳統的廣告展示方法,例如路牌、發光二極管、卷簾式等內容展現單一,沒有立體感,只能被動的傳遞信息,內容不具有可替代性,造成資源浪費。嵌入式系統的特殊媒體優勢是:多模塊顯示:每個模塊都是相對獨立的,內容更新不會影響其它模塊的顯示;功能全面:可以按照用戶的需求進行內容的搭配顯示;視覺效果豐富:畫面生動形象,立體感強;應用廣泛:可以配置在酒店、商城、車站、公交車站牌以及娛樂場所。
本系統采用ARM cotex-A53架構的S5P6818作為主控芯片,利用Linux作為底層操作系統,應用C語言來劃分為管理員模式和普通用戶模式進行對信息的管理,通過C來操作底層驅動并對各類信息進行相應的檢索,把檢索的圖片信息通過LCD呈現出來,把檢索到的音頻信息通過AC97聲卡進行播放;最后的視頻是通過Linux下的一款開源多媒體播放器Mplayer進行播放。
嵌入式媒體系統由1片大小為256M、型號為K9F2G08的NAND閃存,1片1GB的SDRAM內存和1塊800*1024分辨率的7寸電容屏組成。SDRAM采用DDR3接口,有著單通道32位數據總線,工作頻率為800MHz。硬件框圖如圖1所示。

圖1 廣告系統的硬件框圖
由于嵌入式系統的資源有限,通常情況下都是在PC機上完成程序的開發和測試,但由于目標平臺(ARM開發板)和宿主平臺(LinuxPC機)架構不同,導致PC機上編寫和編譯的程序不能直接在目標平臺運行,為了解決此問題,在嵌入式開發過程中,通常使用交叉編譯工具。本平臺首先要做的是在虛擬機中安裝Ubuntu18.04操作系統,進行軟件的開發時,需要在虛擬機中設置一個共享文件夾(此文件夾共享在Windows和Linux系統下),最終在Windows環境下對C文件進行編寫,Linux環境下編譯以及調試。
首先在開發板上要配置Linux的版本為2.6.32,將圖片、音頻、視頻、Mplayer播放器以及交叉編譯的二進制文件,通過tftp-g-r傳輸到創建的gec/huang文件夾下,最后通過指令./文件名,執行程序獲得結果。
本系統包括普通用戶模式和管理員模式。管理員模式可以對開發板上的音頻、圖片、視頻信息進行增加、刪除;普通用戶模式可以播放圖片和對應的背景音樂。功能系統設計流程圖如圖2所示。

圖2 廣告系統軟件設計框架圖
信息的存儲方式:
Linux操作系統為了更好、更高效地使用內存,將實際的物理內存進行了映射,屏蔽了物理內存的具體細節,有利于簡化程序的編寫和管理。假設正在使用的計算機實際物理內存大小只有1GB,當前系統運行了3個進程,Linux會將PM中的部分內存映射為3個大小均為4GB的內存,讓每個進程都擁有了獨立的內存空間,極大地擴展了數據和代碼的內存空間。而數據是存儲在虛擬內存中的內核鏈表里,因此ARM開發板能源源不斷的存放所需要的信息,避免了內存不足的問題。Linux的內核鏈表的另一個突出優點是:由于可以方便地將其標準實現(即“小結構體”)鑲嵌到任意節點當中,因此任何數據組成的鏈表的所有操作都被完全統一。另外,即使在代碼維護過程中要對節點成員進行升級修改,也完全不影響該節點原有的鏈表結構。既然Linux內核鏈表是一種統一且抽象的數據結構,那么在Linux源碼中就有與之相關的庫,實現了內核鏈表的初始化、插入、刪除、遍歷、移動等功能。

圖3 數據存儲狀態示意圖
內核鏈表的整體結構分為數據域和指針域兩部分。指針域分為頭指針和尾指針,頭指針指向前一個數據,尾指針指向下一個數據;而頭結點則讓整個鏈表產生循環關系。信息存儲在堆空間里的存儲形式如圖3所示。
信息的遞歸檢索:
遞歸是指在函數的定義中使用函數自身的方法,遞歸問題可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決。遞歸檢索的原理如圖4所示。

圖4 遞歸原理
在支持自調用的編程語言中,遞歸可以通過簡單的函數調用來完成,遞歸函數的數學公式如下:

Linux中一切皆文件,可以通過對文件的遞歸索引來提取信息,這里要提到的是遞歸二要素:
明確遞歸的終止條件為檢測文件的后四位.ebm.mp3.avi。
給出遞歸終止時的處理辦法為文件子目錄類型(文件的后綴名長度)為4。
這樣就方便了遞歸檢索。信息檢索結果如圖5所示。
音視頻播放的實現過程:
在系統IO函數對LCD屏幕進行初始化的過程中,采用了一個非常重要的接口函數——mmap內存映射函數,用于解決顯示圖片時,圖片逐漸顯示完全的問題。每張圖片附加對應的背景音樂,于是相鄰圖片的切換,采用Linux的kill-9號信號將后臺的播放器停止,這樣就實現了音頻和視頻對應播放的功能。

圖5 廣告系統信息檢索結果
音視頻的播放采用了MPlayer,其是一款開源的多媒體播放器,以GNU通用公共許可證發布。此款軟件可在各主流系統使用,例如Linux和其他類Unix系統、微軟的視窗系統及蘋果電腦的Mac OS X系統。MPlayer是基于命令行界面的一款軟件,在各系統可選擇安裝不同的圖形界面。MPlayer的常用指令如:pause(暫停/取消暫停)、mute(靜音開關)和seek value(向前查找到文件的位置播放參數value為秒數)等。播放效果如圖6所示。

圖6 播放效果展示
總結:本文以實現廣告機功能為主要目標,在對現有的廣告技術進行深入探究的基礎上,利用嵌入式精簡小巧的特點,設計了一個成本較低,界面豐富的廣告機系統??梢赃M一步的簡化人們獲取信息的方式,方便人們的日常。整個系統由多個C語言模塊實現,基于Linux的各種底層系統IO函數來操作ARM開發板,最后通過網絡傳輸將交叉編譯的文件傳輸到開發板中,實現圖片、音頻和視頻的播放。