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

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]本文通過(guò)QtE編程,完成對(duì)基于ARM9的SBC-2410X開發(fā)板上LED的控制,并詳細(xì)說(shuō)明從程序設(shè)計(jì)、移植到運(yùn)行的過(guò)程

摘  要:QtE(Qt/Embedded)是挪威Trolltech公司專門為嵌入式系統(tǒng)設(shè)計(jì)的圖形用戶界面(GUI)的一個(gè)工具包。本文通過(guò)QtE編程,完成對(duì)基于ARM9的SBC-2410X開發(fā)板上LED的控制,并詳細(xì)說(shuō)明從程序設(shè)計(jì)、移植到運(yùn)行的過(guò)程。程序能很好的運(yùn)行在開發(fā)板上,驗(yàn)證了程序的有效性和可靠性。結(jié)果說(shuō)明用QtE開發(fā)的應(yīng)用程序界面清晰美觀,操作簡(jiǎn)單方便。
關(guān)鍵詞:QtE  ARM9  GUI  SBC-2410X


引言 

    近年來(lái),由于ARM(Advanced RISC Machines)在性能、功耗、成本和體積上的優(yōu)勢(shì),使得它在嵌入式系統(tǒng)中的發(fā)展如日中天,它在工業(yè)控制、航空航天、軍事領(lǐng)域、消費(fèi)電子、智能家電和視頻監(jiān)控等方面都發(fā)揮了重大的作用。很多人都迫切地想學(xué)習(xí)ARM,以筆者的經(jīng)驗(yàn),從最基本的LED控制學(xué)起,是一個(gè)不錯(cuò)的選擇。
 
    如果不熟悉Linux,可能對(duì)QtE的概念知之甚少,它是挪威Trolltech公司為各種系統(tǒng)設(shè)計(jì)的圖形用戶界面工具包,采用c++語(yǔ)言編程。QtE的優(yōu)點(diǎn)有:跨平臺(tái),可以方便的連接數(shù)據(jù)庫(kù),可以將程序與Java集成等。其實(shí),QtE在一些高端的移動(dòng)手持設(shè)備中早已深入人心,Troll—tech公司在QtE的基礎(chǔ)上開發(fā)了一個(gè)應(yīng)用環(huán)境Qtopia,目前已有很多公司采用Qtopia來(lái)開發(fā)他們的主流PDA。當(dāng)然,Qt也有它的缺點(diǎn),既不能提供IDE(集成開發(fā)環(huán)境),但這個(gè)缺點(diǎn)在強(qiáng)大的Linux下顯得微不足道。使用gcc/g++,加上Qt的開發(fā)工具:Qt Designer,tmake/qmake,UIC等,開發(fā)可視化程序?qū)⒆兊檬秩菀住?BR>
    要學(xué)習(xí)ARM,選擇一款好的開發(fā)板是必不可少的。SBC一2410X是廣州友善之臂公司設(shè)計(jì)的一款基于ARM9的開發(fā)板,操作系統(tǒng)是韓國(guó)的mizi-linux。SBC-2410X不同于uClinux,它的接口豐富,且支持MMU、QtE2.3.7,同時(shí)提供了控制LED的命令行方式。


1 系統(tǒng)需求

   ◇完全安裝RedHat9.0。
   ◇在Linux下建立QtE編譯環(huán)境。
   ◇開發(fā)板上已經(jīng)加載LED設(shè)備驅(qū)動(dòng)程序。
    注意:你所建立的QtE版本必須與開發(fā)板所支持的版本一致。


2 程序設(shè)計(jì)
    在Linux下,用系統(tǒng)自帶的Qt Designer來(lái)編寫程序。Qt Designer是一個(gè)優(yōu)秀的可視化開發(fā)工具,用它來(lái)設(shè)計(jì)十分容易。它的界面類似于Delphi,但使用C++語(yǔ)言編寫應(yīng)用程序。Qt程序設(shè)計(jì)里的一個(gè)亮點(diǎn)就是SignaI-_Slot機(jī)制,它有點(diǎn)類似于VC++里的消息機(jī)制。當(dāng)一個(gè)組件發(fā)出Signal時(shí),其他一個(gè)組件或多個(gè)組件可以通過(guò)Slot接收發(fā)來(lái)的SignaI,組件本身也可以接收自己的Signal,這樣處理一個(gè)事件將變得非常容易。Qt Designer的優(yōu)點(diǎn)不僅在于它可以十分方便的設(shè)計(jì)圖形用戶界面,還表現(xiàn)在可以用連接工具很容易的把Signals和Slots連接起來(lái)。用戶自己設(shè)計(jì)的程序添加在**.ui.h中。

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

 


