新聞中心

EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > S3C2410和Linux的電影列表系統(tǒng)設(shè)計(jì)

S3C2410和Linux的電影列表系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2018-09-04 來(lái)源:網(wǎng)絡(luò) 收藏

摘要:隨著數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,建立在其基礎(chǔ)上的也已經(jīng)廣泛應(yīng)用于人們生活、工作的各個(gè)領(lǐng)域。本文介紹了基于S3C2410和嵌入式Linux操作系統(tǒng)的系統(tǒng)設(shè)計(jì)的實(shí)現(xiàn)過(guò)程。該系統(tǒng)基于嵌入式開發(fā)平臺(tái)搭建,以實(shí)現(xiàn)對(duì)JPEG格式圖片、文字的各種效果顯示和外設(shè)鼠標(biāo)的控制等。

本文引用地址:http://m.butianyuan.cn/article/201809/388328.htm

引言

隨著新媒體的進(jìn)步,網(wǎng)絡(luò)媒體產(chǎn)品的日益發(fā)展,互聯(lián)網(wǎng)將“顛覆”電視的傳統(tǒng)地位。新媒體提供了豐富的媒體形態(tài)和多樣化的收視方式,如點(diǎn)播、回看、下載等,使其有了交互功能和更長(zhǎng)的生命周期。因此,交互式網(wǎng)絡(luò)電視(IPTV)的出現(xiàn)是必然的結(jié)果。是IPTV中數(shù)字多媒體內(nèi)容最為關(guān)鍵的節(jié)目來(lái)源,即電視節(jié)目導(dǎo)航系統(tǒng),主要用來(lái)描述提供給電視觀眾的所有節(jié)目的信息,是構(gòu)成交互電視的重要技術(shù)之一。在IPTV業(yè)務(wù)中,用戶可通過(guò)功能來(lái)了解電視電影節(jié)目的名稱、播放時(shí)間和內(nèi)容梗概等相關(guān)信息,并實(shí)現(xiàn)對(duì)節(jié)目的快速檢索和訪問(wèn),進(jìn)行頻道選擇或視頻點(diǎn)播等操作。

1 系統(tǒng)環(huán)境的選擇與配置

1.1 系統(tǒng)軟硬件平臺(tái)選擇

是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積和功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶應(yīng)用程序4部分組成。本系統(tǒng)選擇x86處理器和

Linux操作系統(tǒng)作為系統(tǒng)開發(fā)環(huán)境,嵌入式ARM系列微處理器和嵌入式Linux操作系統(tǒng)作為系統(tǒng)運(yùn)行平臺(tái)。

作為學(xué)校實(shí)驗(yàn)室開放基金項(xiàng)目,本系統(tǒng)選擇學(xué)院實(shí)驗(yàn)室已有的JXARM9-2410教學(xué)實(shí)驗(yàn)系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。JXARM9-2410實(shí)驗(yàn)箱采用三星公司的S3C2410微處理器,是一款為手持設(shè)備設(shè)計(jì)的低功耗、高集成度的基于ARM920T核的微處理器。它集成了外部存儲(chǔ)器控制器、LCD控制器、ADC和觸摸屏接口等,現(xiàn)在廣泛應(yīng)用于PDA、移動(dòng)通信、路由器、工業(yè)控制等領(lǐng)域。常見的通用型嵌入式操作系統(tǒng)有Linux、VxWorks、Win  dows  CE等。Linux是以Unix為基礎(chǔ)發(fā)展而成的操作系統(tǒng),能夠支持ARM、MIPS、ALPHA、x86、PowerPC等多種系列的嵌入式微處理器。Linux操作系統(tǒng)最大的特性就是開源性和可裁剪性,除此之外,Linux操作系統(tǒng)還有內(nèi)核高效穩(wěn)定、良好的可移植性、支持多種文件系統(tǒng)等優(yōu)點(diǎn),有利于Linux在嵌入式設(shè)備中的應(yīng)用。

1.2 編譯器的選擇與配置

本系統(tǒng)選用C語(yǔ)言編寫源碼、編譯生成在ARM平臺(tái)上的程序,因此需要在Linux環(huán)境下安裝標(biāo)準(zhǔn)的C開發(fā)環(huán)境和交叉編譯器arm-linux-gcc。使用命令sudo  apt-getinstall gcc g++ libgccl libg++make gdb安裝C開發(fā)環(huán)境。安裝交叉編譯器步驟如下:

①下載編譯器源文件arm-linux-gcc-3.4.1.tar.bz2,使用tar命令進(jìn)行解壓此文件。

