rs232 linux win32 cz5


K U R S
Programowanie portu szeregowego
w systemach operacyjnych Linux
i Windows, część 5
Umiejętność programowej obsługi stanowił zapowiedz dobrego zestawu mów linuksowych  KDE, który jest
narzędzi RAD (Rapid Application De- tworzony właśnie z użyciem Qt.
interfejsu RS232 od strony
velopment) dla systemów Linux i Win- Kolejną zaletą Qt jest możliwość
komputera PC jest dziś istotnym
dows. Niestety, w 2005 roku firma współpracy z wieloma kompilatorami
elementem elektronicznego
Borland zrezygnowała z dalszego roz- C++. Na potrzeby tego kursu użyto
woju środowiska Kylix, traktując je na rozwiązań Open Source, co zaowo-
rzemiosła. W niniejszym
równi z tak leciwymi produktami jak cowało wykorzystaniem kompilato-
kursie piszemy jak w praktyce
Borland Turbo C++. Na szczęście na ra GCC, który w wersji dla systemu
oprogramować port szeregowy
przenośnych IDE świat się nie kończy Windows dostępny jest m.in. w posta-
w środowiskach Linux i Windows.
i stworzono wiele przenośnych biblio- ci pakietu MinGW.
tek, a więc programiści mają w czym
Wiele miejsca poświęcamy
wybierać. Określenie  przenośnych Instalacja biblioteki Qt
pisaniu przenośnych aplikacji
dotyczy tu kodu zródłowego, a nie i narzędzi wspomagających
GUI, które korzystają z interfejsu
 jak to ma miejsce w przypadku ję- w systemie Windows
szeregowego i zachowują zyków Java, C#, czy platformy .NET Wersję Open Source pakietu Qt
 interpretowanych na podstawie tzw. w wersji 4.0.1, zarówno dla systemu