(1)connect(initPushButton.SIGNAL(clicked()),this.SLOT(initial()))
    當(dāng)Initialize按鈕按下時(shí),LedForm對(duì)話框接收此信號(hào),并執(zhí)行initial()函數(shù)。Linux操作系統(tǒng)把所有的設(shè)備都看成文件,因此對(duì)設(shè)備的操作控制可以通過(guò)open()、ioctl()等函數(shù)實(shí)現(xiàn)。在initial()函數(shù)中就是調(diào)用了open()函數(shù)來(lái)打開LED設(shè)備的。

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

    當(dāng)Begin按鈕按下時(shí),LedForm對(duì)話框接收此信號(hào),并執(zhí)行modeSel()函數(shù)。在modeSel()函數(shù)中開啟定時(shí)器,并創(chuàng)建另外一個(gè)連接用來(lái)循環(huán)顯示LED。在命令行方式中,LED的循環(huán)顯示要用到死循環(huán),并用鍵盤中斷來(lái)控制循環(huán);而在Qt或其他可視化語(yǔ)言中,則要用到定時(shí)器來(lái)控制循環(huán)。

(3)函數(shù)open()

    在<fcntl.h>中聲明,含義為打開設(shè)備文件。打開成功返回0;失敗返回一1。

(4)函數(shù)ioctl()

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

(5)函數(shù)select()

    在<sys/select.h>中聲明,含義為經(jīng)過(guò)多長(zhǎng)時(shí)間訪問(wèn)一次設(shè)備。


3 程序移植與運(yùn)行
    要想使程序運(yùn)行在開發(fā)板的Qtopia中,則必須在建立的QtE環(huán)境下編譯,并設(shè)置好環(huán)境變量。終端進(jìn)入所建立的QtE目錄后,環(huán)境變量或運(yùn)行環(huán)境變量和腳本設(shè)置如下:
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

    值得注意的一點(diǎn)是:用Linux自帶的Qt Designer創(chuàng)建的工程文件只適用于qmake,而筆者建立的QtE環(huán)境只能用tmake來(lái)生成makefile,因此需要修改led.pro文件,讓它適用于tmake,修改如下:
TEMPLATE =app
CoNFIG +=qtopia warn_on release
SoURCES +=main.epp
INTERFACES =led.ui
TARGET =led

    以上的工作做完后,就可以編譯了。編譯成功后生成可執(zhí)行的二進(jìn)制文件led,然而要使程序運(yùn)行在開發(fā)板上的qtopia桌面上,還需要一個(gè)桌面文件led.desktop和自定義的一個(gè)圖標(biāo)led.png。桌面文件如下:
[Desktop Entry]
Comment=a LED Control Program
Exee=led
Icon=led
Type=Application
Name=LED Control

    然后,把led復(fù)制到SBC-2410X下/opt/qtopia/bin目錄下,led.png復(fù)制到/opt/qtopia/pics目錄下,led.desktop復(fù)制到/0pt/qtopia/apps/Applications目錄下。最后,用ehmod a+X led改變文件led的權(quán)限,重新啟動(dòng)系統(tǒng),便可看到led.png的圖標(biāo)顯示在qtopia桌面上,點(diǎn)擊此圖標(biāo)就可運(yùn)行程序了。


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

(1) 程序的初始化

int fd: //LED設(shè)備文件句柄
int type=1; //默認(rèn)方式為計(jì)數(shù)器
double period=0.2; //默認(rèn)時(shí)間間隔
QTimer*t=new QTimer(Q″timer″);//創(chuàng)建定時(shí)器
void LedForm::initial(){
fd=open(″/dev/leds″,0); //打開LED設(shè)備
//其他一些初始化語(yǔ)句
一>stop(); //關(guān)閉定時(shí)器


(2) LED顯示方式的設(shè)置

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<<step;}
else{led_bitmap=1<<(14一step);}
break;
case 1: //方式1:計(jì)數(shù)器
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設(shè)備的讀取及調(diào)用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)循環(huán)顯示的實(shí)現(xiàn)
void LedForm::modeSel(){
t-->start(O);//啟動(dòng)定時(shí)器,并立即發(fā)出Signal- timeout()
connect(t,SIGNAL(timeout()),this.SLOT(1edDisplay()));
}


結(jié) 語(yǔ)
    隨著通信行業(yè)的迅猛發(fā)展,移動(dòng)手持設(shè)備必將成為人們工作、學(xué)習(xí)和生活的主流,用Qt設(shè)計(jì)移動(dòng)手持設(shè)備的GUI有著得天獨(dú)厚的優(yōu)勢(shì)。目前,Qt應(yīng)用于全世界上百個(gè)軟件開發(fā)項(xiàng)目中。在我國(guó),Qt的發(fā)展也有星星之火可以燎原之勢(shì)。本文通過(guò)一個(gè)最基礎(chǔ)的小程序向讀者演示了怎樣使用Qt開發(fā)應(yīng)用程序,以及怎樣建立Qt與ARM的聯(lián)系,希望對(duì)讀者學(xué)習(xí)ARM和Qt起到一定的幫助作用。

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

