青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

用QtE實現SBC一241OX上的LED控制

源:單片機及嵌入式系統應用? 作者:西安交通大學 宋飛 趙廣社
 
摘 要:QtE(Qt/Embedded)是挪威Trolltech公司專門為嵌入式系統設計的圖形用戶界面(GUI)的一個工具包。本文通過QtE編程,完 成對基于ARM9的SBC-2410X開發板上LED的控制,并詳細說明從程序設計、移植到運行的過程。程序能很好的運行在開發板上,驗證了程序的有效性 和可靠性。結果說明用QtE開發的應用程序界面清晰美觀,操作簡單方便。

關鍵詞:QtE ARM9 GUI SBC-2410X


引言


近 年來,由于ARM(Advanced RISC Machines)在性能、功耗、成本和體積上的優勢,使得它在嵌入式系統中的發展如日中天,它在工業控制、航空航天、軍事領域、消費電子、智能家電和視 頻監控等方面都發揮了重大的作用。很多人都迫切地想學習ARM,以筆者的經驗,從最基本的LED控制學起,是一個不錯的選擇。


如 果不熟悉Linux,可能對QtE的概念知之甚少,它是挪威Trolltech公司為各種系統設計的圖形用戶界面工具包,采用c++語言編程。QtE的優 點有:跨平臺,可以方便的連接數據庫,可以將程序與Java集成等。其實,QtE在一些高端的移動手持設備中早已深入人心,Troll—tech公司在 QtE的基礎上開發了一個應用環境Qtopia,目前已有很多公司采用Qtopia來開發他們的主流PDA。當然,Qt也有它的缺點,既不能提供IDE (集成開發環境),但這個缺點在強大的Linux下顯得微不足道。使用gcc/g++,加上Qt的開發工具:Qt Designer,tmake/qmake,UIC等,開發可視化程序將變得十分容易。


要學習ARM,選擇一款好的開發板是必不 可少的。SBC一2410X是廣州友善之臂公司設計的一款基于ARM9的開發板,操作系統是韓國的mizi-linux。SBC-2410X不同于 uClinux,它的接口豐富,且支持MMU、QtE2.3.7,同時提供了控制LED的命令行方式。


1 系統需求


◇完全安裝RedHat9.0。
◇在Linux下建立QtE編譯環境。
◇開發板上已經加載LED設備驅動程序。


注意:你所建立的QtE版本必須與開發板所支持的版本一致。


2 程序設計


在Linux 下,用系統自帶的Qt Designer來編寫程序。Qt Designer是一個優秀的可視化開發工具,用它來設計十分容易。它的界面類似于Delphi,但使用C++語言編寫應用程序。Qt程序設計里的一個亮 點就是SignaI-_Slot機制,它有點類似于VC++里的消息機制。當一個組件發出Signal時,其他一個組件或多個組件可以通過Slot接收發 來的SignaI,組件本身也可以接收自己的Signal,這樣處理一個事件將變得非常容易。Qt Designer的優點不僅在于它可以十分方便的設計圖形用戶界面,還表現在可以用連接工具很容易的把Signals和Slots連接起來。用戶自己設計 的程序添加在**.ui.h中。


打開Qt Deslgner,選擇File/new C++Project,命名為led.pro并保存。接著選擇File/new-Dialog,并在此設計自己的用戶界面。最后選擇File/new C++Main—File,系統自動生成一個main.cpp文件。圖形用戶界面如圖1所示,Initlalize按鈕主要完成LED設備的打開,定時器 的關閉和其他一些初始化工作;Begim按鈕則針對LED Display Mode的開始;Exit按鈕為退出應用程序。左面的組合框包括4個RadioButton,對應4個LED的亮或滅;右面的組合框包括6個 RadioButton(對應不同的閃爍模式和閃爍快慢)和1個LCDNumber(用來顯示閃爍的時間間隔)。本程序建立的Signal—S1ot連接 有許多,下面對幾個重要的連接和函數進行說明。



(1)connect(initPushButton.SIGNAL(clicked()),this.SLOT(initial()))


當Initialize 按鈕按下時,LedForm對話框接收此信號,并執行initial()函數。Linux操作系統把所有的設備都看成文件,因此對設備的操作控制可以通過 open()、ioctl()等函數實現。在initial()函數中就是調用了open()函數來打開LED設備的。


(2)connect(okPushButton,SIGNAL(clicked()),this,SLOT(modeSel()))


當Begin 按鈕按下時,LedForm對話框接收此信號,并執行modeSel()函數。在modeSel()函數中開啟定時器,并創建另外一個連接用來循環顯示 LED。在命令行方式中,LED的循環顯示要用到死循環,并用鍵盤中斷來控制循環;而在Qt或其他可視化語言中,則要用到定時器來控制循環。


(3)函數open()


在中聲明,含義為打開設備文件。打開成功返回0;失敗返回一1。


(4)函數ioctl()


在中聲明,控制I/O端口。例如:
Int fd=open(”/dev/leds”,0);
ioctl(fd,0,3); //讓LED4滅


(5)函數select()


在中聲明,含義為經過多長時間訪問一次設備。