się tak samo w systemach
kodu bajtowego, gdzie konieczna jest Windows jak i Linux, można pobrać
Windows jak i Linux. Wszystkie
wcześniejsza instalacja Wirtualnej Ma- z ftp://ftp.trolltech.com/qt/source/. Dla
omawiane zagadnienia poparte
szyny Javy lub jej odpowiednika. Wy- Windows, biblioteka jest dostarczana
korzystanie bibliotek przenośnych od- w postaci pliku qt win opensource src-
są szczegółowo opisanymi
bywa się zgodnie z maksymą  napisz  4.0.1.zip. Archiwum należy rozpa-
praktycznymi przykładami.
raz, skompiluj (i uruchom) wszędzie . kować w miejscu, w którym chcemy
Ten sam kod zródłowy kompilowany mieć na dysku twardym zainstalowa-
W poprzednich częściach kur- jest na różnych platformach, w wyni- ną bibliotekę Qt. W moim przypadku
su poznaliśmy, w jaki sposób można ku czego dla każdej z nich powstaje był to katalog C:\qt win opensour-
oprogramować port szeregowy w syste- natywny kod wykonywalny. ce src 4.0.1. Ze względu na to, że
mach Linux i Windows (32 bitowych). Najbardziej popularnymi bibliote- wersja darmowa, jako pakiet Open
Została przedstawiona uniwersalna kami służącymi do tworzenia aplika- Source, rozpowszechniana jest w wer-
klasa obsługi tego interfejsu, której cji przenośnych są: wxWidgets (daw- sji zródłowej, instalacja polega na jej
wykorzystanie jest możliwe z każdym niej wxWindows), Qt, Ultimate++, skompilowaniu. W wyniku kompilacji
kompilatorem języka C++ i biblioteką FOX, V. Różnią się one przede powstają niezbędne narzędzia i biblio-
STL. W następnych odcinkach pokażę wszystkim możliwościami, elegancją teki. Jednak zanim przystąpimy do
przykład prostej aplikacji okienkowej dostarczanego przez nie API, łatwością kompilacji, musimy zaopatrzyć się
działającej w obu systemach operacyj- tworzenia interfejsu graficznego w spo- w kompilator, na przykład MinGW.
nych i współpracującej z programem sób wizualny, funkcjonalnością wersji Kompilator ten można ściągnąć osob-
Example1.c pracującym na mikrokon- dostępnych bezpłatnie, jakością doku- no (http://www.mingw.org/) lub wraz
trolerze ATmega8. Funkcjonalność tej mentacji, czy wreszcie popularnością z jednym z wielu darmowych edyto-
aplikacji polega na wysłaniu jedno- i perspektywami rozwoju. Biorąc pod rów w stylu IDE. W niniejszym kur-
bajtowego zapytania i prezentacji od- uwagę wymienione cechy, toolkit Qt sie wykorzystano IDE Code Blocks
powiedzi przesłanej przez mikrokon- (czytaj ang. cute  miły, sympatyczny) (w skrócie C::B), dostępne wraz
troler, lub informacji o braku takiej wyróżnia się eleganckim API (w prze- z kompilatorem MinGW na stronie
odpowiedzi. Jako narzędzie do stwo- ciwieństwie np. do API wxWidgets, internetowej http://www.codeblocks.
rzenia programu przenośnego wybrano przypominającego bibliotekę MFC), org/. Jedną z zalet tego edytora jest
bibliotekę Qt 4 (wersja Qt 4.0.1 Open dużymi możliwościami, dobrą doku- to, że posiada on wzorzec (template)
Source) firmy Trolltech. mentacją (Qt Assistant) i świetnym projektu Qt, co bardzo ułatwia jego
narzędziem do tworzenia interfej- integrację z tą biblioteką. Co ciekawe,
Dlaczego Qt? su użytkownika w sposób wizualny sam edytor jest tworzony z użyciem
Na rynku istnieje wiele narzędzi  Qt Designer. Jest przy tym dostęp- konkurencyjnego pakietu wxWidgets.
służących do tworzenia przenośnych ny bezpłatnie w formie Open Source Edytor C::B wraz z kompilatorem
aplikacji z graficznym interfejsem na licencji GPL, zarówno dla syste- MinGW należy zainstalować w typo-
użytkownika. Do niedawna obiecują- mu Linux jak i Windows (począwszy wy dla systemu Windows sposób.
co zapowiadał się rozwój pakietu IDE od wersji 4). Jest to biblioteka stale Po zainstalowaniu edytora i kom-
(Integrated Development Environment) rozwijana przez firmę Trolltech. Co pilatora przystępujemy do zainstalo-
Kylix firmy Borland, który wraz ze ciekawe, w parze z jej rozwojem idzie wania biblioteki Qt. Sama instalacja
środowiskami Delphi i C++ Builder, rozwój popularnego pulpitu dla syste- tego pakietu jest szczegółowo opisana
Elektronika Praktyczna 6/2007
89
K U R S
bin), w czasie, Tworzenie aplikacji testowej
gdy tworzone z Graficznym Interfejsem
są pliki Make- Użytkownika
file projektów Wykorzystanie biblioteki Qt jest za-
przykładowych gadnieniem na tyle szerokim, że z po-
(w tym czasie wodzeniem mogłoby stanowić tematy-
na ekranie mo- kę niemałej wielkości książki. Dlatego
nitora wyświe- też opisano tylko te jego elementy,
tlane są napisy które są najistotniejsze z punktu wi-
 reading *.pro dzenia tematyki niniejszego kursu.
odnoszące się W celu zademonstrowania obsługi
do plików z ka- łącza RS232 przez aplikację okienko-
talogu QTDIR\ wą, stworzono program Example2W,
examples); którego działanie jest analogiczne do
3. Po skonfigu- działania programu Example1L, opi-
rowaniu należy sanego w jednej z poprzednich części
sprawdzić, czy kursu. Aplikacja umożliwia wysłanie
Rys. 4. Tworzenie graficznego interfejsu aplikacji za pomo- w katalogu QT- jednobajtowego zapytania, ustalenie
cą programu Qt Designer DIR znajduje się czasu break time oraz prezentację
plik Makefile. odpowiedzi udzielonej przez część
w pliku INSTALL, dostarczanym wraz Wersje Open Source są dostar- sprzętową.
z nim. Niestety, jedną z największych czane bez jakiejkolwiek gwaran- Tworzenie aplikacji rozpoczyna-
wad biblioteki Qt jest bardzo długi cji i zdarza się, że plik ten nie my od uruchomienia programu Qt
czas instalowania, mogący dochodzić zostanie stworzony. Jeśli go nie Designer, znajdującego się w katalo-
nawet do kilku godzin (i to nawet ma, należy utworzyć go ręcznie, gu QTDIR\bin. Rozmieszczając wid-
na całkiem szybkich komputerach). wpisując w linii poleceń: gety (linuksowe odpowiedniki okien,
Dlatego też warto zrezygnować za- qmake
przy czym w nomenklaturze WinAPI
równo z tworzenia plików Makefile, 4. W linii poleceń wpisać: za okno uważa się także takie obiek-
mingw32 make
przykładów, jak i ich kompilacji (kod ty, jak np. przyciski) na formie apli-
zródłowy przykładów jest umieszczo- Polecenie to jest wywołaniem kacji należy posłużyć się zestawem
ny w katalogu \examples). W razie programu make właściwego dla odpowiednich rozkładów (layout),
potrzeby można je skompilować póz- kompilatora MinGW. Po jego dzięki czemu finalny program będzie
niej. Podczas opisu instalacji i użyt- wywołaniu nastąpi długotrwały się zachowywał sensownie, na przy-
kowania biblioteki Qt odniesienia do proces kompilacji. Wraz z jego kład podczas prób rozciągania formy.
katalogu w jakim ma być ona zain- postępem, w katalogu QTDIR\lib Zachowanie formy można w każdej
stalowana będą dotyczyć przykłado- będą się pojawiać stosowne bi- chwili wypróbować za pomocą opcji
wego katalogu C:\qt win opensour- blioteki, a w katalogu QTDIR\bin preview (Ctrl+R). Dostępne są różne
ce src 4.0.1. Procedura instalacji jest będą to biblioteki *.dll oraz pro- style podglądu, między innymi styl
następująca: gramy narzędziowe, między in- Windows czy Motif. Zrzut ekranowy
1. Nadać poniższym zmiennym śro- nymi: programu Qt Designer zrobiony pod-
dowiskowym następujące wartości:  moc.exe (Meta Object Compi- czas tworzenia formy aplikacji testo-
PATH  dodać ścieżkę ler). Kompilator meta obiektów wej, przedstawiono na rys. 4.
C:\qt win opensource src 4.0.1\bin
biblioteki Qt; Po zaprojektowaniu wyglądu for-
QTDIR=C:\qt win opensource src 4.0.1
 uic.exe (User Interface Com- my, należy ją zapisać w wybranym
QMAKESPEC=C:\qt win opensource src
4.0.1\mkspecs\win32 g++
piler). Konwerter plików XML katalogu, najlepiej w tym, w którym
Dostęp do zmiennych śro- *.ui, będących wynikiem dzia- będzie umieszczony projekt aplikacji.
dowiskowych w nowych syste- łania programu Qt Designer, Forma jest zapisywana w postaci spe-
mach Windows NT odbywa się na kod zródłowy w języku cjalnego pliku XML z rozszerzeniem
poprzez Panel Sterowania >Sys- C++; *.ui. W przypadku aplikacji testowej
tem >Zaawansowane >Zmienne  designer.exe  narzędzie do Example2W, plik z danymi formy na-
środowiskowe. Można też w linii tworzenia GUI; zwano Example2WFrm.ui. Fragment
poleceń wpisać:  assistant.exe  pomoc bibliote- tego pliku przedstawiono na list. 17.
set NAZWA_ZMIENNEJ=ŚCIEŻKA
ki Qt; Aby z niego skorzystać w tworzonej
2. W linii poleceń wpisać:  linguist.exe  narzędzie do in- aplikacji, należy dokonać jego konwer-
configure
ternacjonalizacji aplikacji two- sji na plik nagłówkowy języka C++.
Program configure służy do rzonych za pomocą Qt. Można to zrobić za pomocą progra-
przygotowania programu qmake, 5. Kompilację można przerwać mu narzędziowego uic.exe, znajdujące-
który z kolei służy do tworzenia w czasie, gdy kompilowane są go się w katalogu QTDIR\bin. W tym
plików Makefile na podstawie przykładowe projekty. Każdy celu, będąc w katalogu projektu, nale-
plików zródłowych. Zagadnienia z nich można, wedle potrzeb, ży wpisać w linii poleceń:
uic  o ui_Example2WFrm.h Example2WFrm.
te zostaną opisane dalej. Dzia- skompilować pózniej.
ui
łanie programu configure można Po wykonaniu opisanych czyn-
przerwać po stworzeniu pro- ności biblioteka Qt 4.0.1 jest goto- Powyższa komenda spowoduje
gramu qmake (katalog QTDIR\ wa do użycia. stworzenie pliku ui_Example2WFrm.h,
Elektronika Praktyczna 6/2007
90
K U R S
Stworzenie obiektu formy i jego
List. 17. Fragment pliku z danymi List. 21. Konstruktor klasy Example-
formy Example2WFrm.ui uwidocznienie odbywa się w funkcji 2WFrm
Example2WFrm::Example2WFrm(QDialog
main(), zaimplementowanej w pliku
*parent)
: QDialog(parent)
main.cpp, który pokazano na list. 20.
{
frmExample2W ui.setupUi(this);
List. 20. Funkcja main()
name= frmExample2W > pComm = new CCommInterface();
#include
timerBreakTime = new
#include  Example2WFrm.h
QTimer(this);
int main(int argc, char *argv[])
0 //Set text codec for tr()
{
0 function
QApplication app(argc, argv);
346 QTextCodec::setCodecForTr(QTextCo
Example2WFrm frmEx;
213 dec::codecForName( ISO8859 2 ));
frmEx.show();
//Connect signals and slots
return app.exec();
connect(timerBreakTime,
}
SIGNAL(timeout()), this, SLOT(timer
Example2W  COM1 BreakTimeOverflow()));
connect(ui.pbtnSendQuery,
Sygnały i sloty
SIGNAL(clicked()), this, SLOT(click
edSendQuery()));
Wiemy już, jak zbudować formę
}
którego szkielet przedstawiono na aplikacji opartej na oknie dialogowym
list. 18. Plik ten zawiera definicję i jak ją pokazać użytkownikowi. Pozo-
klasy pomocniczej o nazwie Ui_frmE- stało odpowiedzieć na pytanie, w ja- Spójrzmy ponownie na list. 19.
xample2W, której pola stanowią de- ki sposób można tę aplikację ożywić, Klasa Example2WFrm posiada dwa
klaracje poszczególnych widgetów i in- czyli dodać funkcje obsługi zdarzeń, sloty, wymienione w sekcji private
nych elementów interfejsu graficznego. takich jak na przykład kliknięcie kla- slots. Są nimi funkcje, jakie mają
Klasa ta jest dziedziczona przez klasę wiszem myszki na przycisku. Otóż, być wywoływane w odpowiedzi
frmExample2W, umieszczoną w prze- w przypadku biblioteki Qt, odbywa na kliknięcie przycisku Send oraz
strzeni nazw Ui. Sposób jej wykorzy- się to za pośrednictwem mechani- przepełnienie timera timerBreakTi-
stania we właściwym pliku nagłów- zmu sygnałów i slotów. Mechanizm me, będącego polem tej klasy. Na
kowym formy zdradza list. 19. Klasą sygnałów i slotów polega na tym, że list. 21 przedstawiono konstruktor
formy aplikacji Example2W jest klasa określone zdarzenie dotyczące danego klasy Example2WFrm. Jak widać,
Example2WFrm, będąca potomkiem widgeta (np. kliknięcie myszką) po- w konstruktorze sloty łączone są
klasy okna dialogowego QDialog. Kla- woduje wyemitowanie przezeń sygna- z odpowiednimi sygnałami. Ta pro-
sa Example2WFrm posiada prywatne łu, zależnego od tego, jakie zdarzenie sta operacja wystarcza, aby zreali-
pole o następującej definicji: miało miejsce. Każdy widget lub for- zować mechanizm reagowania apli-
Ui::frmExample2W ui;
ma (ogólnie: każda klasa wywodząca kacji na wybrane zdarzenia.
Dzięki temu, wszystkie elementy się od klasy QObject) może emitować Ciąg dalszy opisu tworzenia apli-
Graficznego Interfejsu Użytkownika, sygnały oraz posiadać specjalne meto- kacji testowej działającej w systemie
stworzonego za pomocą programu QT dy zwane slotami. Sloty to po prostu Windows przedstawimy w następnej
Designer, są po prostu jednym z pól funkcje wywoływane w odpowiedzi na części kursu.
klasy formy. Można się do nich od- określone sygnały, które to sygnały Arkadiusz Antoniak, EP
woływać w ciele tej klasy za pomocą są z kolei funkcjami wywoływanymi arkadiusz.antoniak@ep.com.pl
formuły: w przypadku wystąpienia odpowiada- www.antoniak.ep.com.pl
ui.nazwa_elementu_gui
jących im zdarzeń. Aby dany slot był
wywoływany w odpowiedzi na dany Linki internetowe:
sygnał, należy go z tym sygnałem po- ftp://ftp.trolltech.com/qt/source/
List. 18. Szkielet pliku zródłowego
łączyć za pomocą specjalnej funkcji http://www.mingw.org/
ui_Example2WFrm.h, określającego
connect(). Zasadę tę ilustruje rys. 5. http://www.codeblocks.org/
interfejs graficzny formy
class Ui_frmExample2W
Nie każdy slot da się połączyć z da-
{
nym sygnałem. Połączenie jest
//Deklaracje pol i metod klasy
};
możliwe, gdy lista argumen-
namespace Ui {
class frmExample2W: public tów slotu jest podzbiorem li-
Ui_frmExample2W {};
sty argumentów sygnału. Slot,
} // namespace Ui
połączony z danym sygnałem,
wywoływany jest z tymi sa-
List. 19. Właściwy plik nagłówkowy
mymi argumentami, z którymi
formy Example2WFrm.h
wywoływany jest sygnał (lub
#include  ui_Example2WFrm.h
ich podzbiorem właściwym
#include  CommInterface.h
#include
dla listy argumentów slotu).
class Example2WFrm : public QDialog
{ Jeden slot może być połączo-
Q_OBJECT
ny z dowolną liczbą sygnałów,
public:
Example2WFrm(QDialog *parent = 0); a jeden sygnał może być połą-
~Example2WFrm();
czony z dowolną liczbą slotów.
private slots:
void timerBreakTimeOverflow(void);
Biblioteka Qt zapewnia dużą
void clickedSendQuery(void);
liczbę predefiniowanych sygna-
private:
QTimer *timerBreakTime;
łów i slotów, oprócz tego każ-
CCommInterface *pComm;
Ui::frmExample2W ui; dy jej użytkownik może two-
};
rzyć własne. Rys. 5. Mechanizm sygnałów i slotów
Elektronika Praktyczna 6/2007
91


Wyszukiwarka

Podobne podstrony:
rs232 linux win32 cz2
rs232 linux win32 cz6
rs232 linux win32 cz1
rs232 linux win32 cz8
rs232 linux win32 cz7
rs232 linux win32 cz3
rs232 linux win32 cz4
STM32 Butterfly RS232
Linux 2000 DVB T Experiments
linux kobiety
compilar linux
Linux IPCHAINS HOWTO Appendix Differences between ipchains and ipfwadm
systemy operacyjne cw linux apache mysql
Linux materialy
Linux System Plików
Asembler linux
Nauka słówek i memoryzacja na Puppy Linux
linux 1 00

więcej podobnych podstron