王雪麗+婁小平+劉鋒+張蔭民
摘 要: 嵌入式 GUI 具有高度的可移植性和可裁剪性,基于Qt/Embedded技術(shù)開發(fā)嵌入式GUI可以方便地移植到嵌入式操作系統(tǒng)上。介紹了嵌入式硬件設(shè)計、Linux下Qt/Embedded開發(fā)環(huán)境的搭建、Qt應(yīng)用程序的開發(fā),以及移植到嵌入式Linux開發(fā)板的過程,提出用Qt/Embedded開發(fā)半導(dǎo)體激光器驅(qū)動電源的圖形控制界面設(shè)計方法和思路,并成功實現(xiàn)了對半導(dǎo)體激光器驅(qū)動電源的圖形界面控制。
關(guān)鍵詞: 嵌入式GUI; Linux; Qt/Embedded; 半導(dǎo)體激光器
中圖分類號: TN919?34 文獻標識碼: A 文章編號: 1004?373X(2014)20?0116?04
Development of embedded GUI for semiconductor laser driving power supply
WANG Xue?li, LOU Xiao?ping, LIU Feng, ZHANG Yin?min
(Beijing Engineering Research Center of Optoelectronic Information and Instrument, Beijing Information Science &Technology University, Beijing 100192, China)
Abstract: The embedded GUI has high portability and tailoring performance. The embedded GUI based on Qt/Embedded can be transplanted to the embedded operating system expediently. The design of embedded hardware, setup of Qt/ Embedded development environment in Linux, development of Qt application program and process of transplantation to embedded Linux development board are introduced. The method and idea to develop the graphical control interface of semiconductor laser driving power supply by Qt/Embedded are proposed. The graphical interface to control the semiconductor laser driving power supply was realized successfully.
Keywords: embedded GUI; Linux; Qt/Embedded; semiconductor laser
0 引 言
Linux在臺式機上的成功,使大家看到了Linux在嵌入式系統(tǒng)領(lǐng)域中的輝煌應(yīng)用前景。嵌入式Linux具有源碼開放、硬件需求低、軟件模塊化、可隨意配置免許可、可移植等特點,符合工控領(lǐng)域可靠性、實時性、穩(wěn)定性等要求。Qt是奇趣(Trolltech)公司開發(fā)的一套跨平臺的應(yīng)用程序開發(fā)框架,擁有直觀、強大的API接口和C++類庫[1],2000年發(fā)布的Qt/Embedded Linux版本可用于Linux嵌入式設(shè)備,Qt/Embedded Linux提供了自己的窗口系統(tǒng),并且可以作為X11的輕量級替代產(chǎn)品。半導(dǎo)體激光器具有體積小、重量輕、運轉(zhuǎn)可靠、耗電少、效率高等優(yōu)點,作為一種新穎的激光光源,已經(jīng)廣泛用于軍事、醫(yī)療、通信、工業(yè)等領(lǐng)域,如激光通信、激光雷達、激光手術(shù)、激光焊接。半導(dǎo)體激光器[2]的特性受驅(qū)動電流和溫度的影響,閾值電流隨溫度的升高而增大,當達到閾值電流時輸出光功率隨注入電流成線性變化,相同注入電流在不同溫度下的輸出光功率也不同,溫度的變化也會引起中心波長的漂移,所以,半導(dǎo)體激光器的控制包括對驅(qū)動電流的控制和工作溫度的控制。半導(dǎo)體激光器驅(qū)動電源的控制方法多樣,利用Qt/Embedded開發(fā)的嵌入式圖形用戶界面能夠方便地實現(xiàn)對驅(qū)動源系統(tǒng)的實時監(jiān)測、控制、數(shù)據(jù)存儲等功能。
1 開發(fā)環(huán)境的搭建
半導(dǎo)體激光器驅(qū)動電源的控制核心處理器采用Sitare系列ARM處理器AM3354,其最高運行頻率可達800 MHz,集成了基于ARM Cortex?A8的微處理器單元(MPU),POWERVR SGXTM圖形加速器,可編程實時單元和工業(yè)用通信子系統(tǒng),保證系統(tǒng)在低功耗運行的同時擁有高性能。硬件結(jié)構(gòu)如圖1所示,外接256 MB的SDRAM 和2 GB的NANDFLASH;電源管理芯片TPS65217用于處理器的電源管理,它能提供靈活的加電和斷電時序并擁有電源正常輸出、按鈕監(jiān)視器等附加功能;外接7寸LCD液晶顯示觸摸屏,處理器內(nèi)的LCD控制器集成了LCD接口顯示驅(qū)動器控制器,經(jīng)過驅(qū)動電路后可直接連接LCD模塊;AM3354處理器最多可支持6個UART,系統(tǒng)通過串口與LD驅(qū)動源連接進行數(shù)據(jù)的傳輸。
圖1 LD驅(qū)動源控制硬件結(jié)構(gòu)圖
嵌入式應(yīng)用軟件的開發(fā)屬于跨平臺開發(fā),由于目標機CPU和宿主機CPU擁有不同的架構(gòu),需要構(gòu)建一個交叉編譯環(huán)境,使在宿主機上開發(fā)出來的程序經(jīng)過交叉編譯后能夠在目標機上運行。用來開發(fā)的計算機稱為宿主機,一般運行Linux操作系統(tǒng)。嵌入式設(shè)備屬于目標機。這里使用的宿主機為安裝了Ubuntu操作系統(tǒng)的X86計算機(Ubuntu是一個以桌面應(yīng)用為主的Linux操作系統(tǒng)),目標機為AM3354為處理器的嵌入式主板,操作系統(tǒng)采用嵌入式Linux[3]。由于Qt /Embedded 和 Qt/X11有一樣的API,在開發(fā)嵌入式環(huán)境的應(yīng)用程序時,可以先在帶Qt/X11庫的宿主機上開發(fā)[4]。
在此安裝的交叉編譯器版本為arm?linux?gcc?4.4.3,支持硬浮點運算。解壓到某一目錄下,在系統(tǒng)啟動文件/etc/profile設(shè)置交叉編譯器環(huán)境變量,最后導(dǎo)入環(huán)境變量,#arm?linux?gcc ?v命令可以查看編譯器是否添加成功。安裝嵌入式Qt應(yīng)用程序開發(fā)庫,解壓Qt/Embedded庫[5]到相應(yīng)目錄下并編譯。在應(yīng)用程序運行時,要正確設(shè)置環(huán)境變量,以使應(yīng)該程序能正確調(diào)用安裝目錄下的庫文件。
2 Qt/Embedded應(yīng)用程序軟件設(shè)計
Qt/Embedded軟件體系摒棄了X lib庫,將外部輸入設(shè)備抽象為鍵盤和鼠標事件,采用幀緩沖作為底層圖形接口,應(yīng)用程序可以直接寫內(nèi)核幀緩沖,避免了使用繁瑣的X lib/Server機制。系統(tǒng)應(yīng)用程序開發(fā)架構(gòu)[6]如圖2所示。
Qt/Embedded應(yīng)用程序設(shè)計有兩種方式[7],一種是用集成開發(fā)環(huán)境圖形編程方式,一種是代碼編程方式。無論使用哪種方式都會涉及元對象系統(tǒng)。元對象系統(tǒng)是對C++進行擴展的一種機制,Qt使用這種機制創(chuàng)建了獨立的軟件組件,它提供了關(guān)鍵的兩項技術(shù):信號?槽以及內(nèi)省。內(nèi)省功能對于實現(xiàn)信號和槽是必需的,并且允許應(yīng)用程序的開發(fā)人員在運行時獲得有關(guān)QObject子類的“元信息”,包括一個含有對象的類名以及它所支持的信號和槽的列表。信號和槽是Qt通信機制的核心。當一個特殊的事情發(fā)生時便可以發(fā)射一個信號,而槽就是一個函數(shù),它在信號發(fā)射后被調(diào)用來響應(yīng)這個信號,通常一個信號對應(yīng)一個槽,一個信號也可以關(guān)聯(lián)多個槽,多個信號也可以關(guān)聯(lián)到同一個槽上。
圖2 系統(tǒng)應(yīng)用程序開發(fā)架構(gòu)
2.1 串口通信的實現(xiàn)
在Qt中并沒有特定的串口控制類[8],大部分使用第三方寫的qextserialport類。該類包含兩個類:QextSerialBase類和Posix_QextSerialPort類,后者繼承前者,而QextSerialBase類又繼承自Qt軟件自帶的QIODevice類。在QextSerialBase類中涉及到了一個枚舉變量QueryMode,它有兩個值Polling和EventDriven ,Polling指的是查詢方式讀/寫串口,EventDriven是事件驅(qū)動方式。 事件驅(qū)動方式就是使用事件處理串口的讀取,一旦有數(shù)據(jù)到來,就會發(fā)出readyRead()信號,就可以關(guān)聯(lián)該信號來讀取串口的數(shù)據(jù)。
在事件驅(qū)動的方式下,串口的讀/寫是異步的,調(diào)用讀/寫函數(shù)會立即返回,它們不會凍結(jié)調(diào)用線程。而查詢方式Polling讀/寫函數(shù)是同步執(zhí)行的,信號工作在這種模式下是不起作用的,但這種模式下開銷較小,可以建立定時器來讀取串口的數(shù)據(jù),并將結(jié)果顯示在Qt的圖形用戶界面上。這里采用Polling查詢方式讀/寫串口。設(shè)置一個100 ms的定時器,通過Qt特有的信號與槽機制,將定時溢出信號關(guān)聯(lián)到讀串口槽函數(shù)上,實現(xiàn)數(shù)據(jù)的實時采集顯示。
程序流程如圖3所示。首先新建一個串口類,設(shè)置串口通信的屬性,最常見的屬性設(shè)置包括通信端口、波特率、數(shù)據(jù)位、奇偶校驗、停止位以及控制流等,然后讀/寫串口。
圖3 串口通信流程圖
每個設(shè)備端口在/dev目錄下都有一個對應(yīng)的文件,Linux下的文件用文件描述符來描述,它指向內(nèi)核中每個進程打開的文件記錄表。串口資源的文件路徑是/dev/ttyO*,因此對串口的操作就像對普通文件的操作一樣,部分操作程序如下:
struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,F(xiàn)LOW_OFF,500};
QString portName ="/dev/ttyO2";
myCom=new Posix_QextSerialPort(portName,myComSetting,QextSerialBase::EventDriven);
myCom?>open(QIODevice::ReadWrite);
QByteArray temp=myCom?>readAll();
2.2 軟鍵盤的調(diào)用
文中設(shè)計的軟鍵盤包括字母、數(shù)字的輸入、大小寫字母的切換以及退格、回車等功能。在Linux環(huán)境的Qt Designer下,創(chuàng)建一個新的Widget,將Buttons選項中的PushButton按鍵拖入到軟鍵盤區(qū)域內(nèi),然后根據(jù)需要修改每個按鍵上面的文本屬性和名字屬性。
軟鍵盤的實現(xiàn)是基于信號與槽機制 [9]。利用Qt的多信號映射機制,首先使用QSignalMapper類來捆綁不同按鍵所發(fā)送的一系列無參數(shù)信號,并將其轉(zhuǎn)化為有參數(shù)的信號,實現(xiàn)一個函數(shù)可以響應(yīng)不同按鈕的功能;然后需要建立每一鍵值對應(yīng)的信號與槽之間的關(guān)系connect(ui?>pushButton, SIGNAL(clicked()),&mapper, SLOT(map()));最后將所有的字母和數(shù)字通過多信號映射連接到槽函數(shù)中,將鍵值傳遞給焦點控:connect(&mapper,SIGNAL(mapped(QWidget*)),this,SLOT(buttonClicked(QWidget*))),當有按鍵按下時,mapped(QWidget*)信號會觸發(fā)buttonClicked槽函數(shù),在buttonClicked函數(shù)中發(fā)送按鍵的ASCII碼值信號調(diào)用sendCharacter(QChar)槽,從而實現(xiàn)正確的鍵值輸入。界面設(shè)計如圖4所示。
圖4 軟鍵盤界面
Qt設(shè)計師窗口部件簡單有限,某些情況下要自定義窗口部件。它有兩種方法:改進法和插件法。插件法需要創(chuàng)建一個插件庫,它為可選的額外功能提供了一個特殊接口。Qt設(shè)計師運行時可以加載這個庫,并且利用該庫創(chuàng)建窗口部件的實例,本設(shè)計自定義了三個窗口部件QMeter、thermometer和led。
3 程序的移植和發(fā)布
安裝了交叉工具鏈以及經(jīng)過交叉編譯的Qt/E庫后[10],就可以將前面編輯好的應(yīng)用程序進行交叉編譯生成可執(zhí)行二進制文件,然后發(fā)布到嵌入式控制板中。另外,在發(fā)布之前需要先移植tslib和Qt/E庫,tslib是電阻式觸摸屏用于校準的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅(qū)動獲得的采樣提供諸如濾波、去抖、校準等功能,通常作為觸摸屏驅(qū)動的適配層,為上層的應(yīng)用提供了一個統(tǒng)一的接口。解壓根文件系統(tǒng)到home路徑下,復(fù)制編譯好的tslib、Qt/E庫文件到根文件系統(tǒng)中,最后導(dǎo)出相應(yīng)的環(huán)境變量。應(yīng)該程序可以以界面圖標的形式運行,這時,就需要自己制作啟動器文件,在forlinx/web/lighttpd/webpages/apps目錄下新建current.desktop文件,然后編輯該文件:
#!/usr/bin/env xdg?open
[Desktop Entry]
Name=Serial
GenericName=Demo App
Icon=/forlinx/web/lighttpd/webpages/apps/images/current.png
Exec=/forlinx/web/lighttpd/webpages/shell/current.sh
Type=Application
ProgramType=gui
current.png是一個32×32的PNG圖標文件,可根據(jù)自己的需要制作并存于相應(yīng)路徑下。交叉編譯生成的二進制文件current放于forlinx/qt/bin目錄中。current.sh是編寫的shell腳本,當用戶點擊界面圖標時會自動執(zhí)行腳本文件里的命令:
#!/bin/sh
if test ?e /dev/fb0;
then
width=′fbset | grep ′geometry′ | awk ′{print $2}′′
height=′fbset | grep ′geometry′ | awk ′{print $3}′′
let height=height?38
geo=′echo $width\x$height+0+0′
fi
pidof matrix_gui > /dev/null 2>&1
if [ $? == 0 ]
then /forlinx/qt/bin/serial ?geometry $geo$*
else
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
/forlinx/qt/bin/current ?qws ?geometry $geo$*
fi
如果需要開機自動運行程序,可以編輯啟動時的執(zhí)行文件/etc/init.d/rcS,將啟動程序路徑和可執(zhí)行應(yīng)用程序名添加到這里,就可以實現(xiàn)系統(tǒng)啟動時程序的自動運行,在嵌入式主板上運行效果如圖5所示。
4 結(jié) 語
嵌入式系統(tǒng)的實時性、高可靠性以及友好高效的GUI被廣泛用于工業(yè)控制當中。基于Qt/Embedded設(shè)計的嵌入式控制界面實現(xiàn)了與單片機的串口通信、文字的編輯、控件的載入和顯示、數(shù)據(jù)的保存記憶、軟鍵盤的調(diào)用等功能。本文根據(jù)光纖激光器泵浦源的特點,以設(shè)計泵浦源驅(qū)動的人機交互界面為前提,結(jié)合用戶需求和Qt/Embedded特點來開發(fā)嵌入式控制面板。詳細介紹了基于Qt/Embedded的嵌入式應(yīng)用程序的開發(fā)過程,并成功移植到嵌入板中控制LD正常工作。
圖5 在主板上的運行效果圖
參考文獻
[1] [加拿大] BLANCHETTE Jasmin, [英] SUMMERFIELD Mark. C++ GUI Qt4編程[M].北京:電子工業(yè)出版社,2010.
[2] 趙忠偉,吳廣業(yè).半導(dǎo)體激光器驅(qū)動電路設(shè)計[J].中國電子科學(xué)研究院學(xué)報,2011(6):657?660.
[3] 陳樂,唐波,盧力.嵌入式環(huán)境下串行幀通信的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(23):60?62.
[4] 湯偉,李強.Qt/E的嵌入式Linux GUI研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2011,28(10):260?263.
[5] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[6] 楊柳,岳坤,龐和明,等.Qt/Embedded及嵌入式 Linux 在智能監(jiān)控系統(tǒng)控制中的應(yīng)用[J].計算機應(yīng)用,2010,30(1):289?291.
[7] 趙瑩,徐大平,呂躍剛.基于Qt/Embedded的嵌入式控制界面開發(fā)[J].微計算機信息,2009,25(11):36?38.
[8] 劉依晗,丑武勝,董明杰.基于QT/E串口通信的手持監(jiān)控器[J].現(xiàn)代電子技術(shù),2013,36(20):110?112.
[9] 謝芬,潘麗,劉守印.基于QT/E的嵌入式Linux系統(tǒng)的軟鍵盤實現(xiàn)[J].電子設(shè)計工程, 2012,20(5):177?179.
[10] 游燕珍,趙國鋒,徐川.基于Qt/E的嵌入式GUI的研究及其移植[J].微計算機信息,2008,24(14):61?63.
圖4 軟鍵盤界面
Qt設(shè)計師窗口部件簡單有限,某些情況下要自定義窗口部件。它有兩種方法:改進法和插件法。插件法需要創(chuàng)建一個插件庫,它為可選的額外功能提供了一個特殊接口。Qt設(shè)計師運行時可以加載這個庫,并且利用該庫創(chuàng)建窗口部件的實例,本設(shè)計自定義了三個窗口部件QMeter、thermometer和led。
3 程序的移植和發(fā)布
安裝了交叉工具鏈以及經(jīng)過交叉編譯的Qt/E庫后[10],就可以將前面編輯好的應(yīng)用程序進行交叉編譯生成可執(zhí)行二進制文件,然后發(fā)布到嵌入式控制板中。另外,在發(fā)布之前需要先移植tslib和Qt/E庫,tslib是電阻式觸摸屏用于校準的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅(qū)動獲得的采樣提供諸如濾波、去抖、校準等功能,通常作為觸摸屏驅(qū)動的適配層,為上層的應(yīng)用提供了一個統(tǒng)一的接口。解壓根文件系統(tǒng)到home路徑下,復(fù)制編譯好的tslib、Qt/E庫文件到根文件系統(tǒng)中,最后導(dǎo)出相應(yīng)的環(huán)境變量。應(yīng)該程序可以以界面圖標的形式運行,這時,就需要自己制作啟動器文件,在forlinx/web/lighttpd/webpages/apps目錄下新建current.desktop文件,然后編輯該文件:
#!/usr/bin/env xdg?open
[Desktop Entry]
Name=Serial
GenericName=Demo App
Icon=/forlinx/web/lighttpd/webpages/apps/images/current.png
Exec=/forlinx/web/lighttpd/webpages/shell/current.sh
Type=Application
ProgramType=gui
current.png是一個32×32的PNG圖標文件,可根據(jù)自己的需要制作并存于相應(yīng)路徑下。交叉編譯生成的二進制文件current放于forlinx/qt/bin目錄中。current.sh是編寫的shell腳本,當用戶點擊界面圖標時會自動執(zhí)行腳本文件里的命令:
#!/bin/sh
if test ?e /dev/fb0;
then
width=′fbset | grep ′geometry′ | awk ′{print $2}′′
height=′fbset | grep ′geometry′ | awk ′{print $3}′′
let height=height?38
geo=′echo $width\x$height+0+0′
fi
pidof matrix_gui > /dev/null 2>&1
if [ $? == 0 ]
then /forlinx/qt/bin/serial ?geometry $geo$*
else
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
/forlinx/qt/bin/current ?qws ?geometry $geo$*
fi
如果需要開機自動運行程序,可以編輯啟動時的執(zhí)行文件/etc/init.d/rcS,將啟動程序路徑和可執(zhí)行應(yīng)用程序名添加到這里,就可以實現(xiàn)系統(tǒng)啟動時程序的自動運行,在嵌入式主板上運行效果如圖5所示。
4 結(jié) 語
嵌入式系統(tǒng)的實時性、高可靠性以及友好高效的GUI被廣泛用于工業(yè)控制當中?;赒t/Embedded設(shè)計的嵌入式控制界面實現(xiàn)了與單片機的串口通信、文字的編輯、控件的載入和顯示、數(shù)據(jù)的保存記憶、軟鍵盤的調(diào)用等功能。本文根據(jù)光纖激光器泵浦源的特點,以設(shè)計泵浦源驅(qū)動的人機交互界面為前提,結(jié)合用戶需求和Qt/Embedded特點來開發(fā)嵌入式控制面板。詳細介紹了基于Qt/Embedded的嵌入式應(yīng)用程序的開發(fā)過程,并成功移植到嵌入板中控制LD正常工作。
圖5 在主板上的運行效果圖
參考文獻
[1] [加拿大] BLANCHETTE Jasmin, [英] SUMMERFIELD Mark. C++ GUI Qt4編程[M].北京:電子工業(yè)出版社,2010.
[2] 趙忠偉,吳廣業(yè).半導(dǎo)體激光器驅(qū)動電路設(shè)計[J].中國電子科學(xué)研究院學(xué)報,2011(6):657?660.
[3] 陳樂,唐波,盧力.嵌入式環(huán)境下串行幀通信的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(23):60?62.
[4] 湯偉,李強.Qt/E的嵌入式Linux GUI研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2011,28(10):260?263.
[5] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[6] 楊柳,岳坤,龐和明,等.Qt/Embedded及嵌入式 Linux 在智能監(jiān)控系統(tǒng)控制中的應(yīng)用[J].計算機應(yīng)用,2010,30(1):289?291.
[7] 趙瑩,徐大平,呂躍剛.基于Qt/Embedded的嵌入式控制界面開發(fā)[J].微計算機信息,2009,25(11):36?38.
[8] 劉依晗,丑武勝,董明杰.基于QT/E串口通信的手持監(jiān)控器[J].現(xiàn)代電子技術(shù),2013,36(20):110?112.
[9] 謝芬,潘麗,劉守印.基于QT/E的嵌入式Linux系統(tǒng)的軟鍵盤實現(xiàn)[J].電子設(shè)計工程, 2012,20(5):177?179.
[10] 游燕珍,趙國鋒,徐川.基于Qt/E的嵌入式GUI的研究及其移植[J].微計算機信息,2008,24(14):61?63.
圖4 軟鍵盤界面
Qt設(shè)計師窗口部件簡單有限,某些情況下要自定義窗口部件。它有兩種方法:改進法和插件法。插件法需要創(chuàng)建一個插件庫,它為可選的額外功能提供了一個特殊接口。Qt設(shè)計師運行時可以加載這個庫,并且利用該庫創(chuàng)建窗口部件的實例,本設(shè)計自定義了三個窗口部件QMeter、thermometer和led。
3 程序的移植和發(fā)布
安裝了交叉工具鏈以及經(jīng)過交叉編譯的Qt/E庫后[10],就可以將前面編輯好的應(yīng)用程序進行交叉編譯生成可執(zhí)行二進制文件,然后發(fā)布到嵌入式控制板中。另外,在發(fā)布之前需要先移植tslib和Qt/E庫,tslib是電阻式觸摸屏用于校準的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅(qū)動獲得的采樣提供諸如濾波、去抖、校準等功能,通常作為觸摸屏驅(qū)動的適配層,為上層的應(yīng)用提供了一個統(tǒng)一的接口。解壓根文件系統(tǒng)到home路徑下,復(fù)制編譯好的tslib、Qt/E庫文件到根文件系統(tǒng)中,最后導(dǎo)出相應(yīng)的環(huán)境變量。應(yīng)該程序可以以界面圖標的形式運行,這時,就需要自己制作啟動器文件,在forlinx/web/lighttpd/webpages/apps目錄下新建current.desktop文件,然后編輯該文件:
#!/usr/bin/env xdg?open
[Desktop Entry]
Name=Serial
GenericName=Demo App
Icon=/forlinx/web/lighttpd/webpages/apps/images/current.png
Exec=/forlinx/web/lighttpd/webpages/shell/current.sh
Type=Application
ProgramType=gui
current.png是一個32×32的PNG圖標文件,可根據(jù)自己的需要制作并存于相應(yīng)路徑下。交叉編譯生成的二進制文件current放于forlinx/qt/bin目錄中。current.sh是編寫的shell腳本,當用戶點擊界面圖標時會自動執(zhí)行腳本文件里的命令:
#!/bin/sh
if test ?e /dev/fb0;
then
width=′fbset | grep ′geometry′ | awk ′{print $2}′′
height=′fbset | grep ′geometry′ | awk ′{print $3}′′
let height=height?38
geo=′echo $width\x$height+0+0′
fi
pidof matrix_gui > /dev/null 2>&1
if [ $? == 0 ]
then /forlinx/qt/bin/serial ?geometry $geo$*
else
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
/forlinx/qt/bin/current ?qws ?geometry $geo$*
fi
如果需要開機自動運行程序,可以編輯啟動時的執(zhí)行文件/etc/init.d/rcS,將啟動程序路徑和可執(zhí)行應(yīng)用程序名添加到這里,就可以實現(xiàn)系統(tǒng)啟動時程序的自動運行,在嵌入式主板上運行效果如圖5所示。
4 結(jié) 語
嵌入式系統(tǒng)的實時性、高可靠性以及友好高效的GUI被廣泛用于工業(yè)控制當中?;赒t/Embedded設(shè)計的嵌入式控制界面實現(xiàn)了與單片機的串口通信、文字的編輯、控件的載入和顯示、數(shù)據(jù)的保存記憶、軟鍵盤的調(diào)用等功能。本文根據(jù)光纖激光器泵浦源的特點,以設(shè)計泵浦源驅(qū)動的人機交互界面為前提,結(jié)合用戶需求和Qt/Embedded特點來開發(fā)嵌入式控制面板。詳細介紹了基于Qt/Embedded的嵌入式應(yīng)用程序的開發(fā)過程,并成功移植到嵌入板中控制LD正常工作。
圖5 在主板上的運行效果圖
參考文獻
[1] [加拿大] BLANCHETTE Jasmin, [英] SUMMERFIELD Mark. C++ GUI Qt4編程[M].北京:電子工業(yè)出版社,2010.
[2] 趙忠偉,吳廣業(yè).半導(dǎo)體激光器驅(qū)動電路設(shè)計[J].中國電子科學(xué)研究院學(xué)報,2011(6):657?660.
[3] 陳樂,唐波,盧力.嵌入式環(huán)境下串行幀通信的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(23):60?62.
[4] 湯偉,李強.Qt/E的嵌入式Linux GUI研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2011,28(10):260?263.
[5] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[6] 楊柳,岳坤,龐和明,等.Qt/Embedded及嵌入式 Linux 在智能監(jiān)控系統(tǒng)控制中的應(yīng)用[J].計算機應(yīng)用,2010,30(1):289?291.
[7] 趙瑩,徐大平,呂躍剛.基于Qt/Embedded的嵌入式控制界面開發(fā)[J].微計算機信息,2009,25(11):36?38.
[8] 劉依晗,丑武勝,董明杰.基于QT/E串口通信的手持監(jiān)控器[J].現(xiàn)代電子技術(shù),2013,36(20):110?112.
[9] 謝芬,潘麗,劉守印.基于QT/E的嵌入式Linux系統(tǒng)的軟鍵盤實現(xiàn)[J].電子設(shè)計工程, 2012,20(5):177?179.
[10] 游燕珍,趙國鋒,徐川.基于Qt/E的嵌入式GUI的研究及其移植[J].微計算機信息,2008,24(14):61?63.