3 程序移植與運行


要想使程序運行在開發板的Qtopia中,則必須在建立的QtE環境下編譯,并設置好環境變量。終端進入所建立的QtE目錄后,環境變量或運行環境變量和腳本設置如下:


export QTDIR=$PWD/qt
export QPEDlR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-armg++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/
bin:$PATH


值得注意的一點是:用Linux自帶的Qt Designer創建的工程文件只適用于qmake,而筆者建立的QtE環境只能用tmake來生成makefile,因此需要修改led.pro文件,讓它適用于tmake,修改如下:


TEMPLATE =app
CoNFIG +=qtopia warn_on release
SoURCES +=main.epp
INTERFACES =led.ui
TARGET =led


以上的工作做完后,就可以編譯了。編譯成功后生成可執行的二進制文件led,然而要使程序運行在開發板上的qtopia桌面上,還需要一個桌面文件led.desktop和自定義的一個圖標led.png。桌面文件如下:


[Desktop Entry]
Comment=a LED Control Program
Exee=led
Icon=led
Type=Application
Name=LED Control


然 后,把led復制到SBC-2410X下/opt/qtopia/bin目錄下,led.png復制到/opt/qtopia/pics目錄下,led. desktop復制到/0pt/qtopia/apps/Applications目錄下。最后,用ehmod a+X led改變文件led的權限,重新啟動系統,便可看到led.png的圖標顯示在qtopia桌面上,點擊此圖標就可運行程序了。


4 部分源程序及注釋


由于源程序代碼比較長,這里就不全部列出了,僅給出重要部分的代碼及注釋,以供讀者參考。


