www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]嵌入式Linux下基于MiniGUI的信息終端軟件開發(fā)

摘要:嵌入式系統(tǒng)的開發(fā)已成為新的行業(yè)熱點。本文首先概述嵌入式Linux系統(tǒng)開發(fā)的特點及其工具,然后具體描述MiniGUI圖形系統(tǒng)的移植、使用方法,并舉例說明在該系統(tǒng)上開始信息終端軟件的過程。該方案有很大的應用前景。

    關鍵詞:嵌入式操作系統(tǒng) Linux MiniGUI 信息終端

引言

近年來,隨著軟硬件資源的成熟與完善,嵌入式技術越來越和人們的生活緊密相關,功能單一的公用電話也開始向嵌入式多媒體信息終端轉(zhuǎn)型。對嵌入式系統(tǒng)的研究,在全球激起了人們極大的興趣。

選擇開放源碼的Linux操作系統(tǒng)開發(fā)新一代嵌入式產(chǎn)品已經(jīng)成為其中新的技術熱點。在本系統(tǒng)中,采用了MontaVista Linux系統(tǒng)。它提供了很多處理器、目標板和主機環(huán)境的組合,有一套完整的輔助開發(fā)工具,便于嵌入式系統(tǒng)專用人員設計、開發(fā)和發(fā)布應用程序。

與此同時,配備一個優(yōu)秀的圖形用戶界面,使產(chǎn)品和用戶能進行友善可靠的交互也已成為開發(fā)工作中非常緊迫的要求。本系統(tǒng)中使用的MiniGUI就是嵌入式Linux系統(tǒng)下一個輕量級的圖形用戶界面支持系統(tǒng),目前已比較成熟,并已被用到很多項目的實際開發(fā)中。

1 嵌入式Linux系統(tǒng)

嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,并且軟硬件可裁減。適用于用戶系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。從20世紀80年代末開始,陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng),如VxWorks、pSOS、WindowsCE、Linux等。其中免費源代碼的Linux操作系統(tǒng)因其內(nèi)核小、支持多種硬件平臺、可裁減性好等顯著優(yōu)點,得到了廣泛的關注,為嵌入式系統(tǒng)開發(fā)提供了一個極有力的選擇。

(2)MontaVista Linux

目前,已有多家公司推出了嵌入式Linux發(fā)行版本。本系統(tǒng)中采用的是應用全球三大嵌入式Linux供應商之一MontaVista Software公司的最新版MontaVista Linux3.0。它使用的是最標準Linux內(nèi)核2.4.2,是針對嵌入式設備度身定制的實時的、專業(yè)的嵌入式操作系統(tǒng)??紤]到嵌入式設備處理器、存儲器資源有限的情況,在不減少新內(nèi)核對嵌入設備有利特性的基礎上,MontaVista公司對內(nèi)核部分進行了高度裁減、配置,使MontaVista Linux 3.0。它使用的是標準Linux內(nèi)核2.4.2,是針對嵌入式設備度身定制的實時的、專業(yè)的嵌入式操作系統(tǒng)??紤]到嵌入式設備處理器、存儲器資源有限的情況,在不減少新內(nèi)核對嵌入設備有利特性的基礎上,MontaVista公司對內(nèi)核部分進行了高度裁減、配置,使MontaVista Linux 3.0系統(tǒng)性能具備穩(wěn)定、突出等特點,同時還為MontaVista Linux 3.0配備了一個由優(yōu)先級驅(qū)動的實時調(diào)度器(RealTime Scheduler),從而使客戶對實時性的要求得到更大的滿足。

2 軟件開發(fā)平臺

MontaVista Software公司在嵌入式Linux發(fā)行版中已提供了系統(tǒng)開發(fā)所需的環(huán)境:

a)內(nèi)核和文件系統(tǒng)工具——目標配置工具(TCT)、庫優(yōu)化工具(LOT);

b)交叉開發(fā)工具——GNU GCC/C++編譯器、GDB源碼調(diào)試器、DDD圖形界面調(diào)試器等;

c)實時性能工具和分析工具。

系統(tǒng)內(nèi)核則通過Abatron公司的BDI2000調(diào)試器進行測試,內(nèi)核運行于PowerPC體系的CPU上。該目標系統(tǒng)已實現(xiàn)以太網(wǎng)接口、串口、USB接口,LCD也能正常顯示。

3 系統(tǒng)框架結(jié)構(gòu)

應用程序是最上層的開發(fā),其交互界面直接通過MiniGUI圖形系統(tǒng)的API接口函數(shù)實現(xiàn)。MiniGUI屏蔽了對底層顯示、輸入設備編程的細節(jié),使程序員更能專注于信息終端界面的特色上,從而縮短了編程投入時間。MiniGUI圖形率編譯安裝后一般以庫的形式存放在操作系統(tǒng)/usr/lib文件目錄下。

該嵌入式系統(tǒng)的框架結(jié)構(gòu)如圖1所示。

4 MiniGUI的移植

(1)MiniGUI特點

