新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > S3C2410和Linux的電影列表系統設計

        S3C2410和Linux的電影列表系統設計

        作者: 時間:2018-09-04 來源:網絡 收藏

        摘要:隨著數字信息技術和網絡技術的高速發展,建立在其基礎上的也已經廣泛應用于人們生活、工作的各個領域。本文介紹了基于S3C2410和嵌入式Linux操作系統的系統設計的實現過程。該系統基于嵌入式開發平臺搭建,以實現對JPEG格式圖片、文字的各種效果顯示和外設鼠標的控制等。

        本文引用地址:http://www.104case.com/article/201809/388328.htm

        引言

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

        1 系統環境的選擇與配置

        1.1 系統軟硬件平臺選擇

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

        Linux操作系統作為系統開發環境,嵌入式ARM系列微處理器和嵌入式Linux操作系統作為系統運行平臺。

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

        1.2 編譯器的選擇與配置

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

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

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

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

        2 ARM9嵌入式電影列表軟件設計

        在本系統中主要完成的任務是對所存在的電影信息的目錄進行檢索,通過解析生成電影節目菜單,將其可用信息主要以圖片和文字的方式通過列表的形式顯示出來,給用戶一個直觀的操作界面,以獲取節目的有用信息。

        2.1 初始化

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

        2.2 圖片顯示

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

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

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

        2.3 文字顯示

        在Linux下顯示文字使用FreeType庫。FreeType庫是采用面向對象的思想高度模塊化的程序庫,是一個開源的、高質量可移植的字體引擎。它提供了統一的接口來訪問多種字體格式文件,包括TrueType、OpenType、Type1、CID、CFF、Windows  FON/FNT、X11  PCF等。本系統采用點陣的方式顯示字體,即要先取得漢字的點陣表示形式,然后根據點陣中每一位是否為1來決定是否對屏幕上相應的像素賦值。FreeType庫里保存字體屬性的結構體FT_Bitmap,包括位圖行、列、每行所占字節數等信息。對FreeType庫的使用步驟如下:

        2.4

        目前最常見的鼠標有PS/2鼠標和USB鼠標。但就應用層去看這兩種鼠標其實沒有太大的區別,PS/2鼠標有4種工作模式:復位模式、流模式、遙控模式、檢測模式。流模式是默認的工作模式,在流模式下鼠標的任何動作都會報告給主機。

        (1)鼠標的解析與繪制

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

        實現鼠標解析的主要代碼如下:

        通過上述對鼠標協議數據的解析,獲取鼠標的按鍵事件和x、y方向的相對增量,只要聲明一組變量,用來累加dx、dy即可獲取鼠標在屏幕的絕對坐標。

        鼠標的繪制首先需要定義一個鼠標的標志。在屏幕上繪制鼠標標志前,先保存屏幕相應位置(鼠標標志大小)的原有圖像,而后再繪制鼠標的標志。當鼠標移動到一個新位置時,在原來位置就可以根據保存的原有圖像恢復,而在新的位置繼續重復保存、繪制即可。

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

        以按鈕A事件為例,其主要實現代碼如下:

        通過解析的鼠標信息。判斷D0,即左鍵的按鍵信息,當為1時,表明左鍵按下,這時可以通過鼠標是否按下的狀態,調用相應的功能。

        3 系統實現

        本系統主界面包括系統時間的顯示、電影海報排列、電影名、翻頁和結束按鈕,如圖1所示。點擊翻頁按鈕,可以進入下一頁電影節目。點擊電影海報圖片進入該影片的介紹欄,顯示該電影的詳細介紹,如圖2所示。點擊結束按鈕,程序進入退出界面,3  s以后程序結束。

        結語

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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 九寨沟县| 绩溪县| 宝兴县| 景洪市| 武冈市| 章丘市| 亚东县| 灌云县| 崇州市| 本溪| 扎鲁特旗| 新建县| 乐昌市| 泌阳县| 博白县| 郁南县| 墨玉县| 宜州市| 谷城县| 上栗县| 乌拉特中旗| 延安市| 南阳市| 任丘市| 中宁县| 河源市| 慈溪市| 延安市| 华安县| 错那县| 绥芬河市| 灵寿县| 枞阳县| 阿勒泰市| 岳池县| 民勤县| 阜城县| 尚志市| 灌阳县| 措勤县| 锦屏县|