②將解壓后形成的arm文件夾拷貝到usr/local/目錄下,現(xiàn)在交叉編譯程序集都在/usr/local/arm/3.4.1/bin目錄下。

③修改環(huán)境變量,把交叉編譯器的路徑加入到PATH中,并使用命令source/root/.bashrc使新的環(huán)境變量生效。

2 ARM9嵌入式電影列表軟件設(shè)計(jì)

在本系統(tǒng)中主要完成的任務(wù)是對(duì)所存在的電影信息的目錄進(jìn)行檢索,通過(guò)解析生成電影節(jié)目菜單,將其可用信息主要以圖片和文字的方式通過(guò)列表的形式顯示出來(lái),給用戶一個(gè)直觀的操作界面,以獲取節(jié)目的有用信息。

2.1 初始化

(幀緩沖)是Linux內(nèi)核的一種圖形設(shè)備驅(qū)動(dòng)接口,提供了LCD控制器的抽象性描述。它將LCD控制器上的顯存抽象成一種字符設(shè)備,應(yīng)用程序通過(guò)定義好的接口可以訪問(wèn)LCD控制器的顯存,直接對(duì)顯示緩沖區(qū)進(jìn)行讀/寫操作。用戶只需要直接向Framebuffer顯示緩沖區(qū)寫入數(shù)據(jù)就可以更新顯示屏的輸出。Framebuffer的設(shè)備文件一般是/dev/fb0、/dev/fb1等,其使用方法如下:

2.2 圖片顯示

本系統(tǒng)使用Libjpeg庫(kù)在Linux下顯示圖片。Libjpeg是一個(gè)被廣泛使用的jpeg壓縮/解壓縮函數(shù)庫(kù),它能夠讀寫JPEG格式的圖像文件,通常這類文件是以.jpg或者.jpeg為后綴名的。通過(guò)Libjpeg庫(kù),應(yīng)用程序可以每次從jpeg壓縮圖像中讀取一個(gè)或多個(gè)掃描線,而諸如顏色空間轉(zhuǎn)換、降采樣/增采樣、顏色量化等由Libjpeg完成。對(duì)于Libjpeg而言,圖像數(shù)據(jù)是一個(gè)二維的像素矩陣。對(duì)于彩色圖像,每個(gè)像素通常用三個(gè)分量表示,即R、G、B三個(gè)分量,每個(gè)分量用一個(gè)字節(jié)表示,因此每個(gè)分量的取值范圍為0~255;對(duì)于灰度圖像,每個(gè)像素通常用一個(gè)分量表示,一個(gè)分量同樣由一個(gè)字節(jié)表示,取值范圍為0~255。因此,本系統(tǒng)中只要將系統(tǒng)中需要顯示的JPEG圖片進(jìn)行解碼為bmp像素點(diǎn),再通過(guò)Framebuffer設(shè)備寫入應(yīng)用程序空間就可以實(shí)現(xiàn)圖片的顯示。通過(guò)Libjpeg對(duì)JPEG圖片進(jìn)行解碼的過(guò)程如下:

調(diào)用jpeg_start_decompress()函數(shù)之后需要為解壓后的掃描線上的所有像素點(diǎn)分配存儲(chǔ)空間,這個(gè)空間的大小由圖像輸出的寬度、高度和每個(gè)像素的字節(jié)數(shù)決定。JPEG解壓縮對(duì)象cinfo中output_width和output_height分別表示圖像輸出的寬度和高度,output_components表示字節(jié)數(shù)。

對(duì)掃描線的讀取是按照從上到下的順序進(jìn)行的,即圖像最上方的掃描線最先被jpeg_read_scanlines()讀入存儲(chǔ)空間中,緊接著是第二個(gè)掃描線,最后是圖像底邊的掃描線被讀入存儲(chǔ)空間中。

2.3 文字顯示

在Linux下顯示文字使用FreeType庫(kù)。FreeType庫(kù)是采用面向?qū)ο蟮乃枷敫叨饶K化的程序庫(kù),是一個(gè)開源的、高質(zhì)量可移植的字體引擎。它提供了統(tǒng)一的接口來(lái)訪問(wèn)多種字體格式文件,包括TrueType、OpenType、Type1、CID、CFF、Windows  FON/FNT、X11  PCF等。本系統(tǒng)采用點(diǎn)陣的方式顯示字體,即要先取得漢字的點(diǎn)陣表示形式,然后根據(jù)點(diǎn)陣中每一位是否為1來(lái)決定是否對(duì)屏幕上相應(yīng)的像素賦值。FreeType庫(kù)里保存字體屬性的結(jié)構(gòu)體FT_Bitmap,包括位圖行、列、每行所占字節(jié)數(shù)等信息。對(duì)FreeType庫(kù)的使用步驟如下:

2.4

目前最常見的鼠標(biāo)有PS/2鼠標(biāo)和USB鼠標(biāo)。但就應(yīng)用層去看這兩種鼠標(biāo)其實(shí)沒有太大的區(qū)別,PS/2鼠標(biāo)有4種工作模式:復(fù)位模式、流模式、遙控模式、檢測(cè)模式。流模式是默認(rèn)的工作模式,在流模式下鼠標(biāo)的任何動(dòng)作都會(huì)報(bào)告給主機(jī)。

(1)鼠標(biāo)的解析與繪制

鼠標(biāo)的設(shè)備文件為/dev/input/mice。當(dāng)鼠標(biāo)有動(dòng)作(移動(dòng)、按鍵、滾軸)的時(shí)候可以通過(guò)cat/dev/input/mice命令,獲得動(dòng)作數(shù)據(jù)并顯示在屏幕上。但多數(shù)是亂碼,原因是讀到的鼠標(biāo)動(dòng)作數(shù)據(jù),不一定是0~127的可見字符。

實(shí)現(xiàn)鼠標(biāo)解析的主要代碼如下:

通過(guò)上述對(duì)鼠標(biāo)協(xié)議數(shù)據(jù)的解析,獲取鼠標(biāo)的按鍵事件和x、y方向的相對(duì)增量,只要聲明一組變量,用來(lái)累加dx、dy即可獲取鼠標(biāo)在屏幕的絕對(duì)坐標(biāo)。

鼠標(biāo)的繪制首先需要定義一個(gè)鼠標(biāo)的標(biāo)志。在屏幕上繪制鼠標(biāo)標(biāo)志前,先保存屏幕相應(yīng)位置(鼠標(biāo)標(biāo)志大小)的原有圖像,而后再繪制鼠標(biāo)的標(biāo)志。當(dāng)鼠標(biāo)移動(dòng)到一個(gè)新位置時(shí),在原來(lái)位置就可以根據(jù)保存的原有圖像恢復(fù),而在新的位置繼續(xù)重復(fù)保存、繪制即可。

(2)鼠標(biāo)的按鍵事件控制

以按鈕A事件為例,其主要實(shí)現(xiàn)代碼如下:

通過(guò)解析的鼠標(biāo)信息。判斷D0,即左鍵的按鍵信息,當(dāng)為1時(shí),表明左鍵按下,這時(shí)可以通過(guò)鼠標(biāo)是否按下的狀態(tài),調(diào)用相應(yīng)的功能。

3 系統(tǒng)實(shí)現(xiàn)

本系統(tǒng)主界面包括系統(tǒng)時(shí)間的顯示、電影海報(bào)排列、電影名、翻頁(yè)和結(jié)束按鈕,如圖1所示。點(diǎn)擊翻頁(yè)按鈕,可以進(jìn)入下一頁(yè)電影節(jié)目。點(diǎn)擊電影海報(bào)圖片進(jìn)入該影片的介紹欄,顯示該電影的詳細(xì)介紹,如圖2所示。點(diǎn)擊結(jié)束按鈕,程序進(jìn)入退出界面,3  s以后程序結(jié)束。

結(jié)語(yǔ)

本文主要介紹了在Linux操作系統(tǒng)下采用JXARM9-2410教學(xué)實(shí)驗(yàn)箱設(shè)計(jì)實(shí)現(xiàn)的電影列表產(chǎn)品。本系統(tǒng)實(shí)現(xiàn)了圖片和文字的顯示、鼠標(biāo)按鍵事件等功能,已經(jīng)完成了電影列表的基本功能。按鈕事件的實(shí)現(xiàn)為系統(tǒng)提供了交互功能,為后面IPTV的進(jìn)一步制作奠定了基礎(chǔ)。對(duì)于本系統(tǒng)后續(xù)研究設(shè)計(jì),仍有可以進(jìn)一步擴(kuò)展和改進(jìn)的地方,例如可以在本系統(tǒng)上擴(kuò)展USB功能、網(wǎng)絡(luò)通信功能和觸摸屏功能等,以進(jìn)一步完善上層操作界面的設(shè)計(jì)。作為學(xué)校實(shí)驗(yàn)室開放基金項(xiàng)目,本系統(tǒng)的實(shí)現(xiàn)與完成也給學(xué)院提供了更多的專業(yè)教學(xué)資料,有利于激勵(lì)本專業(yè)學(xué)生的學(xué)習(xí)積極性,提高教學(xué)質(zhì)量和水平。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