MiniGUI是由魏永明主掛的一個自由軟件項目,現(xiàn)完全遵循GPL(General Public License)條款的純自由軟件,可以運行在任何一種具有POSIX線程支持的POSIX兼容系統(tǒng)上。MiniGUI在體系結(jié)構(gòu)上有許多獨特之處。它的主要特色有:

a)提供了完備的多窗口機制;

b)對話框和預定義的控件類;

c)消息傳遞機制;

d)多字符集和多字體支持;

e)全拼、五筆等漢字輸入法支持;

f)BMP、GIF、JPEG等常見圖像文件的支持;

g)小巧,包含全部功能的庫文件大小為300KB左右;

h)可配置,可根據(jù)項目需求進行定制配置和編譯;

i)可移植性好。

(2)MiniGUI的移植過程

要使MiniGUI運行在入式目標板PPC上,需在MontaVista Linux 3.0的交叉開發(fā)環(huán)境下移植該圖形包。

MiniGUI 1.2.6版發(fā)布時含資源文件壓縮包minigui-res1.2.6.tar.gz、庫文件壓縮包libminigui-1.2.6.tar.gz和一個綜合示范程序mde-1.2.6.tar.gz。

在開發(fā)主機上安裝好MontaVista Linux 3.0后,把主機NFS服務的輸出目錄配置為硬盤路徑/opt/hardhat/devkit/ppc/8xx/target。目標板運行起來后,會自動掛載到該目錄下。

將該目標作為當前路徑安裝MiniGUI。

打開資源文件壓縮包,執(zhí)行如下命令

tar-xvf minigui-res-1.2.6.tar.gz

會自動在當前路徑下生成minigui-res目錄。在該目錄下可以看到config.linux文件,修改其中TOPDIR=NONE一項,使TOPDIR=/opt/hardhat/devkit/ppc/8xx/target,此處的路徑對應的就是前面設置的NFS輸出目錄。運行安裝命令make install即可。

編譯庫文件壓縮包libminigui-1.2.6.tar.gz時,解壓步驟如上。不同的是須在當前目錄下運行configure命令對庫文件進行移植的配置。命令行如下:

CC=ppc_8xx-gcc./configure

--build=i386-linux

--target=ppc-unknown-linux

--prefix=/opt/hardhat/devkit/ppc/8xx/target

--libdir=/opt/hardhat/devkit/ppc/8xx/target/usr/lib

--includedir=/opt/hardhat/devkit/ppc/8xx/target/usr/include

--enable-debug

其中,ppc_8xx-gcc是針對PowerPC體系結(jié)構(gòu)目標的編譯器,是MontaVista Linux提供的;build是指執(zhí)行編譯的機器,這里是x86的開發(fā)主機;target是運行該編譯器所產(chǎn)生目標文件的機器;prefix是所有安裝路徑的前綴;libdir是庫文件安裝路徑;includedir是頭文件安裝路徑;enable-debub指編譯時需包含調(diào)試信息。

配置完,運行編譯安裝命令。

綜合示范程序mde-1.2.6.tar.gz的安裝方法和庫文件類似的。

此時,啟動目標板,在MontaVisa Linux的控制程序下,進入/mde-1.2.6/mginit目錄,輸入命令行./③mginit運行MiniGUI的這個后臺服務器程序,出現(xiàn)一個有小企圖片的窗口管理器,并在左上角弱出一個控制臺程序的子窗口。在該控制臺下,可以運行mde中其它的示范例子。至此,MiniGUI圖形包在目標板上移植安裝完成。

5 信息終端軟件開發(fā)

本系統(tǒng)中采用了MiniGUI專為嵌入式系統(tǒng)開發(fā)的Lite版本。它基于客戶/服務器(C/S)體系,在服務器和客戶之間傳遞輸入設備數(shù)據(jù),以及客戶和服務器之間的某些語法 和響應數(shù)據(jù)。

在該信息終端軟件中,就根據(jù)這種結(jié)構(gòu)特點,設計了一個服務器程序和兩個客戶進程。服務器始終運行后臺,記錄有關系統(tǒng)信息,如系統(tǒng)計時、用戶刷卡余額等,通過MiniGUI提供的Socket機制通信將數(shù)據(jù)傳給下面的客戶程序。主界面客戶進程給用戶提供了完整的操作體驗,用戶可以通過菜單選擇打電話、瀏覽信息等功能。另一客戶進程則是廣告屏保,在無人使用的間隙時間里,可以動態(tài)顯示一些精彩的畫面,實現(xiàn)商業(yè)價值或公益宣傳。下面分別進行介紹。

(1)信息終端客戶程序

該信息終端主體界面客戶程序在MiniGUI服務器的控制臺程序下打開,彈出的是信息終端的主菜單,顯示了電話、信息查詢、城市交通、新聞專欄等板塊。

程序?qū)崿F(xiàn)時,開始是包含的頭文件。