(1) 程序的初始化
int fd: //LED設備文件句柄
int type=1; //默認方式為計數器
double period=0.2; //默認時間間隔
QTimer*t=new QTimer(Q″timer″);//創建定時器
void LedForm::initial(){
fd=open(″/dev/leds″,0); //打開LED設備
//其他一些初始化語句
一>stop(); //關閉定時器


(2) LED顯示方式的設置
void LedForm::push-leds(void){
static unsigned step;
unsigned led—bitmap;
inti;
switch(type){
case 0: //方式0:跑馬燈
if(step>=14){step=0;}
if(step<7){led_bitmap=1<else{led_bitmap=1<<(14一step);}
break;
case 1: //方式1:計數器
if(step>255){step=0;)
Ied_bitmap=step!
break;
case 2: //方式2:停止
led_bitmap=0:
break;
step十十;
for(i=0;i<8;l++){
ioctl(fd,led_bitmap&1,i);
led_bitmap>>=1;
}
}


(3) LED設備的讀取及調用LED顯示程序
void LedForm::ledDisplay(){
fd_set rds;
struct timeval step;
FD_ZERO(&rds);
step.tv_sec=period;
step.tv_usec=(pefiod—step.W_sec)*1000000L;
select(fd,&rds,NULL,NULL,&step);
push_leds();
}


(4)循環顯示的實現
void LedForm::modeSel(){
t-->start(O);//啟動定時器,并立即發出Signal- timeout()
connect(t,SIGNAL(timeout()),this.SLOT(1edDisplay()));
}


結 語


隨 著通信行業的迅猛發展,移動手持設備必將成為人們工作、學習和生活的主流,用Qt設計移動手持設備的GUI有著得天獨厚的優勢。目前,Qt應用于全世界上 百個軟件開發項目中。在我國,Qt的發展也有星星之火可以燎原之勢。本文通過一個最基礎的小程序向讀者演示了怎樣使用Qt開發應用程序,以及怎樣建立Qt 與ARM的聯系,希望對讀者學習ARM和Qt起到一定的幫助作用。

posted on 2007-08-14 00:30 旅途 閱讀(268) 評論(0)  編輯 收藏 引用 所屬分類: Linux開發

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲电影免费观看高清完整版在线 | 国产精品婷婷| 亚洲免费视频网站| 亚洲国产第一| 欧美ed2k| 欧美www视频| 最新亚洲激情| 亚洲一区二区在线| 久久福利视频导航| 久久综合激情| 欧美日韩一区精品| 国产欧美一区二区三区久久| 国产午夜亚洲精品不卡| 在线电影一区| 欧美成熟视频| 欧美色道久久88综合亚洲精品| 国产精品嫩草影院一区二区| 国产亚洲一区二区三区| 亚洲国产女人aaa毛片在线| 日韩午夜三级在线| 欧美一区二区三区男人的天堂| 久久久精彩视频| 亚洲激情图片小说视频| 亚洲少妇自拍| 欧美成人一区在线| 国产亚洲欧美日韩一区二区| 亚洲靠逼com| 久久深夜福利| 亚洲午夜国产成人av电影男同| 另类成人小视频在线| 国产精品久久久久久久app| 在线日韩av片| 日韩一级黄色av| 亚洲欧美偷拍卡通变态| 嫩草伊人久久精品少妇av杨幂| 亚洲视频欧美视频| 欧美国产日韩在线| 亚洲成人资源| 久久亚洲一区二区| 亚洲一区亚洲| 欧美另类女人| 亚洲精品视频在线播放| 麻豆精品在线播放| 亚洲综合色网站| 欧美激情国产日韩| 亚洲国产99精品国自产| 久久精品中文字幕一区二区三区| 欧美激情一区二区三区成人| 先锋影院在线亚洲| 国产精品久久久久av免费| 99精品视频免费观看| 欧美成人一二三| 久久精品91| 国产一区欧美| 久久不见久久见免费视频1| 亚洲一区二区在线视频| 国产精品国产a级| 亚洲欧美日韩国产综合精品二区| 亚洲精品资源| 欧美日韩在线一二三| 亚洲精品一区二区三区樱花| 欧美激情久久久久久| 狠狠狠色丁香婷婷综合久久五月 | 久久资源av| 国产欧美日韩91| 午夜日韩视频| 性欧美超级视频| 国产一区视频观看| 久久这里有精品视频| 久久亚洲综合色| 亚洲精品国精品久久99热| 1024国产精品| 蜜桃av一区二区在线观看| 欧美中文字幕不卡| 亚洲国产成人精品久久久国产成人一区 | 欧美精品一区二区精品网| 亚洲激情一区二区三区| 欧美成人国产| 欧美精品成人| 一区二区三区精品国产| 亚洲视频一二| 好男人免费精品视频| 欧美国产日韩视频| 欧美日韩精品一区二区三区四区| 亚洲午夜羞羞片| 香蕉久久a毛片| 亚洲激情成人在线| 中文日韩在线视频| 国语自产精品视频在线看抢先版结局 | 99精品视频一区| 国产精品一区一区三区| 久久只有精品| 欧美精品一区二区三区四区| 午夜精品久久久| 卡通动漫国产精品| 午夜精品久久久99热福利| 久久久综合精品| 一区二区三区欧美| 欧美诱惑福利视频| 日韩亚洲不卡在线| 亚洲嫩草精品久久| 亚洲国产成人精品久久| 亚洲一二三区精品| 91久久精品国产91性色| 亚洲一区久久久| 亚洲国产影院| 亚洲伊人第一页| 亚洲精品久久久久久久久久久| 亚洲午夜黄色| 99在线热播精品免费| 欧美在线亚洲| 午夜久久99| 欧美日韩国产探花| 欧美福利视频一区| 国产日韩欧美在线播放| 日韩一级网站| 亚洲精品一区二| 亚洲女同精品视频| 亚洲美女黄网| 久久亚洲美女| 久久免费少妇高潮久久精品99| 欧美日韩国产综合视频在线| 麻豆精品在线观看| 韩国成人精品a∨在线观看| 亚洲综合国产精品| 亚洲一区二区三区午夜| 亚洲黄色免费网站| 国自产拍偷拍福利精品免费一| 一区二区三区国产精华| 日韩视频精品在线| 欧美成人激情视频免费观看| 久久精品亚洲热| 国产精品香蕉在线观看| 一区二区三区精品视频| 亚洲午夜av在线| 欧美日韩一级片在线观看| 亚洲国产日韩欧美在线99| 亚洲日韩视频| 欧美精品一区视频| 亚洲激情在线观看视频免费| 亚洲欧洲一区二区在线观看| 久久久蜜桃精品| 欧美国产精品劲爆| 亚洲人成人一区二区三区| 欧美激情欧美狂野欧美精品| 亚洲国产精品一区在线观看不卡 | 久久国产精品电影| 久久久欧美精品sm网站| 激情成人亚洲| 国产精品一区二区三区四区| 中国成人黄色视屏| 国产精品国产亚洲精品看不卡15| 亚洲人午夜精品免费| 日韩一二三在线视频播| 欧美特黄视频| 欧美在线免费观看| 欧美高清视频一二三区| a4yy欧美一区二区三区| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲级视频在线观看免费1级| 麻豆成人在线播放| 亚洲精品久久久久中文字幕欢迎你| 日韩亚洲精品在线| 国产精品国产亚洲精品看不卡15| 午夜精品视频一区| 男女精品视频| 亚洲午夜av在线| 国内精品久久久久国产盗摄免费观看完整版 | 午夜视频久久久久久| 国产一区二区三区在线观看精品| 久久久久.com| 99re热精品| 久久国产一区二区三区| 亚洲国产另类久久精品| 国产精品国产三级国产普通话99| 欧美一区二区三区播放老司机| 亚洲日本成人在线观看| 国产日韩高清一区二区三区在线| 麻豆91精品91久久久的内涵| 在线一区观看| 免费在线成人av| 午夜一级久久| 亚洲精品欧洲| 国产一区二区三区久久悠悠色av | 日韩视频免费观看高清在线视频| 国产精品超碰97尤物18| 久久精品国产99国产精品| 亚洲日本一区二区| 久久夜色精品国产欧美乱| 一区二区三区国产在线| 伊人成年综合电影网| 国产精品福利在线观看网址| 蜜乳av另类精品一区二区| 一区二区三区四区五区精品视频| 欧美+日本+国产+在线a∨观看| 性做久久久久久| 亚洲精品自在久久| 亚洲国产综合在线| 极品少妇一区二区三区| 国产日韩欧美91|