上海2025年9月5日 /美通社/ -- 由上海市經(jīng)濟(jì)和信息化委員會(huì)、上海市發(fā)展和改革委員會(huì)、上海市商務(wù)委員會(huì)、上海市教育委員會(huì)、上海市科學(xué)技術(shù)委員會(huì)指導(dǎo),東浩蘭生(集團(tuán))有限公司主辦,東浩蘭生會(huì)展集團(tuán)上海工業(yè)商務(wù)展覽有...

關(guān)鍵字: 電子 BSP 芯片 自動(dòng)駕駛

推進(jìn)卓越制造,擴(kuò)大產(chǎn)能并優(yōu)化布局 蘇州2025年9月5日 /美通社/ --?耐世特汽車系統(tǒng)與蘇州工業(yè)園區(qū)管委會(huì)正式簽署備忘錄,以設(shè)立耐世特亞太總部蘇州智能制造項(xiàng)目。...

關(guān)鍵字: 智能制造 BSP 汽車系統(tǒng) 線控

慕尼黑和北京2025年9月4日 /美通社/ -- 寶馬集團(tuán)宣布,新世代首款量產(chǎn)車型BMW iX3將于9月5日全球首發(fā),9月8日震撼亮相慕尼黑車展。中國(guó)專屬版車型也將在年內(nèi)與大家見(jiàn)面,2026年在國(guó)內(nèi)投產(chǎn)。 寶馬集團(tuán)董事...

關(guān)鍵字: 寶馬 慕尼黑 BSP 數(shù)字化

北京2025年9月4日 /美通社/ --?在全球新一輪科技革命與產(chǎn)業(yè)變革的澎湃浪潮中,人工智能作為引領(lǐng)創(chuàng)新的核心驅(qū)動(dòng)力,正以前所未有的深度與廣度重塑各行業(yè)發(fā)展格局。體育領(lǐng)域深度融入科技變革浪潮,駛?cè)霐?shù)字化、智能化轉(zhuǎn)型快車...

關(guān)鍵字: 人工智能 智能體 AI BSP

上海2025年9月2日 /美通社/ -- 近日,由 ABB、Moxa(摩莎科技)等八家企業(yè)在上海聯(lián)合發(fā)起并成功舉辦"2025 Ethernet-APL 技術(shù)應(yīng)用發(fā)展大會(huì)"。會(huì)議以"破界?融合...

關(guān)鍵字: ETHERNET 智能未來(lái) BSP 工業(yè)通信

11萬(wàn)+人次!5000+海外買家! 展會(huì)落幕,感恩同行!明年8月深圳再見(jiàn)! 深圳2025年9月1日 /美通社/ -- 據(jù)物聯(lián)網(wǎng)世界報(bào)道。 在AIoT(人工智能+物聯(lián)網(wǎng))技術(shù)加速滲透、全球數(shù)字化轉(zhuǎn)型深化,以...

關(guān)鍵字: IoT 物聯(lián)網(wǎng) TE IC

傳感器模塊能實(shí)現(xiàn)便捷無(wú)接觸的后備箱或側(cè)滑門開啟,適配各種車輛架構(gòu) 該24 GHz雷達(dá)傳感器可集成于保險(xiǎn)杠或底盤上,并通過(guò)特定的手勢(shì)或腳部動(dòng)作觸發(fā)響應(yīng) 已為多家歐洲主流車企啟動(dòng)量產(chǎn)交付 德國(guó)布爾2025...

關(guān)鍵字: 傳感器 BSP 觸發(fā) 保險(xiǎn)杠

以高效節(jié)能方案繪制AI算力綠色未來(lái) 上海2025年8月29日 /美通社/ -- 8月28日,臺(tái)達(dá)受邀出席"2025中國(guó)智算產(chǎn)業(yè)綠色科技大會(huì)",全方位分享臺(tái)達(dá)在智算領(lǐng)域的前沿洞見(jiàn)與綠色解決方...

關(guān)鍵字: AI 可持續(xù)發(fā)展 數(shù)據(jù)中心 BSP

淄博2025年8月29日 /美通社/ -- 8月26日至27日,TÜV南德意志集團(tuán)(以下簡(jiǎn)稱"TÜV南德")受邀參加由淄博市...

關(guān)鍵字: BSP 人工智能 信息安全 新加坡

北京2025年8月28日 /美通社/ -- 近日,北京亦莊創(chuàng)新發(fā)布消息,北京經(jīng)濟(jì)技術(shù)開發(fā)區(qū)(簡(jiǎn)稱北京經(jīng)開區(qū),又稱北京亦莊)以"高效辦成一件事"為抓手,圍繞企業(yè)信用修復(fù)的全流程全環(huán)節(jié),打造經(jīng)開區(qū)特色的&...

關(guān)鍵字: 數(shù)字化 集成 BSP 數(shù)據(jù)共享
關(guān)閉