MiniGUI圖形包的頭文件有:common.h(MiniGUI常用的宏及數(shù)據(jù)類型的定義)、minigui.h(全局的和通用的接口函數(shù)及雜項函數(shù)的定義)、window.h(定義了和窗口有關的宏、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)和窗口函數(shù))。使用GDI函數(shù)和控件還需包括gdi.h、control.h兩個頭文件。

編程實現(xiàn)時,MiniGUI的程序入口點是MiniGUIMain函數(shù),系統(tǒng)初始化后就會自動找到該函數(shù)。在該函數(shù)中先設置主窗口一些基本屬性,建立每個客戶程序唯一的一個消息隊列。當程序結(jié)束時,調(diào)用MainWindow ThreadCleanup函數(shù),清除主窗口所使用的消息隊列系統(tǒng)資源,退回服務器程序中。

其,各個功能子函數(shù)是在MiniGUI程序的另一主體部分——主界面窗口的過程函數(shù)中調(diào)用打開的。在主窗口建立時,其中有一項屬性MainWindowProc,即是注明了對應該窗口的過程函數(shù)。各個功能模塊的消息也都是通過主窗口中的消息循環(huán)進行觸發(fā)的。

窗口過程函數(shù)主體上都是switch和case結(jié)構(gòu)的選擇語句,針對不同的消息產(chǎn)生不同的響應。一般MSG_CREATE消息在窗口生成時被發(fā)送,因而控件往往在這里調(diào)用CreateWindow函數(shù)生成。MSG_PAINT則是在移動窗口或調(diào)用UpdateWindow重繪時發(fā)生,可根據(jù)需要定義相應的操作。MSG_CLOSE即是關閉窗口時的動作,一般調(diào)用DestroyMainWindow銷毀主窗口,調(diào)用PostQuitMessage退出消息循環(huán)。

此外,在窗口過程函數(shù)MiniGUI提供的GDI,即圖形設備接口(graphics device interface),可以方便地將BMP、GIF、JPEG等圖片用LoadBitmap函數(shù)輸出到界面,并通過設備上下文(DC)的邏輯字體(logfont)實現(xiàn)多字體和多字符集支持。

廣告進程的制作也類似,不再說明。

(2)信息終端軟件服務器程序

因為服務器和客戶程序需要交換數(shù)據(jù),所以我們使用了經(jīng)MiniGUI包裝過的Socket通信機制。

在服務器中,建立一個監(jiān)聽套接字:

#define LISTEN_SOCKET "/var/tmp/socket1"

static int listen_fd;

BOOL listen_socket(HWND hwnd)

{ if((listen_fd=serv_listen(LISTEN_SOCKET))<0)

return FALSH;

return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);

}

服務器監(jiān)聽該套接字listen_fd。當客戶有連接請求時,服務器的過程函數(shù)中就會收到MSG_FDEVENT消息,服務器就可以接受該請求以進行相應處理:

static int MainFunProc(HWND hWnd,

{ switch(message)

{case MSG_FDEVENT:

if(LOWORD(wParam)= =listen_fd){

……

conn_fd=serv_accept(listen_fd,&uid);

if(conn_fd>0){

sock_read(conn_fd,buff[20],40);

……

sock_write(conn_fd,buff[20],40);

}}

break;

}}

在主界面進程中,需要連接到服務器時,可以通過cli_conn(LISTEN_SOCKET,'b')來提出請求。

這樣,服務器和客戶程序之間即可相互交流數(shù)據(jù)了。

廣告進程實現(xiàn)時,需要在服務器中設置事件鉤子函數(shù)SetServerEventHook(my_event_hook)。因為廣告屏保是在沒有鍵盤鼠標輸入的一段時間后自動打開的,有任意鍵時又自動關閉,所以只有始終運行在后臺的服務器才能判斷廣告是否要打開關閉。

可以在消息循環(huán)時進行判斷:

while(GetMessage(&Msg,HWND_DESKTOP))

{if (pid_scrnsaver= =0&&GetTickCount()>

old_tick_count+1000){

ShowCursor(FLASE);

pid_scrnsaver=exec_app("./scrnsaver","crnsaver");

}

DispatchMessage(&Msg);

}

dld_tick_count是前一次消息的時間。當從GetTickCount()得到的當前時間大于設定值時,還沒有任何消息的話,廣告屏保scrnsaver程序就啟動,同時隱蔽鼠標光標。

當系統(tǒng)又接收到事件時,會自動執(zhí)行前面注冊過的事件鉤子函數(shù)。在該函數(shù)中,使用kill(pid_scrnsaver,SIGINT)命令關閉廣告程序,并顯示鼠標即可。

軟件系統(tǒng)的示意如圖2所示。

將完成的C語言程序文件用交叉編譯工具編譯,并鏈接MiniGUI庫文件,即可生成所需的可執(zhí)行文件。

結(jié)語

將嵌入式Linux應用至信息家電類產(chǎn)品中,并開發(fā)出優(yōu)秀的人機交互界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場前景。本系統(tǒng)開發(fā)的嵌入式信息終端也已初見成效,相信這種方案必將得到越來越多的應用。

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