´ UCEN ˇ ´I TECHNICKE ´ V BRNE ˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA ELEKTROTECHNIKY ˇ ´ICH TECHNOLOGI´I A KOMUNIKACN ´ ˇ RIC ˇ ´I TECHNIKY USTAV AUTOMATIZACE A ME FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF CONTROL AND INSTRUMENTATION
´ AN ´ ´I LCD DISPLEJU ˚ KNIHOVNA PRO OVLAD LIBRARY FOR CONTROLLING LCD DISPLAY
´ RSK ˇ A ´ PRACE ´ BAKALA BACHELOR’S THESIS
´ AUTOR PRACE
ˇ LUTERA ONDREJ
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2010
´S ˇ MACHO, PH.D. ING. TOMA
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta elektrotechniky a komunikačních technologií Ústav automatizace a měřicí techniky
Bakalářská práce bakalářský studijní obor Automatizační a měřicí technika Student: Ročník:
Ondřej Lutera 3
ID: 106604 Akademický rok: 2009/2010
NÁZEV TÉMATU:
Knihovna pro ovládání LCD displejů POKYNY PRO VYPRACOVÁNÍ: 1. Seznamte se s mikrokontroléry firmy Frescale řady ColdFire a HCS08. 2. Seznamte se s grafickou knihovnou D4D firmy Freescale. 3. Navhněte rozšíření knihovny o funkce Text Box, List Box, Progress Bar a Edit Box. 4. Funkce Text Box, List Box, Progress Bar, Edit Box implementujte a odlaďte. DOPORUČENÁ LITERATURA: [1] MCF52235 ColdFire® Integrated Microcontroller Reference Manual. Rev. 5. Denver (Colorado): FreescaleSemiconductor, Inc. 09/2007. Document Number MCF52235RM. Termín zadání:
8.2.2010
Termín odevzdání:
Vedoucí práce:
Ing. Tomáš Macho, Ph.D.
31.5.2010
prof. Ing. Pavel Jura, CSc. Předseda oborové rady
UPOZORNĚNÍ: Autor bakalářské práce nesmí při vytváření bakalářské práce porušit autorská práva třetích osob, zejména nesmí zasahovat nedovoleným způsobem do cizích autorských práv osobnostních a musí si být plně vědom následků porušení ustanovení § 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení části druhé, hlavy VI. díl 4 Trestního zákoníku č.40/2009 Sb.
ABSTRAKT Pr´ace se zab´yv´a n´avrhem a implementac´ı grafick´ych objekt˚ u Text Box, List Box,Progress Bar a Edit Box do knihovny D4D firmy Freescale urˇcen´e pro ovl´ad´an´ı LCD displej˚ u. V´yvoj byl proveden pomoc´ı v´yvojov´eho kitu DEMOQE128 s procesorem ColdFire MCF51QE128 firmy Freescale.
ˇ ´ SLOVA KL´ICOV A Freescale, ColdFire V1, HCS08, MC9S08QE128, MCF51QE128, DEMOQE128, knihovna D4D, jazyk C, LCD, grafika
ABSTRACT This bachelor’s thesis deals with the design and implementation of graphics objects Text Box, List Box, Progress Bar and Edit Box to the library D4D by Freescale for controlling LCD displays. Development was performed using the development kit DEMOQE128 with MCF51QE128 ColdFire processor by Freescale.
KEYWORDS Freescale, ColdFire V1, HCS08, MC9S08QE128, MCF51QE128, DEMOQE128, library D4D, C language, LCD, graphics
LUTERA, O. Knihovna pro ovl´ad´an´ı LCD displej˚ u. Bakal´aˇrsk´a pr´ace. Brno: Vysok´e uˇcen´ı ´ technick´e v Brnˇe, Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı, Ustav automatizace a mˇeˇric´ı techniky, 2010. 69 s. Vedouc´ı pr´ace: Ing. Tom´aˇs Macho, Ph.D.
´ SEN ˇ ´I PROHLA Prohlaˇsuji, ˇze svou bakal´aˇrskou pr´aci na t´ema Knihovna pro ovl´ad´an´ı LCD dis” plej˚ u“ jsem vypracoval samostatnˇe pod veden´ım vedouc´ıho bakal´aˇrsk´e pr´ace a s pouˇzit´ım odborn´e literatury a dalˇs´ıch informaˇcn´ıch zdroj˚ u, kter´e jsou vˇsechny citov´any v pr´aci a uvedeny v seznamu literatury na konci pr´ace. Jako autor uveden´e bakal´aˇrsk´e pr´ace d´ale prohlaˇsuji, ˇze v souvislosti s vytvoˇren´ım t´eto bakal´aˇrsk´e pr´ace jsem neporuˇsil autorsk´a pr´ava tˇret´ıch osob, zejm´ena jsem nezas´ahl nedovolen´ym zp˚ usobem do ciz´ıch autorsk´ych pr´av osobnostn´ıch a jsem si plnˇe vˇedom n´asledk˚ u poruˇsen´ı ustanoven´ı § 11 a n´asleduj´ıc´ıch autorsk´eho z´akona ˇc. 121/2000 Sb., vˇcetnˇe moˇzn´ych trestnˇepr´avn´ıch d˚ usledk˚ u vypl´yvaj´ıc´ıch z ustanoven´ı § 152 trestn´ıho z´akona ˇc. 140/1961 Sb.
V Brnˇe dne
...............
.................................. (podpis autora)
ˇ ´ ´I PODEKOV AN Dˇekuji vedouc´ımu bakal´aˇrsk´e pr´ace Ing. Tom´aˇsi Machovi, Ph.D. za u´ˇcinnou metodickou, pedagogickou a odbornou pomoc a dalˇs´ı cenn´e rady pˇri zpracov´an´ı m´e bakal´aˇrsk´e pr´ace.
V Brnˇe dne
...............
.................................. (podpis autora)
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
5
OBSAH ´ Uvod 1
V´yvojov´e prostˇredky
10
1.1
Mikrokontrol´ery Freescale s j´adrem HCS08 . . . . . . . . . . . . . . . .
10
1.1.1
Program´atorsk´y model HCS08 . . . . . . . . . . . . . . . . . . .
10
1.1.2
Mikrokontrol´er MC9S08QE128 . . . . . . . . . . . . . . . . . .
11
Mikrokontrol´ery Freescale s j´adrem ColdFire V1 . . . . . . . . . . . . .
13
1.2.1
Program´atorsk´y model ColdFire V1 . . . . . . . . . . . . . . . .
14
1.2.2
Mikrokontrol´er MCF51QE128 . . . . . . . . . . . . . . . . . . .
15
1.3
V´yvojov´y kit DEMOQE128 . . . . . . . . . . . . . . . . . . . . . . . .
15
1.4
Special Edition: CodeWarrior for Microcontrollers . . . . . . . . . . . .
17
1.4.1
17
1.2
2
9
Vytvoˇren´ı projektu . . . . . . . . . . . . . . . . . . . . . . . . .
Knihovna D4D Freescale
20
2.1
Charakteristika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2.1.1
Popis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
Soubory knihovny D4D . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.2.1
Common Files . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.2.2
Configuration example . . . . . . . . . . . . . . . . . . . . . . .
21
2.2.3
Graphic Objects . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.2.4
Low level drivers . . . . . . . . . . . . . . . . . . . . . . . . . .
22
Aplikaˇcn´ı rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.3.1
Typy promˇenn´ych . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.3.2
Pˇreddefinovan´e hodnoty . . . . . . . . . . . . . . . . . . . . . .
23
2.3.3
Barevn´a sch´emata . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.3.4
P´ısma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.3.5
D4D Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.3.6
Grafick´e objekty . . . . . . . . . . . . . . . . . . . . . . . . . .
26
Struktura grafick´ych objekt˚u . . . . . . . . . . . . . . . . . . . . . . . .
29
2.4.1
31
2.2
2.3
2.4
Vol´an´ı grafick´ych objekt˚u . . . . . . . . . . . . . . . . . . . . .
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
2.5
3
D˚uleˇzit´e vlastnosti objektov´eho rozhran´ı knihovny . . . . . . . . . . . .
32
2.5.1
Pˇred´av´an´ı stisknut´ych kl´aves . . . . . . . . . . . . . . . . . . . .
33
2.5.2
Buffer d4d scratchPad . . . . . . . . . . . . . . . . . . . . . . .
34
2.5.3
Vykreslov´an´ı textu . . . . . . . . . . . . . . . . . . . . . . . . .
35
Implementace grafick´ych objektu˚
37
3.1
D4D TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.1.1
Grafick´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.1.2
Ovl´ad´an´ı objektu . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.1.3
Pouˇzit´ı objektu v aplikaci
. . . . . . . . . . . . . . . . . . . . .
40
D4D ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3.2.1
Grafick´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.2.2
Ovl´ad´an´ı objektu . . . . . . . . . . . . . . . . . . . . . . . . . .
45
3.2.3
Pouˇzit´ı objektu v aplikaci
. . . . . . . . . . . . . . . . . . . . .
45
D4D ProgressBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.3.1
Grafick´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.3.2
Pouˇzit´ı objektu v aplikaci
. . . . . . . . . . . . . . . . . . . . .
50
D4D EditBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.4.1
Grafick´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.4.2
Ovl´ad´an´ı objektu . . . . . . . . . . . . . . . . . . . . . . . . . .
54
3.4.3
Pouˇzit´ı objektu v aplikaci
55
3.2
3.3
3.4
4
6
. . . . . . . . . . . . . . . . . . . . .
Z´avˇer
58
Reference
59
˚ veliˇcin a zkratek Seznam symbolu,
60
Seznam pˇr´ıloh
61
A Tabulka ASCII
62
B DEMOQE128
63
C Prezentaˇcn´ı aplikace
64
C.1 Struktura projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
C.2 Ovl´ad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D Elektronick´a pˇr´ıloha
7
64 69
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
8
´ ˚ SEZNAM OBRAZK U 1.1
CPU registry [2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.2
Inicializace taktu MCU . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.1
Blokov´e sch´ema vol´an´ı objekt˚u . . . . . . . . . . . . . . . . . . . . . . .
32
3.1
Klasick´y Text Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.2
D4D Text Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.3
Klasick´y List Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3.4
D4D ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.5
Klasick´y Progress Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.6
D4D ProgressBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
3.7
Klasick´y Edit Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
3.8
D4D EditBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.1 ASCII tabulka znak˚u [8] . . . . . . . . . . . . . . . . . . . . . . . . . .
62
B.1 V´yvojov´y kit DEMOQE128 s procesory MC9S08QE128 a MCF51QE128
63
B.2 V´yvojov´y kit DEMOQE128 s LCD (vrchn´ı strana) . . . . . . . . . . . .
63
´ C.1 Uvodn´ ı obrazovka aplikace . . . . . . . . . . . . . . . . . . . . . . . . .
66
C.2 Obrazovka aplikace s objektem Text Box . . . . . . . . . . . . . . . . .
67
C.3 Obrazovka aplikace s objektem List Box . . . . . . . . . . . . . . . . . .
67
C.4 Obrazovka aplikace s objektem Progress Bar . . . . . . . . . . . . . . .
68
C.5 Obrazovka aplikace s objektem Edit Box . . . . . . . . . . . . . . . . . .
68
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
´ UVOD V praxi je mnoho aplikac´ı, kter´e potˇrebuj´ı vyuˇz´ıvat urˇcit´e uˇzivatelsk´e prostˇred´ı a komplikovanˇejˇs´ı zobrazovac´ı jednotky neˇz pouh´e LED displeje, cˇ i alfanumerick´e LCD. Vhodn´e se jev´ı r˚uzn´e grafick´e LCD displeje, kter´e dnes m˚uzˇ eme naj´ıt napˇr´ıklad v mobiln´ıch telefonech, pˇrehr´avaˇc´ıch a dalˇs´ı spotˇrebn´ı elektronice. A pr´avˇe pro vyuˇzit´ı grafick´ych LCD ve spojen´ı s mikrokontrol´ery Freescale byla navrˇzena grafick´a knihovna D4D. Hlavn´ım c´ılem pr´ace je implementovat zadan´e objekty do grafick´e knihovny D4D ˇ firmy Freescale. Knihovna byla dod´ana spoleˇcnost´ı Freescale Polovodiˇce Cesk´ a Republika s´ıdl´ıc´ı v Roˇznovˇe pod Radhoˇstˇem. Jedn´a se o kompletn´ı funkˇcn´ı knihovnu psanou v programovac´ım jazyce C, kter´a obsahuje i potˇrebn´e ovladaˇce pro LCD displeje. Pˇrednostnˇe je urˇcena pro procesory architektury ColdFire, ale snaˇz´ı se drˇzet jistou kompatibilitu i s j´adry HCS08. Pro vlastn´ı v´yvoj byl s knihovnou zap˚ujˇcen i v´yvojov´y kit P&E Micro DEMOQE128, kter´y obsahuje i LCD modul v´yrobce Display3000 urˇcen´y pˇr´ımo pro dan´y v´yvojov´y kit. Vlastn´ı v´yvojov´y kit je pak moˇzn´e osadit dvojic´ı procesor˚u MCF51QE128 a MC9S08QE128, kter´e budou d´ale pops´any. Kit obsahuje i vlastn´ı speci´aln´ı edici v´yvojov´eho software Freescale CodeWarrior. V tomto bude prov´adˇena vlastn´ı implementace a ladˇen´ı objekt˚u. Ke knihovnˇe je dod´ana i dokumentace, kter´a rozeb´ır´a z´akladn´ı vlastnosti a strukturu knihovny. Lze ji naj´ıt v elektronick´e formˇe na pˇriloˇzen´em m´ediu k t´eto bakal´aˇrsk´e pr´aci. Dokumentace je zejm´ena jak´ysi manu´al pro pouˇzit´ı knihovny v uˇzivatelsk´e aplikaci. Bliˇzsˇ´ı popis nˇekter´ych d˚uleˇzit´ych vlastnost´ı knihovny, zejm´ena spr´avy objekt˚u a jejich vnitˇrn´ı struktury nen´ı v dokumentaci rozebr´an. Prvn´ı kapitola bakal´aˇrsk´e pr´ace se zab´yv´a sezn´amen´ım s dan´ymi mikrokontrol´ery, v´yvojov´ym kitem a prostˇred´ım. N´aslednˇe je pops´ana knihovna D4D, jej´ı z´akladn´ı vlastnosti a struktura a nˇekter´e d˚uleˇzit´e vlastnosti objektov´eho rozhran´ı. Posledn´ı kapitola je vˇenov´ana n´avrhu a popisu vlastn´ıch implementovan´ych objekt˚u Text Box, List Box, Progress Bar a Edit Box a jejich pouˇzit´ı v uˇzivatelsk´e aplikaci.
9
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
´ ˇ VYVOJOV E´ PROSTREDKY
1 1.1
Mikrokontrol´ery Freescale s j´adrem HCS08
Rodina 8-bitov´ych mikrokontrol´er˚u HCS08 vych´az´ı ze starˇs´ı rodiny M68HC08, se kterou je plnˇe kompatibiln´ı, ale nav´ıc pˇrin´asˇ´ı nov´e instrukce implementuj´ıc´ı moˇznosti ladˇen´ı k´odu pˇr´ımo v MCU. Kaˇzd´y mikrokontrol´er z rodiny HCS08 se skl´ad´a z HCS08 j´adra, pamˇet´ı a dalˇs´ıch periferi´ı. Architektura j´adra HCS08 odpov´ıd´a uspoˇra´ d´an´ı von Neumann, kde data i program jsou um´ıstˇeny ve stejn´em adresn´ım pamˇet’ov´em prostoru. J´adro je schopn´e pracovat s hodinov´ym kmitoˇctem aˇz 40 MHz, zat´ımco sbˇernice pracuj´ı s poloviˇcn´ım hodinov´ym kmitoˇctem, tedy maxim´alnˇe 20 MHz. Pro ladˇen´ı programu pˇr´ımo za bˇehu, obsahuje j´adro tzv. Background debug controller (BDC), coˇz je integrovan´y ˇradiˇc pro ladˇen´ı programu, kter´y je prov´azan´y s v´yvojov´ym prostˇred´ım Freescale CodeWarrior pˇres BDM komunikaˇcn´ı rozhran´ı. Pomoc´ı BDC lze za bˇehu krokovat program v mikrokontrol´eru, cˇ´ıst stavy registr˚u, pamˇet’ov´ych m´ıst, nebo sledovat stavy port˚u. Mezi dalˇs´ı vlastnosti j´adra patˇr´ı podpora aˇz 32 zdroj˚u pˇreruˇsen´ı a hardwarov´e dek´odov´an´ı adres. Pro zrychlen´ı vykon´av´an´ı instrukc´ı bylo j´adro opatˇreno instrukˇcn´ı pipeline pro zˇretˇezen´e zpracov´an´ı, coˇz pˇr´ın´asˇ´ı zv´ysˇen´ı rychlosti oproti pˇredch˚udci M68HC08.
1.1.1
Program´atorsk´y model HCS08
Progr´am´atorsk´y model obsahuje: • 8-bit akumul´ator A • 16-bit indexov´y registr H:X, do kter´eho se d´a pˇristoupit zvl´asˇt’ ke spodn´ım 8 bit˚um X a horn´ım 8 bit˚um H • 16-bit programov´y cˇ´ıtaˇc PC • 16-bit ukazatel na z´asobn´ık SP. • stavov´y registr CCR pˇredstavuje 8 bit˚u, kde vyuˇzity jsou pouze bity 0-5 a 7. V´yznam jednotliv´ych bit˚u registru CCR je n´asleduj´ıc´ı: • C (Carry) - bit se nastav´ı na 1, jestliˇze doˇslo k pˇreteˇcen´ı nebo v´yp˚ujˇcce
10
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• Z (Zero) - pˇr´ıznak nulov´eho v´ysledku, nastav´ı se na 1, jestliˇze jsou vˇsechny bity v´ysledku nulov´e • N (Negative) - pˇr´ıznak z´aporn´eho v´ysledku operace v druh´em doplˇnku • I (Interrupt mask) - pomoc´ı tohoto bitu se povoluje nebo zakazuje maskovateln´e pˇreruˇsen´ı • H (Half carry) - nastav´ı se, pokud dojde k pˇrenosu ze 3. do 4. bitu. Pouˇz´ıv´a se pouze pro pr´aci v des´ıtkov´e soustavˇe. • V (Overflow) - nastav´ı se pˇri pˇrekroˇcen´ı rozsahu druh´eho doplˇnku
Obr´azek 1.1: CPU registry [2]
1.1.2
Mikrokontrol´er MC9S08QE128
Tento MCU s j´adrem HCS08 spad´a do n´ızkopˇr´ıkonov´e ˇrady Flexis QE128, kde mohou m´ıt mikrokontrol´ery stejn´a pouzdra, perif´erie i pinovou kompatibilitu s 32-bit MCU s j´adrem ColdFire V1, kter´e bude pops´ano d´ale. MC9S08QE128 pracuje aˇz na 50 MHz pˇri nap´ajec´ım napˇet´ı vyˇssˇ´ım jak 2,4 V. MCU je ale tak´e schopen pracovat jiˇz od 1,8 V
11
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
a 20 MHz, to vˇse v cel´em teplotn´ım rozsahu -40 ◦ C aˇz 85 ◦ C. D´ıky podpoˇre u´ sporn´ych m´od˚u a celkovˇe n´ızk´ym energetick´ym n´arok˚um je vhodn´y zejm´ena tam, kde je potˇreba nap´ajen´ı aplikace z akumul´ator˚u a n´ızk´e celkov´e n´aklady na zaˇr´ızen´ı. Mikrokontrol´er m´a 128 kB programov´e flash pamˇeti, kterou je schopn´e programovat v cel´em teplotn´ım i nap´ajec´ım provozn´ım rozsahu 1,8V - 3,6V. Pro data programu je k dispozici 8 kB pamˇeti SRAM. Pamˇeti mouhou b´yt chr´anˇeny ochrann´ymi obvody proti neautorizovan´emu pˇr´ıstupu a moˇzn´ym u´ prav´am. Jako vnˇejˇs´ı zdroj hodinov´eho kmitoˇctu mohou b´yt pouˇzity krystaly nebo keramick´e rezon´atory v rozsahu 31,25 kHz - 38,4 kHz cˇ i 1 MHz aˇz 16 MHz. Tyto se pˇripojuj´ı na piny EXTAL a XTAL. Dalˇs´ı moˇznost´ı je vyuˇz´ıt intern´ı zdroj hodin, kter´y m˚uzˇ e b´yt ˇr´ızen intern´ı nebo extern´ı referenc´ı. Rozsah generovan´ych hodin je pak od 2 do 50 MHz. Z d˚uvodu ochrany pˇred zbloudˇen´ım programu, zp˚usoben´ym chybou programu cˇ i poruchou, obsahuje mikrokontrol´er obvod Watchdog, detekci poklesu nap´ajec´ıho napˇet´ı s moˇznost´ı resetu cˇ i proveden´ı pˇreruˇsen´ı, ale tak´e detekci vadn´eho operaˇcn´ıho k´odu pˇri zpracov´an´ı instrukc´ı nebo ochranu flash pamˇeti. Periferie : • ADC - 24-kan´alov´y analogovˇe-ˇc´ıslicov´y pˇrevodn´ık s rozliˇsen´ım 12-bit, s cˇ asem pˇrevodu 2,5 µs, s moˇznost´ı automatick´e komparace nebo sn´ım´an´ım teploty pomoc´ı teplotn´ıho senzoru s pˇrevodem 1,7 mV/◦ C • ACMPx - Dva analogov´e kompar´atory s nastaviteln´ym pˇreruˇsen´ım pˇri n´abˇezˇ n´e hranˇe, sestupn´e hranˇe, s moˇznost´ı komparace s pevnou intern´ı napˇet’ovou referenc´ı a volbou pˇripojen´ı v´ystupu kompar´atoru na pin ACMPx0 • SCIx - dvojice s´eriov´ych rozhran´ı s pln´ym duplexn´ım reˇzimem a NRZ form´atem, pˇrij´ımaˇcem a vys´ılaˇcem s dvojit´ym ukl´ad´an´ım dat do bufferu. Programovatelnou pˇrenosovou rychlost´ı, vyhodnocen´ım stavu s´eriov´e linky pomoc´ı pˇreruˇsen´ı nebo programovˇe, moˇznost´ı volby d´elky vyslan´eho znaku 8-bit nebo 9-bit a schopnost´ı hardwarovˇe generovat a kontrolovat paritu • IICx - dvojice s´eriov´ych sbˇernic, kompatibiln´ıch se standardem I2C, s moˇznost´ı komunikace aˇz 100 kbps, vyhodnocen´ım stavu sbˇernic pomoc´ı pˇreruˇsen´ı, kter´e je ale spoleˇcn´e pro obˇe sbˇernice. IICx je moˇzn´e programovˇe nastavit aˇz na 64 r˚uzn´ych pˇrenosov´ych rychlost´ı.
12
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• SPIx - dvojice sbˇernic standardu SPI s moˇznost´ı operace jako ˇr´ıd´ıc´ı cˇ i ˇr´ızen´e zaˇr´ızen´ı, s pln´ym duplexn´ım reˇzimem a programovatelnou rychlost´ı • TMPx - jeden 6-ti kan´alov´y a dva 3 kan´alov´e cˇ´ıtaˇce o sˇ´ıˇrce 16-ti bit˚u, s moˇznost´ı generov´an´ı PWM sign´alu na sv´ych v´ystupech a schopnost´ı generovat pˇreruˇsen´ı • RTC - 8-mi bitov´y cˇ´ıtaˇc re´aln´eho cˇ asu s vlastn´ım vektorem pˇreruˇsen´ı, uˇz´ıvan´y zejm´ena jako cˇ asovaˇc pro generov´an´ı re´aln´ych hodin ve spojen´ı s extern´ım zdrojem pro vysokou pˇresnost generovan´eho kmitoˇctu cˇ i vyuˇzit´ım intern´ıho zdroje hodinov´eho kmitoˇctu 1 kHz nebo 32 kHz a dostupn´ych dˇeliˇcek kmitoˇctu • Podpora aˇz 70 vstupnˇe/v´ystupn´ıch pin˚u, kter´e jsou sd´ılen´e se vstupy/v´ystupy na cˇ ipu integrovan´ych v´ysˇe uveden´ych periferi´ı. Celkov´a zat´ızˇ itelnost, tedy souˇcet vˇsech proud˚u pin˚u nesm´ı pˇres´ahnout 100mA. • KBIx - tento modul umoˇznˇ uje aˇz 8 nez´avisl´ych extern´ıch pˇreruˇsen´ı z dan´ych pin˚u. Mikrokontrol´er obsahuje takov´e moduly dva, celkem tedy 16 extern´ıch pˇreruˇsen´ı s moˇznost´ı volby reakce na hrany sign´alu a s moˇznost´ı probuzen´ı procesoru z u´ sporn´ych m´od˚u • Podpora pro v´yvoj - zahrnuje Background debug controller (BDC) a On-chip debug module (DBG). BDC je jedno-vodiˇcov´e komunikaˇcn´ı rozhran´ı, slouˇz´ıc´ı k jednoduch´emu programovan´ı MCU a ladˇen´ı programu pˇri v´yvoji a podporuje pˇr´ıstupy do pamˇet´ı a tradiˇcn´ı lad´ıc´ı vlastnosti jako modifikace CPU registr˚u nebo breakpointy.
1.2
Mikrokontrol´ery Freescale s j´adrem ColdFire V1
J´adra ColdFire vych´az´ı ze starˇs´ı rodiny 68K, od kter´e pˇrevzala a zredukovala instrukˇcn´ı sadu. Architektura jader je typu RISC a v´ypoˇcty se prov´ad´ı v 32-bit sˇ´ırˇce, kdy vˇetˇsina instrukc´ı je dokonˇcena v jednom instrukˇcn´ım cyklu. RISC architektura u jader ColdFire vyuˇz´ıv´a promˇenn´e d´elky instrukc´ı. Instrukce mohou b´yt 16, 32 nebo 48 bit˚u dlouh´e. D´ıky tomu jsou kladeny menˇs´ı n´aroky na pamˇet’ a syst´emov´e prostˇredky. ColdFire pˇredstavuje dobr´y pomˇer mezi cenou a v´ykonem a je moˇzn´e k nˇemu integrovat mnoho pˇr´ıdavn´ych periferi´ı a modul˚u, mimo jin´e i jednotku pro pr´aci v plovouc´ı desetinn´e cˇ a´ rce (FPU). Tato
13
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
j´adra dok´azˇ´ı spouˇstˇet i operaˇcn´ı syst´emy typu Linux cˇ i Windows CE d´ıky implementovan´e jednotce pro spr´avu pamˇeti. Verze ColdFire V1 pˇredstavuje vhodnou platformu pro pˇrechod z 8-bit platformy na 32-bitovou. Paradoxem je, zˇ e vzniklo zjednoduˇsen´ım j´adra ColdFire V2. Tedy V1 je mladˇs´ı a vych´az´ı z V2. ColdFire V1 dok´azˇ e zpracov´avat 32-bitov´a data a instrukce ovˇsem sbˇernice je 8-bitov´a a stejnˇe tak i periferie, cˇ´ımˇz se snaˇz´ı drˇzet zpˇetnou kompatibilitu na u´ rovni pin˚u a periferi´ı s mikrokontrol´ery ˇrady HCS08. Totoˇzn´e z˚ustaly i v´yvojov´e n´astroje, coˇz v´yraznˇe zjednoduˇsuje v´yvoj aplikace i samotn´e programov´an´ı a ladˇen´ı. J´adro je schopn´e pracovat aˇz na 50 MHz, coˇz spoleˇcnˇe s architekturou RISC a zpracov´an´ım instrukc´ı v jednom cyklu pˇrin´asˇ´ı v´yrazn´e zrychlen´ı (aˇz 12x) oproti HCS08. Architektura se drˇz´ı typu von Neumann a j´adro je schopn´e adresovat 16 MB adresn´ıho prostoru, do kter´eho se poˇc´ıt´a jak flash, tak SRAM, moduly cˇ i perif´erie.
1.2.1
Program´atorsk´y model ColdFire V1
J´adro obsahuje: • 16 univers´aln´ıch 32-bitov´ych registr˚u pro pr´aci s daty cˇ i adresov´an´ı. D0 - D7, kter´e jsou uˇz´ıv´any vˇetˇsinou pro data a A0 - A6, kter´e mohou b´yt uˇzity pro programov´e ukazatele, indexovac´ı registry nebo z´akladn´ı adresn´ı registry. Samotn´a kapitola je registr A7 a k nˇemu pˇridruˇzen´y registr OTHER A7, kter´e slouˇz´ı jako ukazatele na z´asobn´ıky. • PC - 32-bitov´y programov´y cˇ´ıtaˇc • CCR - 8-bitov´y stavov´y registr, kde vyuˇzity jsou bity 4-0 X, N, Z, V, C • SR - 16-bitov´y status registr, kter´y obsahuje registr CCR. Ten se nach´az´ı ve spodn´ıch 8 bitech. Z horn´ıch 8 bit˚u jsou vyuˇzity pouze bity 15, 13, 12, 10-8. Kde v´yznam jednotliv´ych bit˚u od nejvyˇssˇ´ıho je n´asleduj´ıc´ı: – T - povolen´ı trasov´an´ı programu – S - pˇrep´ın´an´ı m´odu uˇzivatel, spr´avce – M - stav pˇreruˇsen´ı, tento bit je nulov´an vstupem do pˇreruˇsen´ı
14
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
– bity 10-8 - slouˇz´ı k definici priority aktu´alnˇe volan´eho pˇreruˇsen´ı • VBR - je 32-bitov´y registr, kter´y obsahuje adresu zaˇca´ tku vektor˚u v´yjimek. Spodn´ıch 20 bit˚u nen´ı implementov´ano. • CPUCR - 32-bitov´y registr slouˇz´ıc´ı pro nakonfigurov´an´ı speci´aln´ıch vlastnost´ı j´adra. Vyuˇzity jsou bity 31, 30, 29, 27 a 25.
1.2.2
Mikrokontrol´er MCF51QE128
Spad´a do rodiny Flexis QE128, do kter´e patˇr´ı i v´ysˇe uveden´y MC9S08QE128, s kter´ym je kompatibiln´ı na u´ rovni perif´eri´ı a pin˚u. Obsahuje v´ykonn´e 32-bitov´e j´adro ColdFire V1, pracuj´ıc´ı aˇz na 50 MHz, kter´e m´a implementovanou instrukˇcn´ı ˇradu revize C (ISA C) a podporuje aˇz 30 zˇ a´ dost´ı o pˇreruˇsen´ı od perif´eri´ı a 7 softwarov´ych pˇreruˇsen´ı. Pro program je dostupn´ych 128 kB pamˇeti flash a pro data 8 kB pamˇeti SRAM. Aby byl mikrokontrol´er co nejv´ıce kompatibiln´ı s 8-bit HCS08 modely z ˇrady Flexis QE128, obsahuje vˇsechny vlastnosti tˇechto procesor˚u. Jedin´y podstatn´y rozd´ıl je tedy pouze v j´adˇre. MCU m´a stejn´e moˇznosti u´ sporn´ych m´od˚u, ochrann´ych obvod˚u jako je Watchdog cˇ i detekce poklesu nap´ajec´ıho napˇet´ı, tak i moˇznost v´ybˇeru zdroj˚u hodinov´eho kmitoˇctu. Mezi integrovan´ymi periferiemi najdeme 24-kan´alov´y analogovˇe cˇ´ıslicov´y pˇrevodn´ık, dva analogov´e kompar´atory, dvojici s´eriov´ych rozhran´ı, dvˇe rozhran´ı typu SPI, 2x I2C sbˇernici, jeden 6-ti kan´alov´y a dva tˇr´ı kan´alov´e cˇ´ıtaˇce cˇ i napˇr´ıklad 8-bitov´y cˇ´ıtaˇc re´aln´eho cˇ asu RTC. Vˇsechny tyto perif´erie jsou shodn´e s tˇemi u mikrokontrol´eru MC9S08QE128 a jejich popis tedy nen´ı nutn´y.
1.3
V´yvojov´y kit DEMOQE128
Je relativnˇe levn´y v´yvojov´y kit od firmy P&E Micro, kter´a spolupracuje s Freescale. DEMOQE128 je vhodn´y v´yvojov´y prostˇredek pro ladˇen´ı a zjiˇst’ov´an´ı chov´an´ı aplikac´ı pˇri pˇrechodu z 8-bitov´eho na 32-bitov´y mikrokontrol´er cˇ i naopak, protoˇze obsahuje dva v´ysˇe popsan´e MCU MC9S08QE128 a MCF51QE128, kter´e jsou um´ıstˇeny na redukc´ıch (viz pˇr´ıloha B.1) a jsou tedy na desce lehce zamˇeniteln´e. Kit se skl´ad´a z 4 vrstv´e oboustrann´e desky ploˇsn´ych spoj˚u s cˇ ernou nep´ajivou maskou a b´ıl´ymi cˇ i zlat´ymi popisky.
15
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Hlavn´ı lad´ıc´ı, komunikaˇcn´ı i programovac´ı rozhran´ı zabezpeˇcuje na desce integrovan´y mikrokontrol´er MC9S12UF32PUE. Komunikace s kitem prob´ıh´a po USB rozhran´ı, po kter´em je moˇzn´e cel´y kit i nap´ajet. Moˇznosti nap´ajen´ı kitu se jev´ı velmi zdaˇril´e, protoˇze lze jednoduch´ym pˇrep´ın´an´ım propojek na desce urˇcit, zda bude kit nap´ajen z USB nebo z extern´ıho adapt´eru, pro kter´y je na desce klasick´y konektor a nebo z dvojice cˇ l´ank˚u typu AAA, na kter´e obsahuje deska pouzdro. Nap´ajen´ı z cˇ l´ank˚u AAA ovˇsem pˇredstavuje znaˇcnˇe mˇekk´y zdroj, coˇz se projevilo pˇri pokusu nap´ajet cel´y kit i s LCD ze dvou cˇ l´ank˚u typu AAA Ni-MH 950 mA. Pokles napˇet´ı na cˇ l´anc´ıch byl takov´y, zˇ e dod´avan´e napˇet´ı nestaˇc´ı pro nap´ajen´ı LCD. To se projevilo znaˇcn´ym u´ bytkem kontrastu a jasu. Kit obsahuje n´asleduj´ıc´ı periferie : • zdroj hodinov´eho kmitoˇctu 32,768 KHz pro mikrokontrol´er • 8 SMD LED, kter´e jsou napojen´e na port PTC piny 0-5 a port PTE piny 6 a 7 • 4 tlaˇc´ıtka pˇripojen´e na port PTA piny 2, 3 a port PTD piny 2, 3 • jedno tlaˇc´ıtko RESET i s LED indikac´ı • 3D akcelerometr Freescale MMA7260, pˇripojen´y na port PTA, piny PTA7, PTA6, PTA1 a pin PTC7 z portu PTC • akustick´y piezomˇeniˇc pˇripojen´y na v´ystup PTB5 • potenciometr pˇripojen´y na vstup PTC6, kde se nach´az´ı A/D pˇrevodn´ık • RS-232 s´eriov´e rozhran´ı, kter´e je realizov´ano obvodem firmy MAXIM MAX3218 a vyvedeno na D-SUB 9 pinov´y konektor • 6 v´yvod˚u pro zaletov´an´ı klasick´eho konektoru BDM, po kter´em lze pak programovat cˇ i ladit pˇres klasick´y BDM program´ator, debugger • Port s 40 v´yvody pro pˇripojen´ı dalˇs´ıch zaˇr´ızen´ı Vˇsechny uveden´e periferie, kter´e vyuˇz´ıvaj´ı urˇcit´ych pin˚u mikrokontrol´eru jako napˇr´ıklad 3D akcelerometr, lze jednoduˇse odpojit d´ıky na desce integrovan´ym propojk´am. Pak lze tedy obsazen´e piny uvolnit a pouˇz´ıt jinak. Na uveden´y port s 40 v´yvody byl v tomto
16
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
pˇr´ıpadˇe um´ıstˇen modul, kter´y obsahuje barevn´y grafick´y TFT displej o uhlopˇr´ıcˇ ce 2,1" a rozliˇsen´ı 176x132 pixel˚u s moˇznost´ı zobrazen´ı aˇz 65536 barev (viz pˇr´ıloha B.2). Na modulu se d´ale nach´az´ı 5 tlaˇc´ıtek a elektronika umoˇznˇ uj´ıc´ı nap´ajen´ı modulu pˇr´ımo z nap´ajec´ıho napˇet´ı 3 V od v´yvojov´eho kitu.
1.4
Special Edition: CodeWarrior for Microcontrollers
K DEMOQE128 kitu je na DVD dod´av´ana i nov´a verze v´yvojov´eho softwaru CodeWarrior for Microcontrollers pro operaˇcn´ı syst´emy MS Windows. Jedn´a se o speci´aln´ı verzi, kter´a m´a v sobˇe zahrnutou podporu vˇsech procesor˚u ˇrady Flexis QE a moˇznost jednoduch´eho pˇrevodu projektu z 8 bitov´eho mikroprocesoru na 32 bitov´y cˇ i naopak. To je moˇzn´e za pˇredpokladu, zˇ e jsou vˇsechny cˇ a´ sti projektu ps´any v programovac´ım jazyce C. Projekt tedy nesm´ı obsahovat cˇ a´ sti programu psan´e v Assembleru. CodeWarrior pak provede pˇrevod, vygeneruje hl´asˇen´ı, co vˇse muselo b´yt zmˇenˇeno, do projektu pˇrid´a patˇriˇcn´e knihovny pro dan´y procesor a vygeneruje tak´e soubor s n´azvem exceptions.c, ve kter´em je vygenerovan´y k´od pro ty cˇ a´ sti programu, ve kter´ych se 8 bitov´e MCU od 32 bitov´ych v´yraznˇe liˇs´ı jako napˇr´ıklad z´asobn´ık, vektory pˇreruˇsen´ı apod. Tato verze CodeWarrioru je dostupn´a volnˇe ke staˇzen´ı na str´ank´ach firmy Freescale, kde lze naj´ıt aktu´aln´ı verzi, jeˇz byla v dobˇe psan´ı t´eto pr´ace 6.3. Speci´aln´ı edice s sebou ovˇsem nese i jist´a omezen´ı v podobˇe maxim´aln´ı velikosti programu pro mikrokontrol´ery s j´adrem HCS08 na 32 kB a u ColdFire V1 na 64 kB a d´ale v nedostupnosti nˇekter´ych lad´ıc´ıch modul˚u. Ovladaˇce pro v´yvojov´y modul DEMOQE128 jsou pˇr´ımo souˇca´ st´ı instalace. Kit staˇc´ı pˇripojit k PC pˇres USB rozhran´ı a ihned dojde k instalaci patˇriˇcn´ych ovladaˇcu˚ . Probl´em m˚uzˇ e nastat pouze ve spojen´ı s 64 bit verzemi operaˇcn´ıch syst´em˚u MS Windows, kde je problematick´a jak instalace softwaru CodeWarrior, tak nedostupnost ovladaˇcu˚ pro kit DEMOQE128.
1.4.1
Vytvoˇren´ı projektu
Prostˇred´ı bohuˇzel nen´ı lokalizov´ano do cˇ esk´eho jazyka, ale pro pr˚umˇern´eho program´atora to nepˇrin´asˇ´ı zˇ a´ dn´e vˇetˇs´ı komplikace. Po spuˇstˇen´ı CodeWarrioru se zobraz´ı startovac´ı dialog, kter´y lze zvolit i v menu File. V tomto dialogu lze vybrat moˇznosti otevˇren´ı cˇ i
17
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
vytvoˇren´ı projektu. Po v´ybˇeru vytvoˇren´ı projektu se uˇzivateli zobraz´ı v´ybˇerov´e okno s moˇznost´ı specifikace typu mikrokontrol´eru a v´yvojov´eho zaˇr´ızen´ı popˇr´ıpadˇe simul´atoru. Pak n´asleduj´ı dalˇs´ı volby, kter´e specifikuj´ı vyuˇzit´ı napˇr´ıklad plovouc´ı aritmetiky cˇ i zda m´a b´yt k´od lehce laditeln´y cˇ i radˇeji l´epe optimalizovan´y pˇrekladaˇcem. Tyto volby nejsou pro poˇca´ teˇcn´ı projekt d˚uleˇzit´e, jejich v´ychoz´ı nastaven´ı je vyhovuj´ıc´ı a tak je d´ale nebudu rozeb´ırat. CodeWarrior do projektu automaticky zahrne knihovnu definic port˚u, registr˚u apod. dan´eho mikrokontrol´eru, vygeneruje startovac´ı k´od a zdrojov´e soubory hw v´yjimek a jejich tabulky adres jako napˇr´ıklad v´yjimky a jin´e. Tyto soubory nen´ı tˇreba nijak upravovat. Mezi soubory linkeru stoj´ı za povˇsimnut´ı Project.abs.xMAP, ve kter´em se daj´ı dohledat adresy promˇenn´ych v SRAM i adresy programu a konstant ve FLASH. Tento soubor je v´ybornou pom˚uckou pro kontrolu pr´ace kompil´atoru a linkeru zejm´ena pˇri pr´aci s grafick´ymi objekty, jejichˇz datov´e typy jsou ukl´ad´any pˇrednostnˇe do FLASH z d˚uvodu u´ spory pamˇeti SRAM. V projektu se d´ale nach´az´ı adres´aˇr Sources, kde je hlavn´ı soubor main.c. Uˇzivatel si sem m˚uzˇ e pˇridat i dalˇs´ı zdrojov´e soubory. Stejnˇe tak si m˚uzˇ e vytvoˇrit dalˇs´ı sloˇzky do stromu projektu. Soubor main.c obsahuje funkci void main(void), kter´a je vykon´ana po spuˇstˇen´ı mikrokontrol´eru. Tato funkce nesm´ı nikdy skonˇcit. Vˇetˇsinou se zde nach´az´ı CodeWarriorem vytvoˇren´y nˇejak´y nekoneˇcn´y cyklus, kter´y toto zabezpeˇc´ı. Do t´eto funkce program´ator vkl´ad´a sv˚uj vlastn´ı k´od, kter´y se m´a vykon´avat. Pro bˇeh na zvolen´em mikrokontrol´eru je tak´e tˇreba vykonat vlastn´ı inicializaci MCU. To lze prov´est dvˇema zp˚usoby. Jedna z moˇznost´ı je vytvoˇrit ruˇcnˇe inicializaci za pomoci referenˇcn´ıho manu´alu. Druh´a moˇznost je vyuˇzit´ı aplikace Procesor Expert, kter´a je souˇca´ st´ı prostˇred´ı CodeWarrior. Inicializaci lze spustit volbou Device Initialization, kter´a se nach´az´ı v horn´ım menu. Zde lze pohodlnˇe zvolit pod poloˇzkou CPU patˇriˇcnou frekvenci j´adra a sbˇernice. Pro maxim´aln´ı v´ykon jsem volil frekvenci j´adra 60 MHz a frekvenci sbˇernice 15 MHz. Frekvence je vytvoˇrena za pomoc´ı na chipu integrovan´eho oscil´atoru 32768 Hz, jehoˇz frekvence je n´asobena 1824x pro dosaˇzen´ı 60 MHz. Pˇresn´e nastaven´ı je patrn´e z obr. 1.2. Je zaj´ımav´e, zˇ e lze dos´ahnout nastaven´ı takov´e frekvence, i kdyˇz je v referenˇcn´ım manu´alu k procesoru uv´adˇena maxim´aln´ı hodnota 50 MHz. Procesor Expert vˇsak nehl´as´ı zˇ a´ dn´e varov´an´ı a procesor bezchybnˇe pracuje i na 60 MHz.
18
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Obr´azek 1.2: Inicializace taktu MCU
Po dokonˇcen´ı u´ prav a uloˇzen´ı konfigurace nab´ıdne Procesor Expert vygenerov´an´ı k´odu, kter´y je moˇzno bud’ pˇr´ımo vloˇzit do projektu automaticky, nebo pouze vygenerovat inicializaˇcn´ı soubory a uˇzivatel si s´am zvol´ı, jak s vygenerovan´ym k´odem naloˇz´ı. Zvolil jsem druhou moˇznost a z vygenerovan´ych soubor˚u zkop´ıroval pouze funkci void MCU init(void) do souboru hw init.c. Tato je pak vol´ana ve funkci void main(void) jako inicializaˇcn´ı. Zaloˇzen´ı projektu a inicializace MCU je t´ımto kompletn´ı.
19
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
2
KNIHOVNA D4D FREESCALE
2.1 2.1.1
Charakteristika Popis
Knihovna D4D je grafick´a knihovna, psan´a v programovac´ım jazyce C. Implementuje podporu zobrazov´an´ı na grafick´ych LCD displej´ıch pro mikrokontrol´ery Freescale s ohledem na u´ sporu datov´e pamˇeti SRAM. Umoˇznˇ uje generov´an´ı uˇzivatelsk´ych menu, grafiky, obr´azk˚u cˇ i textu a jejich zobrazen´ı. Knihovna tak´e plnˇe podporuje funkce LCD displej˚u s implementovan´ym dotykov´ym rozhran´ım. Mezi z´akladn´ı vlastnosti patˇr´ı [6]: • Podpora grafick´ych LCD displej˚u r˚uzn´ych rozmˇer˚u • Relativnˇe mal´a spotˇreba pamˇeti SRAM • Multiplatformnost - k´od vytvoˇren univerz´alnˇe pro co nejjednoduˇssˇ´ı pˇrechod mezi r˚uzn´ymi platformami • Objektov´y styl knihovny • Pˇrizp˚usobiteln´e rozmˇery ploch, pozic a nadpis˚u ploch na zp˚usob oken podobn´ych z klasick´ych uˇzivatelsk´ych prostˇred´ı operaˇcn´ıch syst´em˚u • Podpora dotykov´ych displej˚u • Podpora r˚uzn´ych styl˚u p´ısem • Rozhran´ı pro pˇred´av´an´ı kl´aves • Objekty: – Button - tlaˇc´ıtko – Check Box - zaˇskrt´avac´ı ploˇska – Gauge - grafick´y analogov´y zobrazovaˇc u´ rovnˇe na zp˚usob analogov´e ruˇckov´e mˇeˇric´ı jednotky
20
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
– Icon - zobrazov´an´ı icon a animac´ı – Label - objekt pro zobrazen´ı textu v prostoru – Menu - objekt pro vytv´aˇren´ı jednoduch´ych menu nab´ıdek – Picture - umoˇznˇ uje vkl´ad´an´ı obrazk˚u – Slider - grafick´y posuvn´ık pro nastavov´an´ı hodnoty – Graph - umoˇznˇ uje vytvoˇrit jednoduch´y graf
2.2
Soubory knihovny D4D
Soubory jsou uspoˇra´ d´any do cˇ tyˇr skupin a konfiguraˇcn´ıch uˇzivatelsk´ych soubor˚u.
2.2.1
Common Files
Tato skupina obsahuje z´akladn´ı vˇseobecnˇe uˇz´ıvan´e soubory knihovny D4D. M˚uzˇ eme zde nal´ezt hlaviˇckov´y soubor d4d.h, kter´y se uˇz´ıv´a pro pˇrid´an´ı knihovny D4D do naˇseho projektu. Do projektu zahrne vˇsechny cˇ a´ sti knihovny a zprostˇredkov´av´a uˇzivateli vˇsechny dostupn´e prototypy funkc´ı. Priv´atn´ı prototypy funkc´ı, kter´e slouˇz´ı pouze pro intern´ı uˇzit´ı uvnitˇr knihovny se nach´az´ı v d4d private.h. Definice vlastn´ıch typ˚u promˇenn´ych se nach´az´ı v souboru d4d types.h. V t´eto skupinˇe se d´ale nach´az´ı d4d lldapi.h, kter´y zprostˇredkov´av´a aplikaˇcn´ı rozhran´ı pro n´ızko´urovˇnov´e ovladaˇce, d4d base, kde najdeme funkce pro pr´aci s grafick´ymi objekty, soubory d4d font, kter´e implementuj´ı p´ısmo a funkce pro pr´aci s p´ısmem. Soubory d4d low pak obsahuj´ı vˇsechny z´akladn´ı vykreslovac´ı funkce a funkce pro pr´aci s dotykov´ym displejem. Je to vrstva pro pˇrechod mezi low a high level ovladaˇci displeje. Pro matematick´e funkce byly vytvoˇreny soubory d4d math. Matematick´e funkce jsou potˇrebn´e pˇri vykreslov´an´ı nˇekter´ych objekt˚u. Posledn´ı dvˇe skupiny soubor˚u jsou d4d scheme, zde se nach´az´ı funkce pro pr´aci s barevn´ymi sch´ematy objekt˚u nebo ploch a soubory d4d object, kde jsou funkce pro spr´avu objekt˚u.
2.2.2
Configuration example
Obsahuje sˇablonu konfiguraˇcn´ıho souboru, kter´y si mus´ı uˇzivatel nakonfigurovat a pˇren´est do sv´eho projektu jako d4d user cfg.h. D´ale m˚uzˇ e obsahovat konfiguraˇcn´ı soubory pro
21
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
pr´aci s r˚uzn´ymi typy podporovan´ych LCD displej˚u.
2.2.3
Graphic Objects
Zde se nach´az´ı k´od implementuj´ıc´ı vˇsechny grafick´e objekty, kter´e se zobrazuj´ı na displeji. Kaˇzd´y grafick´y objekt m´a vlastn´ı hlaviˇckov´y (*.h) a zdrojov´y soubor (*.c) pojmenovan´y jako d4d jmeno-objektu.* napˇr´ıklad d4d button.h a d4d button.c.
2.2.4
Low level drivers
Tato skupina obsahuje hardwarovˇe z´avisl´e n´ızko´urovˇnov´e ovladaˇce grafick´ych LCD displej˚u a dotykov´ych displej˚u. Skupina je rozdˇelena do dvou podskupin. V jedn´e se nach´az´ı ovladaˇce pro podporovan´e klasick´e LCD displeje, mezi kter´e patˇr´ı d3000TFT2 displej od firmy display3000, kter´y je speci´alnˇe urˇcen pro dodan´y v´yvojov´y kit DEMOQE128. D´ale je zahrnuta podpora displej˚u s ˇradiˇci SSD1289 a FSA506. Do druh´e podskupiny spadaj´ı podporovan´e dotykov´e displeje. Implementov´ana je podpora pro resistivn´ı dotykov´e panely, tedy panely kter´e maj´ı analogov´e rozhran´ı dotykov´e plochy. A panely, kter´e maj´ı rozhran´ı SPI a ˇradiˇc TSC2046.
2.3
Aplikaˇcn´ı rozhran´ı
Zprostˇredkuje z´akladn´ı funkce pro vytv´aˇren´ı, zmˇeny a manipulov´an´ı s objekty a plochami.
2.3.1
Typy promˇenn´ych
Knihovna D4D pouˇz´ıv´a pro svou potˇrebu mnoho nadefinovan´ych typ˚u promˇenn´ych, kter´e m˚uzˇ e vyuˇz´ıt i uˇzivatel ve sv´em k´odu. Z typ˚u promˇenn´ych bych r´ad uvedl ty, kter´e se cˇ asto vyuˇz´ıvaj´ı ve vlastn´ım zdrojov´em k´odu grafick´ych objekt˚u. • D4D COOR - koordinaˇcn´ı datov´y typ, mˇel by b´yt vˇetˇs´ı neˇz rozliˇsen´ı delˇs´ı strany LCD. Lze pozmˇenit v uˇzivatelsk´em konfiguraˇcn´ım souboru. • D4D POINT - struktura kter´a obsahuje dvˇe promˇenn´e typu D4D COOR x,y. • D4D COLOR - typ uˇz´ıvan´y pro definice barev.
22
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• D4D KEYS - typ pro promˇenn´e tlaˇc´ıtek. Lze zmˇenit v uˇzivatelsk´em konfiguraˇcn´ım souboru. • D4D OBJECT - typ pro definov´an´ı grafick´ych objekt˚u. Je to rozs´ahl´a struktura. • D4D SCREEN - typ pro definov´an´ı zobrazovan´ych ploch. Jedn´a se o rozs´ahlou strukturu, kter´a obsahuje ukazatel na pole vˇsech definovan´ych grafick´ych objekt˚u, uˇzit´ych na dan´e ploˇse a tak´e ukazatele na nezbytn´e uˇzivatelsk´e zpˇetnˇe volan´e funkce. • D4D OBJECT DRAWFLAGS - definuje typ pro pevn´e pˇr´ıznaky objekt˚u, kter´e jsou pro uˇzivatele dostupn´e pˇres D4D MESSAGE s indexem D4D MSG DRAW. • D4D MSGID - typ definuj´ıc´ı seznam vˇsech moˇzn´ych D4D MESSAGE index˚u. • D4D MESSAGE - definice typu pro syst´emov´e zpr´avy. Zpr´avy obsahuj´ı informace o m´ıstech, kde se nach´az´ı dan´a zobrazovan´a plocha a objekty. • D4D FONT - definice typu pro index p´ısma. • D4D TEXTBUFF - datov´y typ struktury obsahuj´ıc´ı ukazatel na datov´e pole p´ısma, vlastn´ı hodnotu velikosti pole a tak´e typ p´ısma.
2.3.2
Pˇreddefinovan´e hodnoty
Knihovna obsahuje velk´e mnoˇzstv´ı pˇreddefinovan´ych hodnot, kter´e maj´ı mnoho vyuˇzit´ı. Za zm´ınku stoj´ı napˇr´ıklad hodnoty v´yrokov´e logiky pravda/nepravda, kter´e jsou zastoupeny D4D TRUE D4D FALSE, nebo hodnoty definuj´ıc´ı styly kresl´ıc´ıch cˇ ar, z nichˇz je napˇr´ıklad hojnˇe uˇz´ıvan´a cˇ a´ ra typu D4D LINE THIN. Z hlediska n´avrhu grafick´ych objekt˚u jsou d˚uleˇzit´e definice tzv. syst´emov´ych pˇr´ıznak˚u objektu: • D4D OBJECT F VISIBLE - objekt bude viditeln´y na dan´e ploˇse. • D4D OBJECT F ENABLED - objekt bude po inicializaci povolen, tzn. nen´ı vykreslen ve stupn´ıch sˇedi. • D4D OBJECT F TABSTOP - objekt m˚uzˇ e b´yt zamˇeˇren.
23
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• D4D OBJECT F TOUCHENABLE - povolen´ı schopnost´ı objektu pro dotykov´e displeje. • D4D OBJECT F FASTTOUCH - tuto vlastnost lze pouˇz´ıt jen u nˇekter´ych objekt˚u jako napˇr´ıklad tlaˇc´ıtko, label, check box. Jde vlastnost kdy jeden dotek vyvol´a zamˇeˇren´ı a proveden´ı dan´e akce. • D4D OBJECT F TRANSP TEXT - text objektu je vykreslen transparentnˇe, to znamen´a bez barvy pozad´ı. • D4D OBJECT F FOCUSRECT - objekt ohraniˇcuje vnˇejˇs´ı obdeln´ık, mˇen´ıc´ı barvu podle toho, zda je objekt zamˇeˇren.
2.3.3
Barevn´a sch´emata
Vˇsechny objekty a plochy pouˇz´ıvaj´ı barevn´a sch´emata a to tak, zˇ e kaˇzd´y objekt stejn´eho typu m´a stejn´e barevn´e sch´ema, ale je tu i moˇznost definice vlastn´ıho sch´ematu pro kaˇzd´y objekt cˇ i skupinu objekt˚u. Pro definici barevn´eho sch´ematu obsahuje knihovna makro D4D DECLARE CLR SCHEME, kter´e m´a velk´y poˇcet parametr˚u. Jeho parametry jsou mimo jin´e barvy cˇ a´ st´ı grafick´ych objekt˚u jako napˇr´ıklad pozad´ı check box objektu. Pˇri vytvoˇren´ı nov´eho typu objektu bude tedy nutn´e upravit i toto makro za pˇredpokladu, zˇ e bude objekt potˇrebovat nˇejakou specifickou barvu pro svou urˇcitou cˇ a´ st. Pro pr´aci s barevn´ymi sch´ematy obsahuje knihovna nˇekolik funkc´ı, ze kter´ych se zejm´ena tyto cˇ asto vyuˇz´ıvaj´ı pˇri implementaci objekt˚u: • D4D CLR SCHEME* D4D ObjectGetScheme(D4D OBJECT * pObj); - vrac´ı ukazatel na dan´e barevn´e sch´ema, kter´e objekt urˇcen´y ukazatelem pObj vyuˇz´ıv´a. • D4D COLOR D4D ObjectGetForeColor(D4D OBJECT * pObj, D4D OBJECT DRAWFLAGS draw); - vstupn´ımi parametry jsou ukazatel na graficq-k´y objekt a struktura, kter´a specifikuje stav objektu jako napˇr´ıklad zamˇeˇren´ı (focus), zachyt´av´an´ı kl´aves (capture) apod. Funkce navrac´ı barvu popˇred´ı objektu. • D4D COLOR D4D ObjectGetBckgColor(D4D OBJECT * pObj, D4D OBJECT DRAWFLAGS draw); - funkce podobn´a pˇredchoz´ı, s t´ım rozd´ılem, zˇ e navrac´ı barvu pozad´ı objektu.
24
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• D4D COLOR D4D ObjectGetForeFillColor(D4D OBJECT * pObj); - funkce podobn´a pˇredchoz´ım s rozd´ılem, zˇ e netestuje aktu´aln´ı stav objektu (napˇr. objekt zv´yraznˇen). Tedy pokud je objekt zak´az´an, vrac´ı barvu popˇred´ı zak´azan´eho objektu, jinak vrac´ı klasickou barvu popˇred´ı. • D4D COLOR D4D ObjectGetBckgFillColor(D4D OBJECT * pObj); - funkce obdobn´a pˇredchoz´ı. Vrac´ı ovˇsem barvu pozad´ı.
2.3.4
P´ısma
Knihovna umoˇznˇ uje uˇzit´ı v´ıce typ˚u p´ısma v uˇzivatelsk´e aplikaci. P´ısma uˇz´ıvan´a v aplikaci jsou specifikovan´a v tabulce p´ısma, kter´a se vytv´aˇr´ı pomoc´ı tˇr´ı maker: • D4D DECLARE FONT TABLE BEGIN - makro definuj´ıc´ı hlaviˇcku pole p´ısma. • D4D DECLARE FONT TABLE(fontId, font info, xScale, yScale) - toto makro m˚uzˇ e b´yt uˇzito v´ıcekr´at za sebou. Slouˇz´ı k vytvoˇren´ı seznamu pouˇzit´eho p´ısma. • D4D DECLARE FONT TABLE END - toto makro uzav´ır´a definici pole p´ısem. Pro grafick´e objekty je cˇ asto potˇreba zjistit sˇ´ıˇrku cˇ i v´ysˇku p´ısma napˇr´ıklad z d˚uvodu rozmˇer˚u objektu, proto byly implementov´any i tyto funkce: • D4D FONT SIZES D4D GetFontSize(D4D FONT ix) vrac´ı velikost p´ısma zadan´eho pˇredan´ym indexem p´ısma. • D4D FONT SIZE D4D GetFontHeight(D4D FONT ix) vrac´ı v´ysˇku p´ısma zadan´eho pˇred´avan´ym indexem. • D4D FONT SIZE D4D GetFontWidth(D4D FONT ix) vrac´ı sˇ´ıˇrku p´ısma. • D4D FONT TYPE* D4D GetFont(D4D FONT ix) vrac´ı ukazatel na datovou strukturu dan´eho p´ısma.
2.3.5
D4D Screen
Plochy D4D SCREEN tvoˇr´ı z´akladn´ı strukturu, ponˇevadˇz cel´a aplikace je rozdˇelena na jednotliv´e plochy, kter´e obsahuj´ı grafick´e objekty. Uˇzivatel by mˇel vytvoˇrit vlastn´ı zdrojov´y soubor pro kaˇzdou plochu zvl´asˇt’. Pro snadnou organizaci dok´azˇ e knihovna uchov´avat
25
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
historii ploch a tedy i snadn´y pˇrechod kupˇredu a zpˇet mezi plochami. Plochy mohou b´yt pouˇzity i jako okna, tedy m´ıt menˇs´ı velikost, neˇz je velikost plochy LCD displeje. Lze je doplnit i o titulek a um´ıstit je kdekoliv na displej. Vzhledovˇe pak vypadaj´ı jako klasick´a oznamovac´ı okna zn´am´a napˇr´ıklad z operaˇcn´ıch syst´em˚u osobn´ıch poˇc´ıtaˇcu˚ . Pro tvorbu ploch obsahuje knihovna makra, kter´a se staraj´ı o vytvoˇren´ı plochy a vloˇzen´ı objekt˚u na danou plochu. Pro pr´aci s plochami je implementov´ano nˇekolik funkc´ı: • D4D SCREEN* D4D GetActiveScreen(void); - vrac´ı ukazatel na aktivn´ı plochu. • void D4D ActivateScreen(D4D SCREEN* pNewScreen, Byte bReplaceCurrent); funkce aktivuje novou plochu specifikovanou ukazatelem na plochu pNewScreen. Druh´y parametr urˇcuje zda se m´a v z´asobn´ıku historie ploch nahradit pˇredeˇsl´a plocha touto novou. Hodnota m˚uzˇ e nab´yvat pouze D4D TRUE cˇ i D4D FALSE. • void D4D EscapeScreen(void); - funkce ukonˇc´ı danou aktivn´ı plochu a vr´at´ı se k pˇredchoz´ı ploˇse. • void D4D InvalidateScreen(D4D SCREEN* pScreen, Byte bComplete); - funkce slouˇz´ı k pˇrekreslen´ı cel´e plochy. • void D4D EnableScrTouchScreen(const D4D SCREEN* pScr, Byte bEnable); funkce povoluje schopnosti ovl´ad´an´ı na dotykov´ych panelech pro danou plochu. Knihovna m´a i nˇekolik pˇreddefinovan´ych konstant pro pr´aci s plochami jako barvy cˇ i rozmˇery nˇekter´ych prvk˚u, jejichˇz definice mi pˇripadne zbyteˇcn´e uv´adˇet. Vˇsechny tyto konstanty lze editovat v uˇzivatelsk´em konfiguraˇcn´ım souboru, kter´y knihovna obsahuje.
2.3.6
Grafick´e objekty
Knihovna obsahuje 9 druh˚u grafick´ych objekt˚u, pro kter´e muselo b´yt implementov´ano nˇekolik spoleˇcn´ych funkc´ı pro jejich ovl´ad´an´ı. • void D4D EnableTabStop(D4D OBJECT PTR pObj, Byte bEnable) - funkce nastavuje tab stop vlastnost objektu. Pokud je povolena, objekt m˚uzˇ e b´yt oznaˇcen.
26
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• void D4D EnableObject(D4D OBJECT PTR pObj, Byte bEnable); - nastavuje vlastnost Enabled u grafick´ych objekt˚u. Pokud je objekt zak´az´an, pak je zaˇsedl´y a ignoruje vˇsechny interakce od uˇzivatele. • void D4D EnableTouchScreen(D4D OBJECT PTR pObj, Byte bEnable, Byte bFastTouch); - povoluje dotykov´e moˇznosti u dan´eho objektu. • void D4D ShowObject(D4D OBJECT* pObject, Byte bShow); - nastavuje vlastnost Show, kter´a pokud je povolena, tak je objekt viditeln´y na ploˇse. • D4D OBJECT PTR D4D GetFocusedObject(D4D SCREEN* pScreen); - vrac´ı ukazatel na objekt, kter´y je moment´alnˇe zamˇeˇren na dan´e ploˇse. • void D4D FocusSet(D4D SCREEN* pScreen, D4D OBJECT PTR pObject); - funkce nastavuje Focus (zamˇeˇren´ı) pro dan´y objekt pˇred´avan´y ukazatelem na objekt pObject, objekt se nach´az´ı na ploˇse pˇred´avan´e ukazatelem pScreen. Focus nebude nastaven, pokud nem´a objekt povolenu vlastnost Tab stop. • void D4D InvalidateObject(D4D OBJECT* pObject, Byte bComplete); - funkce nastav´ı patˇriˇcn´e bity objektu a ten je pak pˇrekreslen. Druh´y parametr bComplete urˇcuje zda m´a b´yt objekt kompletnˇe pˇrekreslen. Vˇetˇsina objekt˚u nen´ı automaticky pˇrekreslov´ana kompletnˇe, ale pouze ty cˇ a´ sti, kter´e mohly b´yt zmˇenˇeny. Jako napˇr´ıklad text, kter´y uˇzivatel edituje. • void* D4D GetUserPointer(D4D OBJECT *pThis); - vrac´ı uˇzivatelsk´y ukazatel na vybran´y objekt pˇred´avan´y vstupn´ım parametrem. Kaˇzd´y objekt obsahuje uˇzivatelsk´y ukazatel typu void, kter´y m˚uzˇ e b´yt uˇzit uˇzivatelem pro libovolnou funkci. Pˇresn´y popis a vlastnosti jednotliv´ych objekt˚u, kter´e jiˇz knihovna obsahuje lze nal´ezt v dokumentaci knihovny [6]. Zde jen nast´ın´ım jejich vyuˇzit´ı a z´akladn´ı vlasnosti. D4D BUTTON Implementov´an pro uˇzit´ı jako klasick´e tlaˇc´ıtko s moˇznostmi libovoln´e pozice na ploˇse i libovoln´e velikosti a pozice textu, kter´y m˚uzˇ e b´yt mˇenˇen i za bˇehu aplikace. U textu je moˇzn´e nastavit i pr˚uhlednost pozad´ı.Pro akci pˇri stisknut´ı tlaˇc´ıtka m˚uzˇ e b´yt definov´ana uˇzivatelem funkce, kter´a se pak bude automaticky volat.
27
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
D4D CHECKBOX Jedn´a se o klasick´e zaˇskrt´avac´ı tlaˇc´ıtko, zn´am´e z aplikac´ı na PC.Tak´e um´ı vyuˇz´ıvat bitmapy pro sv´e stavy. Text m˚uzˇ e b´yt transparentn´ı a mˇenˇen i za bˇehu programu. Moˇznosti jsou tedy obdobn´e jako u tlaˇc´ıtka. D4D GAUGE Prov´ad´ı zobrazen´ı numerick´e hodnoty pomoc´ı analogov´e stupnice s ruˇckov´ym ukazatelem hodnoty. Objekt m˚uzˇ e m´ıt libovolnou pozici, velikost, barvy i pozice textu.Lze nastavit rozsah stupnice a pˇri zmˇenˇe hodnoty lze volat uˇzivatelskou funkci. D4D PICTURE Tento objekt umoˇznˇ uje zobrazit na displeji obr´azek v podobˇe bitmapy, kterou lze um´ıstit na libovolnou pozici na ploˇse displeje. D4D ICON Pomoc´ı tohoto objektu lze vytv´aˇret jednoduch´e animace za pouˇzit´ı pole bitmapov´ych obr´azk˚u. Animace se samozˇrejmˇe mohou nach´azet kdekoliv na ploˇse, umoˇznˇ uj´ı doplnit i text, kter´y m˚uzˇ e b´yt transparentn´ı. D4D SLIDER Posuvn´ık umoˇznˇ uje nastavovat danou hodnotu graficky pomoc´ı zvˇetˇsen´ı cˇ i zmenˇsen´ı sloupce. Objekt m´a vlastnosti podobn´e s pˇredchoz´ımi objekty. Nav´ıc je tu funkce kˇr´ızˇ en´ı barev od minim´aln´ıch po maxim´aln´ı hodnoty zobrazovan´e sloupcem. Napˇr´ıklad zelen´e od minima postupnˇe se mˇen´ıc´ı do cˇ erven´e u maxima. D4D MENU Jedn´a se o objekt realizuj´ıc´ı klasick´a menu, kter´a mohou m´ıt jak tituln´ı nadpis tak postrann´ı posuvn´ık. Ostatn´ı vlastnosti jsou obdobn´e jako u pˇredeˇsl´ych objekt˚u. Titulek i kaˇzd´a poloˇzka menu m˚uzˇ e m´ıt svou vlastn´ı ikonku.
28
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
D4D LABEL Objekt vykresluj´ıc´ı textov´e popisky, kter´e mohou m´ıt libovolnou pozici na obrazovce. Text v dan´em Labelu m˚uzˇ e b´yt zarovn´an doleva, doprava cˇ i na stˇred. Objekt umoˇznˇ uje pr˚uhlednost textu, tak i jeho zmˇeny za bˇehu programu. D4D GRAPH Posledn´ı z popisovan´ych objekt˚u knihovny implementuje podporu pro zobrazov´an´ı graf˚u, kter´e mohou m´ıt volitelnou mˇr´ızˇ ku v obou os´ach. V jednom grafu lze zobrazit i nˇekolik pr˚ubˇeh˚u, kde kaˇzd´y m˚uzˇ e m´ıt jinou barvu. Nechyb´ı ani popisky os cˇ i moˇznost zobrazen´ı nadpisu u grafu.
2.4
Struktura grafick´ych objektu˚
Pˇred vlastn´ım popisem implementace navrhovan´ych objekt˚u bych r´ad pˇribl´ızˇ il strukturu zdrojov´ych soubor˚u grafick´ych objekt˚u a zp˚usob, jak´ym knihovna s objekty pracuje. Tyto poznatky byly zjiˇstˇeny postupn´ym studiem zdrojov´ych soubor˚u objektov´eho rozhran´ı knihovny a studiem jiˇz implementovan´ych objekt˚u. Objekty jsou staticky vytv´aˇreny. To znamen´a, zˇ e musej´ı b´yt vytvoˇreny pomoc´ı maker pˇred kompilac´ı. To s sebou nese jist´a omezen´ı, ale i v´yhody. Je zˇrejm´e, zˇ e nelze dynamicky vytvoˇrit grafick´y objekt za bˇehu programu. To lze povaˇzovat za urˇcitou nev´yhodu. Velkou v´yhodou statick´eho vytv´aˇren´ı objekt˚u je moˇznost ukl´adat je ve struktur´ach, kter´e mohou b´yt uloˇzeny v pamˇeti programu. To je pro aplikace s mikrokontrol´ery v´yhodn´e, protoˇze pr´avˇe velikost pamˇeti SRAM zde b´yv´a znaˇcnˇe omezena. Podobnˇe staticky jsou vytv´aˇreny i plochy neboli obrazovky s objekty, tedy nelze vytvoˇrit novou obrazovku pˇri bˇehu programu. Kaˇzd´emu grafick´emu objektu n´aleˇz´ı dva soubory. Prvn´ı je hlaviˇckov´y, kde jsou definov´any datov´e typy objektu, deklarace funkc´ı aplikaˇcn´ıho rozhran´ı objekt˚u a pak tak´e vlastn´ı makra pro vytvoˇren´ı objekt˚u 2.1.
29
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Pˇr´ıklad 2.1: Makro pro vytvoˇren´ı objektu #define D4D DECLARE PROGRESSB(name, x, y, cx, cy, flags, pScheme, fontId, pUser, pOnUsrMsg) \ static D4D PROGRESSB DATA name## data = { 0, D4D TRUE}; \ static const D4D PROGRESSB name## params = \ {\ { x, y }, \ { cx, cy }, \ fontId , \ &(name## data)\ }; \ \ D4D DECLARE OBJECT(name, D4D ProgressbOnMessage, pOnUsrMsg, D4D ProgressbCheckCoordinates, &(name ## params), flags, pUser, pScheme)
Z pˇr´ıkladu makra pro vytvoˇren´ı objektu 2.1 je patrn´a struktura dat grafick´ych objekt˚u, kde parametry objektu, kter´e jsou konstantn´ı, jsou uloˇzeny ve strukturˇe um´ıstˇen´e v pamˇeti programu, zat´ımco klasick´e promˇenn´e jako indexy pole apod. jsou uloˇzeny ve vlastn´ı struktuˇre, um´ıstˇen´e v pamˇeti SRAM. N´azvy tˇechto struktur objektu jsou vytvoˇreny pomoc´ı preprocesoru ze vstupn´ıho parametru name. Kaˇzd´y grafick´y objekt tedy mus´ı m´ıt sv˚uj unik´atn´ı n´azev, aby nedoˇslo k probl´em˚um s n´azvy struktur. Parametry makra jsou napˇr´ıklad velikost a pozice objektu na obrazovce, typ p´ısma apod., kter´ymi se inicializuje struktura v pamˇeti programu. Z dalˇs´ıch parametr˚u, kter´e mus´ı makro obsahovat jsou hodnoty pˇred´avan´e knihovnˇe pˇres makro D4D DECLARE OBJECT, kter´e deklaruje vlastn´ı objekt pro objektov´e rozhran´ı knihovny. D´ıky tomuto makru knihovna zn´a potˇrebn´e u´ daje pro vytvoˇren´ı objektu. D4D DECLARE OBJECT poˇzaduje tyto vstupn´ı parametry: 1. name - jm´eno objektu 2. onsysmsg - funkce objektu, kter´e m´a knihovna pˇred´avat syst´emov´e zpr´avy (poˇzadavek pˇrekreslen´ı, kl´avesy, apod.) 3. onusrmsg - ukazatel na uˇzivatelskou funkci, kter´y uˇzivatel m˚uzˇ e pˇredat. Pak jsou syst´emov´e zpr´avy zas´ıl´any i t´eto funkci. 4. chckcoor - funkce objektu, kterou knihovna vol´a pro ovˇeˇren´ı pozice a rozmˇer˚u objektu v˚ucˇ i obrazovce. 5. param - ukazatel, kter´emu mus´ı b´yt pˇredan´a adresa struktury statick´ych parametr˚u objektu, uloˇzen´ych v pamˇeti programu.
30
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
6. initFlags - hodnota inicializaˇcn´ıch pˇr´ıznak˚u objektu. 7. usrPointer - m˚uzˇ e b´yt definov´an uˇzivatelsk´y ukazatel, kter´y m˚uzˇ e uˇzivatel libovolnˇe vyuˇz´ıt. 8. pScheme - zde mus´ı b´yt pˇred´ana adresa barevn´eho sch´ematu, kter´e m´a dan´y objekt pouˇz´ıvat. Pokud je pˇred´ana hodnota adresy NULL, pak je uˇzito v´ychoz´ı sch´ema knihovny. Druh´y (zdrojov´y) soubor pak obsahuje definice funkc´ı dan´eho grafick´eho objektu. Pro lepˇs´ı pˇrehlednost byly stanoveny urˇcit´a n´azvoslov´ı z´akladn´ıch funkc´ı, kter´e se vyskytuj´ı u kaˇzd´eho objektu. Hlaviˇcky tˇechto funkc´ı a jejich v´yznam, kde Xx v n´azvu je vˇzdy nahrazen jm´enem dan´eho objektu (napˇr´ıklad Textbox): • static void D4D XxValue2Coor(D4D OBJECT* pThis) - pomocn´a funkce, kter´a slouˇz´ı k v´ypoˇctu r˚uzn´ych hodnot, potˇrebn´ych pro vykreslen´ı. Vypoˇcten´e hodnoty jsou uloˇzeny do 32B bufferu knihovny, kter´y je vyuˇz´ıv´an vˇsemi objekty. Data tedy nejsou st´al´a a funkce je vol´ana napˇr´ıklad vˇzdy pˇred vlastn´ım pˇrekreslen´ım objektu. • static void D4D XxOnDraw(D4D MESSAGE* pMsg) - vykreslovac´ı funkce • Byte D4D XxCheckCoordinates(D4D OBJECT* pThis, D4D POINT point) - funkce pro rozhran´ı knihovny. Testuje zda pˇredan´a souˇradnice bodu n´aleˇz´ı dan´emu objektu. • void D4D XxOnKeyDown(D4D MESSAGE* pMsg) - funkce zpracov´avaj´ıc´ı stisknut´e klavesy. • void D4D XxOnMessage(D4D MESSAGE* pMsg) - funkce volan´a knihovnou. Dost´av´a zpr´avy od knihovny a na jejich z´akladˇe vol´a patˇriˇcn´e v´ysˇe uveden´e funkce.
2.4.1
Vol´an´ı grafick´ych objektu˚
Knihovna pˇred´av´a kaˇzd´emu grafick´emu objektu patˇriˇcnou zpr´avu, kter´a ud´av´a, co je od objektu poˇzadov´ano. Zpr´ava je vlastnˇe sloˇzit´a struktura, kter´a s sebou nese mnoho informac´ı a parametr˚u. Na z´akladˇe nich objekt v´ı co m´a vykonat. Tato zpr´ava je zpracov´ana funkc´ı objektu D4D XxOnMessage, kter´a dle pˇrijat´e zpr´avy vol´a dalˇs´ı funkce.
31
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Tˇemto volan´ym funkc´ım je zpr´ava pˇred´ana tak´e, protoˇze kaˇzd´a zpr´ava obsahuje kromˇe identifikaˇcn´ıho cˇ´ısla zpr´avy i ukazatel na dan´y objekt, ukazatel na danou plochu, hodnotu stisknut´e kl´avesy cˇ i pˇr´ıznaky pro vykreslov´an´ı objektu. Zjednoduˇsen´y princip funkce vol´an´ı objekt˚u ukazuje obr´azek 2.1.
Obr´azek 2.1: Blokov´e sch´ema vol´an´ı objekt˚u
2.5
˚ zit´e vlastnosti objektov´eho rozhran´ı knihovny Duleˇ
Zde bych se r´ad vˇenoval nˇekter´ym d˚uleˇzit´ym vlastnostem knihovny, na kter´e je potˇreba br´at zˇretel pˇri implementaci objekt˚u.
32
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
2.5.1
Pˇred´av´an´ı stisknut´ych kl´aves
Knihovna m´a implementovan´e rozhran´ı pro zachyt´av´an´ı a pˇred´av´an´ı kl´aves objekt˚um. Stisknut´e kl´avesy jsou pˇred´av´any knihovnˇe pomoc´ı funkce D4D KeysChanged. V´ychoz´ı datov´y typ kl´aves je Byte. To znamen´a, zˇ e maxim´aln´ı hodnota kl´avesy m˚uzˇ e b´yt cˇ´ıslo 255. T´eto funkci se pˇred´avaj´ı hodnoty stisknut´ych kl´aves, pro jejichˇz definici byl v knihovnˇe vytvoˇren soubor d4d keys.h. Zde jsou definov´any hodnoty pro z´akladn´ı ovl´adac´ı kl´avesy. Pro ovl´ad´an´ı a navigaci mezi objekty a plochami slouˇz´ı 3 kl´avesy D4D KEY UP, D4D KEY DOWN, D4D KEY ESC. Jejich hodnoty jsou uzp˚usobeny tak, aby sˇly tyto kl´avesy vymaskovat. Tedy kaˇzd´a z kl´aves m´a svou bitovou masku. Tyto kl´avesy knihovna pˇred odesl´an´ım objektu standardnˇe vymaskuje. Nast´av´a tedy probl´em jak s tˇemito tˇremi kl´avesami, tak s hodnotami napˇr´ıklad ASCII znak˚u, kter´e jsou poˇskozen´e po proveden´ı vymaskov´an´ı bitov´ymi maskami dan´ych tlaˇc´ıtek. Dalˇs´ı standardn´ı kl´avesy knihovny jsou D4D KEY LEFT, D4D KEY RIGHT, D4D KEY ENTER. Kaˇzd´a z v´ysˇe uveden´ych kl´aves m´a svou hodnotu urˇcenou bitovou maskou, kde je vˇzdy 7 bit˚u v log. 0 a pouze jeden bit v log. 1 viz. tabulka. Tabulka z´akladn´ıch kl´aves Pozice bitu
7
6
5 4
3
2
1 0
hex
D4D KEY UP
0
0
0 0
0
0
0 1
0x01
D4D KEY DOWN
0
0
0 0
0
0
1 0
0x02
D4D KEY LEFT
0
0
0 0
0
1
0 0
0x04
D4D KEY RIGHT
0
0
0 0
1
0
0 0
0x08
D4D KEY ENTER 0
0
0 1
0
0
0 0
0x10
D4D KEY ESC
0
1 0
0
0
0 0
0x20
0
S moˇznost´ı pˇred´av´an´ı vˇsech kl´aves je naˇstˇest´ı v knihovnˇe poˇc´ıt´ano a tak knihovna obsahuje ukazatel na objekt d4d pKeysCapturer, kter´y definuje objekt pr´avˇe zachyt´avaj´ıc´ı kl´avesy. Pro pr´aci s t´ımto ukazatelem jsou definov´any funkce: • void D4D CaptureKeys(D4D OBJECT PTR pObj) - pomoc´ı tento funkce se nastav´ı d4d pKeysCapturer a knihovna tedy v´ı, kter´y objekt m´a zachyt´avat vˇsechny kl´avesy
33
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• D4D OBJECT* D4D GetCapturedObject(void) - funkce vrac´ı ukazatel na objekt, kter´y je nastaven pro zachyt´av´an´ı kl´aves. Pro novˇe implementovan´e objekty byly d´ale vytvoˇreny dalˇs´ı k´ody kl´aves: • D4D KEY BACKSPACE - s hodnotou 0x18, kter´a nen´ı shodn´a s ASCII tabulkou z d˚uvodu vyuˇzit´ı ASCII hodnoty v´ysˇe uveden´ymi ovl´adac´ımi kl´avesami. • D4D KEY SPACE - 0x19, kter´a definuje mezeru v textu. ASCII hodnota mezery v textu je bohuˇzel vyuˇzita ovl´adac´ı kl´avesou D4D KEY ENTER. • D4D KEY DEL - kter´a odpov´ıd´a ASCII hodnotˇe 0x7f. Hodnoty ovl´adac´ıch kl´aves musej´ı b´yt menˇs´ı neˇz hodnota 0x21, nebo vˇetˇs´ı jako 0x7f, protoˇze rozsah 0x21 - 0x7f n´aleˇz´ı z´akladn´ım textov´ym znak˚um dle specifikace znakov´e sady ASCII (viz pˇr´ıloha A.1). Objekt rozpozn´a stisknutou kl´avesu pomoc´ı pˇr´ıchoz´ı zpr´avy D4D MSG KEYDOWN, kter´a je zasl´ana knihovnou. Tato zpr´ava obsahuje i hodnotu stisknut´e kl´avesy. Nastaven´ı zachyt´av´an´ı vˇsech kl´aves objektem lze napˇr´ıklad definovat prvn´ım stisknut´ım kl´avesy D4D KEY ENTER, kter´a nastav´ı zachyt´av´an´ı a pak je moˇzno pracovat s objektem. Tento zp˚usob byl zvolen u implementovan´ych objekt˚u. Funkce je tedy vyuˇz´ıv´ana objekty Text Box, List Box a Edit Box. Pro opuˇstˇen´ı reˇzimu zachyt´av´an´ı kl´aves byla zvolena kl´avesa D4D KEY ESC.
2.5.2
Buffer d4d scratchPad
Objekty mohou vyuˇz´ıvat glob´aln´ı buffer d4d scratchPad, kter´y je sd´ılen mezi vˇsemi objekty. Jeho v´ychoz´ı velikost je 32B a je nastavena v souboru d4d base.h pomoc´ı makra D4D SCRATCHPAD SIZE. Toto doˇcasn´e uloˇziˇstˇe je vyuˇz´ıv´ano objekty pro r˚uzn´e v´ypoˇcty ˇ koordin´at pro vykreslov´an´ı, cˇ i jin´ych promˇenn´ych. Casto se do nˇej ukl´adaj´ı zkop´ırovan´e vlastnosti objektu, kter´e jsou uloˇzeny v programov´e pamˇeti. Pamˇet’ programu nen´ı tak rychl´a na cˇ ten´ı konstantn´ıch dat jako pamˇet’ SRAM. Pokud program´ator vyuˇz´ıv´a nˇekterou z konstantn´ıch hodnot z FLASH v´ıcekr´at za sebou v programu, pak je vhodn´e tuto hodnotu nejdˇr´ıve uloˇzit bud’ do bufferu d4d scratchPad a nebo do nˇejak´e vlastn´ı doˇcasn´e
34
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
promˇenn´e. Kromˇe nav´ysˇen´ı rychlosti dojde i ke zmenˇsen´ı velikosti v´ysledn´eho k´odu po pˇrekladu. Pouˇzit´ı bufferu je patrn´e z pˇr´ıkladu 2.2, kde je vytvoˇren datov´y typ struktura, obsahuj´ıc´ı patˇriˇcn´e pomocn´e promˇenn´e a na tento typ je posl´eze pˇretypov´av´an buffer. Aby se nemusel tento nepˇrehledn´y k´od na pˇretypov´an´ı ps´at pˇri kaˇzd´em pouˇzit´ı struktury, je definov´ano makro calc, kter´e se vyuˇz´ıv´a ve vlastn´ım k´odu objektu. Pro inicializaci hodnot bufferu je pˇrednostnˇe urˇcena jiˇz uv´adˇen´a pomocn´a funkce D4D XxValue2Coor, jej´ızˇ pozice je patrn´a na obr´azku 2.1. Pˇr´ıklad 2.2: Pˇr´ıklad vyuˇzit´ı bufferu objektem typedef struct { D4D POINT position; D4D EBOX INDEX posCnt; D4D COOR textOff; D4D SIZE size; D4D POINT txtPos; D4D COOR Bar y; D4D COOR point1; D4D COOR point2; D4D COOR cursorEndX; D4D COOR cursorEndY; D4D COOR titleBar y; D4D EBOX INDEX lenOfEbox; } D4D EBOX TMP VAL; #define calc (∗(( D4D EBOX TMP VAL∗)d4d scratchPad)) // globalni temp 32B
Je zˇrejm´e, zˇ e zde m˚uzˇ e nastat probl´em s velikost´ı definovan´e struktury. To by vedlo k pˇreteˇcen´ı bufferu a p´adu aplikace. Aby se pˇredeˇslo t´eto nepˇr´ıjemnosti, obsahuje knihovna pomocn´e makro D4D ASSERT. Makru se pˇred´av´a podm´ınka, kter´a mus´ı platit. Jakmile nen´ı splnˇena, pak nastane nekoneˇcn´a smyˇcka. Toto zajist´e nen´ı ide´aln´ı ˇreˇsen´ı, ale jakoˇz pom˚ucka pˇri ladˇen´ı je to ˇreˇsen´ı postaˇcuj´ıc´ı. Makro D4D ASSERT se nach´az´ı v souboru d4d base.h a jeho pouˇzit´ı uv´ad´ı pˇr´ıklad 2.3. Pˇr´ıklad 2.3: Pouˇzit´ı makra D4D ASSERT D4D ASSERT(sizeof( calc) <= D4D SCRATCHPAD SIZE); // overeni velikosti bufferu calc (pozor nekocna smycka!) D4D EboxValue2Coor(pMsg−>pObject); // vypocet pomocnych parametru ulozenych v bufferu calc
2.5.3
Vykreslov´an´ı textu
Pro vykreslov´an´ı textu obsahuje knihovna funkce D4D DrawText, D4D DrawTextXY. Jedin´y rozd´ıl mezi funkcemi je v pˇred´av´an´ı souˇradnic, kde m´a b´yt text vykreslen. Prvn´ı
35
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
funkci se pˇred´avaj´ı souˇradnice pomoc´ı adresy na strukturu, kter´a obsahuje X a Y souˇradnice. Zat´ımco u druh´e funkce D4D DrawTextXY se pˇred´avaj´ı pˇr´ımo hodnoty souˇradnic X, Y zvl´asˇt’. Vol´an´ı funkce je tedy co se t´ycˇ e rychlosti horˇs´ı. Protoˇze se, ale m´alo kdy vyskytuje situace, kdy jsou nachyst´any souˇradnice pˇr´ımo ve struktur´ach typu D4D POINT, je vˇetˇsinou pouˇzita druh´a verze funkce. Proto se zamˇeˇr´ım pr´avˇe na jej´ı popis. Vstupn´ı parametry funkce ukazuje pˇr´ıklad 2.4. Pˇr´ıklad 2.4: Funkce D4D DrawText void D4D DrawTextXY(D4D COOR x, D4D COOR y, const char∗ pText, D4D COLOR colorText, D4D COLOR colorBkgd, D4D FONT fontType, Byte transparent)
V´yznam parametr˚u je patrn´y z jejich n´azv˚u, proto je nebudu popisovat. Text je pˇred´av´an ukazatelem pText a funkce pak vykresl´ı dan´y text od tohoto ukazatele d´al, dokud nenaraz´ı na znak ’\0’ coˇz je 0x00. Pokud uv´azˇ´ıme nˇejak´y text uloˇzen´y v textov´em poli, pak n´am funkce umoˇznˇ uje vykreslit text od libovoln´e pozice do konce. Nelze tedy v zˇ a´ dn´em pˇr´ıpadˇe ukonˇcit vykreslov´an´ı v jin´e pozici neˇz na konci oznaˇcen´em 0x00. Vykreslov´an´ı aˇz ke konci se uk´azalo jako nedostateˇcn´e u objekt˚u Text Box a Edit Box, kde je potˇreba vykreslovat pouze urˇcitou cˇ a´ st textu s libovolnou volbou poˇca´ tku i konce vykreslen´ı. Proto byla implementov´ana ve zdrojov´em souboru d4d base.c pomocn´a funkce D4D DrawPartOfTextXY. Funkce umoˇznˇ uje vykreslovat text od poˇca´ tku dan´eho ukazatelem pText aˇz po posledn´ı vykreslen´y znak dan´y vstupn´ım parametrem index, kter´y ud´av´a relativn´ı index znaku vzhledem k poˇca´ tku pText. Funkce za touto posledn´ı vykreslovanou pozic´ı jednoduˇse nahrad´ı znak ukonˇcovac´ım znakem 0x00, provede vykreslen´ı textu a pot´e pˇrepsan´y znak zase obnov´ı. Pˇr´ıklad 2.5: Funkce D4D DrawPartOfText void D4D DrawPartOfTextXY(D4D COOR x, D4D COOR y,char∗ pText,Word index, D4D COLOR colorText, D4D COLOR colorBkgd, D4D FONT fontType, Byte transparent) { char tmp; if (D4D GetTextLength(pText)<=index)return; index++; // dalsi char NULL tmp = pText[index ]; // uloz char pText[index]=0; // uloz NULL novy konec D4D LCD Print(pText,x,y,D4D GetFont(fontType),colorText, colorBkgd, transparent ) ; // tisk pText[index]=tmp; // obnov char }
36
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
´ ˚ IMPLEMENTACE GRAFICKYCH OBJEKTU
3 3.1
D4D TextBox
Grafick´y objekt, kter´y umoˇznˇ uje uˇzivateli zad´avat informace v podobˇe textu. Tyto informace m˚uzˇ e n´aslednˇe program zpracov´avat. Vzhledovˇe jde o jednoduch´e editaˇcn´ı jednoˇra´ dkov´e okno, kter´e by po vstupu do editace mˇelo b´yt zv´yraznˇeno nˇejak´ym barevn´ym r´amem. Pokud text pˇres´ahne rozsahu sˇ´ırˇky text boxu, pak nebude vytvoˇren dalˇs´ı ˇra´ dek, ale text bude rolov´an vlevo tak, zˇ e bude mizet za hranou text boxu.
Obr´azek 3.1: Klasick´y Text Box
Do Text Boxu lze zadat jen pˇredem definovan´y maxim´aln´ı poˇcet znak˚u. Omezen´ı je zde d´ano z d˚uvodu pamˇet’ov´e n´aroˇcnosti. Je jasn´e, zˇ e z d˚uvodu editace a pr´ace s textem mus´ı b´yt cel´y text um´ıstˇen v pamˇeti SRAM. To pˇrin´asˇ´ı ot´azku, zda vyuˇz´ıt dynamick´ych alokac´ı, cˇ i zda vytvoˇrit maxim´aln´ı prostor pro text dle rozsahu pˇredan´eho uˇzivatelem. V pˇr´ıpadˇe dynamick´ych alokac´ı se nav´ysˇ´ı poˇcet knihoven a t´ım i k´odu. Pro dynamick´e alokace by byl vyuˇzit tzv. Heap prostor v pamˇeti SRAM. Tento prostor jako takov´y je vyˇclenˇen pouze pro dynamick´e alokace a jeho velikost by musela b´yt takov´a, aby vˇsechny vytv´aˇren´e objekty bezpeˇcnˇe alokovaly patˇriˇcn´y prostor pro text. To s sebou pˇrin´asˇ´ı dalˇs´ı poˇzadavky na uˇzivatele knihovny v podobˇe spr´avn´e definice velikosti t´eto Heap pamˇeti. V koneˇcn´em d˚usledku by takov´e ˇreˇsen´ı pˇrineslo pouze v´ıce u´ sil´ı program´atora a tak´e potenci´alnˇe nebezpeˇcn´y k´od v pˇr´ıpadˇe sˇpatn´ych alokac´ı. Proto byla zvolena moˇznost se statickou deklarac´ı velikosti textov´eho pole.
3.1.1
Grafick´e rozhran´ı
Po grafick´e str´ance se Text Box skl´ad´a ze 4 z´akladn´ıch cˇ a´ st´ı: • r´am - mˇen´ı barvu dle barevn´eho sch´ematu v z´avislosti na tom, zda je objekt zamˇeˇren, tedy uˇzivatel jej oznaˇcil, cˇ i zda zamˇeˇren nen´ı.
37
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• pozad´ı - vykresl´ı se pˇri prvn´ım kompletn´ım vykreslen´ı objektu. D´ale se nepˇrekresluje pokud nen´ı d´an speci´aln´ı poˇzadavek knihovnou. To je zavedeno z d˚uvodu rychlosti vykreslov´an´ı. • text - je vykreslen nad pozad´ım. Pokud je text kratˇs´ı jako d´elka Text Boxu, pak je zbyl´y prostor pˇrekreslen barvou pozad´ı. • kurzor - vykreslen jako jednoduch´a svisl´a cˇ a´ ra s v´ysˇkou odpov´ıdaj´ıc´ı v´ysˇce pouˇzit´eho textu. Barva je totoˇzn´a s barvou textu. Grafick´e rozhran´ı vyuˇz´ıv´a barevn´eho sch´ema pˇredan´eho uˇzivatelsk´ym makrem pro vytvoˇren´ı objektu. Pouze pokud je objekt zak´az´an, pak jsou barvy ve stupn´ıch sˇed´e. Z hlediska vykreslen´ı jednotliv´ych cˇ a´ st´ı je d˚uleˇzit´e zachovat poˇrad´ı, kdy prvn´ı je vhodn´e kreslit pozad´ı, nad pozad´ım se nach´az´ı text a s textem se tak´e pˇrekresl´ı cˇ a´ st Text Boxu, kde jiˇz text nezasahuje, coˇz nastane napˇr´ıklad pokud je text kratˇs´ı neˇz Text Box, nebo pˇri pohybu textem. Nad textem mus´ı b´yt kreslen kurzor. Nakonec je tˇreba vykreslit r´am, na jehoˇz pozici v poˇrad´ı prakticky nez´avis´ı, protoˇze ho zˇ a´ dn´a jin´a cˇ a´ st nepˇrekresluje. Pro uchov´an´ı pozice kurzoru vyuˇz´ıv´a Text Box pomocnou promˇennou cursor, jej´ızˇ hodnota ud´av´a index dan´eho znaku v textov´em poli, u kter´eho se m´a kurzor zobrazit. Dle hodnoty kurzoru lze tedy vyhodnocovat, kter´y znak m´a b´yt umaz´an, cˇ i na kter´e pozici m´a b´yt dalˇs´ı znak pˇrips´an. Aby bylo moˇzn´e implementovat plynul´e rolov´an´ı textu, obsahuje Text Box dalˇs´ı pomocnou promˇennou lastTxtBegin, kter´a definuje index textov´eho pole, od kter´eho je text vykreslen. Pak lze jednoduˇse urˇcit, zda se kurzor nach´az´ı ve vykreslen´em textu, cˇ i zda je na konci nebo zaˇca´ tku vykreslen´eho textu a je potˇreba posunout zobrazovan´y text. Konec vykreslovan´eho textu nemus´ı b´yt ukl´ad´an do pomocn´e promˇenn´e. Abychom vypoˇc´ıtali konec vykreslov´an´ı textu, mus´ıme zn´at poˇcet znak˚u, kter´y lze v oknˇe Text Boxu zobrazit. Ten lze vypoˇc´ıtat na z´akladˇe sˇ´ıˇrky pouˇzit´eho p´ısma a d´elky Text Boxu v pixelech. D´elku objektu tak i typ p´ısma zad´av´a uˇzivatel makru pro vytvoˇren´ı nov´eho objektu. Vzhled objektu Text Box a jednotliv´e grafick´e cˇ a´ sti objektu zobrazuje obr´azek 3.2.
38
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Obr´azek 3.2: D4D Text Box
3.1.2
Ovl´ad´an´ı objektu
Text Box je ovl´ad´an pomoc´ı 8 z´akladn´ıch k´od˚u kl´aves, kter´e jsou pˇred´av´any ve zpr´avˇe typu D4D MESSAGE zaslan´e knihovnou: • D4D KEY ENTER - umoˇznˇ uje vstup do editace. • D4D KEY ESC - ukonˇcuje editaci textu v Text Boxu. • D4D KEY BACKSPACE - smaˇze patˇriˇcn´y znak pˇred kurzorem. • D4D KEY SPACE - pˇrid´a klasickou mezeru do textu. • D4D KEY LEFT a D4D KEY UP - pohyb kurzoru vlevo. • D4D KEY RIGHT a D4D KEY DOWN - pohyb kurzoru vpravo. Pokud je Text Box v reˇzimu editace, pak je zobrazen kurzor a je moˇzn´e vkl´adat jednotliv´e textov´e znaky, kter´e jsou definovan´e tabulkou ASCII (viz pˇr´ıloha A.1). Z hlediska ovl´ad´an´ı jsou samozˇrejmˇe implementov´any kontroln´ı mechanismy pro zamezen´ı pohybu kurzoru mimo text. Pokud kurzor dojde na konec textu, d´ale vpravo se jiˇz nepohybuje, ani nedojde k n´avratu kurzoru na zaˇca´ tek textu. To sam´e plat´ı i pokud dojde kurzor na zaˇca´ tek textu. Pokud je text delˇs´ı jako vlastn´ı d´elka Text Boxu, pak doch´az´ı pˇri pohybu kurzoru mimo aktu´alnˇe zobrazovan´y text k plynul´emu rolov´an´ı textu. Jakmile dojde k opuˇstˇen´ı editaˇcn´ıho m´odu, pak je pozice kurzoru zmˇenˇena na konec textu, kurzor je skryt a nelze prov´adˇet u´ pravy.
39
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
3.1.3
40
Pouˇzit´ı objektu v aplikaci
Pro vytvoˇren´ı objektu lze pouˇz´ıt dvojici maker, kde parametry obou maker ukazuje 3.1. Pˇr´ıklad 3.1: Makra pro vytvoˇren´ı objektu D4D Text Box D4D DECLARE TEXTBOX(name, x, y, cx, cy, flags, pScheme, fontId,maxtxtlen, pUser,Onclick, pOnUsrMsg) D4D DECLARE STD TEXTBOX(name, x, y, cx, font)
Prvn´ı z maker D4D DECLARE TEXTBOX poˇzaduje od uˇzivatele vˇsechny nastaviteln´e parametry objektu: • name - n´azev vytv´aˇren´eho objektu • x - X souˇradnice pozice na obrazovce, ud´av´ana v pixelech • y - Y souˇradnice pozice na obrazovce, ud´av´ana v pixelech • cx - d´elka textboxu v pixelech • cy - v´ysˇka textboxu v pixelech • flags - pˇr´ıznaky objektu (napˇr. zda m˚uzˇ e b´yt zamˇeˇren, zda m˚uzˇ e m´ıt transparentn´ı pozad´ı textu apod.) • pScheme - ukazatel na barevn´e sch´ema objektu • fontId - zvolen´e p´ısmo pro text objektu • maxtxtlen - maxim´aln´ı d´elka textu, kter´y m˚uzˇ e b´yt uloˇzen a zobrazen • pUser - uˇzivatelsk´y ukazatel pro libovoln´e uˇzit´ı • OnClick - ukazatel na uˇzivatelskou funkci • pOnUsrMsg - ukazatel na uˇziv. funkci, kter´a pokud je definov´ana tak m˚uzˇ e pˇrij´ımat zpr´avy urˇcen´e dan´emu objektu Zat´ımco druh´e makro D4D DECLARE STD TEXTBOX se spokoj´ı pouze s nutn´ymi parametry a za zbytek jsou dosazeny v´ychoz´ı hodnoty. U ukazatel˚u je to hodnota NULL, u rozmˇeru cy se nastav´ı v´ychoz´ı hodnota 0 a objekt si dopoˇc´ıt´a potˇrebnou v´ysˇku na z´akladˇe rozmˇer˚u pouˇzit´eho p´ısma. Pˇr´ıznaky flags jsou nastaveny na D4D TXB F DEFAULT
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
a maxim´aln´ı d´elka Text Boxu je zvolena hodnotou D4D TEXTBOX STD TEXT LENGTH. Obˇe uveden´e hodnoty pˇr´ıznak˚u a d´elky textu jsou definov´any v hlaviˇckov´em souboru d4d textbox.h. S vlastn´ım textem zobrazen´ym v Text Boxu lze pracovat pomoc´ı tˇr´ı implementovan´ych funkc´ı: • char * D4D TextboxGetText(D4D OBJECT PTR pObj) - funkce vrac´ı ukazatel na dan´y text, kter´y n´aleˇz´ı objektu pˇredan´emu ukazatelem na objekt pObj. Uˇzivateli umoˇznˇ uje dalˇs´ı zpracov´an´ı textu dle vlastn´ıch potˇreb. • void D4D TextboxSetText(D4D OBJECT PTR pObj, char * pText) - umoˇznˇ uje uˇzivateli nastavit patˇriˇcn´y text v textboxu. • void D4D TextboxDelText(D4D OBJECT PTR pObj) - slouˇz´ı pro vymaz´an´ı textu.
41
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
3.2
D4D ListBox
Jedn´a se o seznam, ze kter´eho m˚uzˇ e uˇzivatel oznaˇcit poloˇzku seznamu. Mˇel by m´ıt posuvn´ık, kter´y se zobraz´ı, pokud je seznam vˇetˇs´ı neˇz velikost List Boxu. Uˇzivatel nem´a moˇznost mˇenit text v seznamu. M˚uzˇ e ho pouze vybrat. List Box by mˇel umoˇznˇ ovat i volbu v´ybˇeru v´ıce poloˇzek.
Obr´azek 3.3: Klasick´y List Box Program pak m˚uzˇ e zjiˇst’ovat, kter´e z poloˇzek jsou oznaˇceny. Jednotliv´e poloˇzky seznamu jsou klasick´y text. Pokud by byly poloˇzky ukl´ad´any v pamˇeti SRAM, pak by kaˇzd´a z poloˇzek zab´ırala urˇcitou cˇ a´ st pamˇeti u´ mˇernou jej´ımu zobrazovan´emu textu a dalˇs´ım pomocn´ym vlastnostem. V´yhodou t´eto volby implementace je moˇznost dynamick´eho vytv´aˇren´ı jednotliv´ych poloˇzek seznamu i za bˇehu uˇzivatelsk´e aplikace. Nev´yhoda je velk´a n´aroˇcnost na pamˇet’ dat. Druhou moˇznost´ı je implementovat vlastn´ı poloˇzky seznamu staticky. To znamen´a, zˇ e kaˇzd´a z poloˇzek by musela b´yt definov´ana pˇred pˇrekladem programu. To umoˇznˇ uje um´ıstit cel´y seznam do pamˇeti programu, kter´e je vˇetˇsinou dostatek, na rozd´ıl od mal´e pamˇeti dat. Kaˇzd´a z poloˇzek m´a pak v SRAM um´ıstˇeny pouze pomocn´e promˇenn´e, urˇcuj´ıc´ı jejich aktu´aln´ı stav. Pˇri tvorbˇe tohoto objektu byla nakonec zvolena druh´a moˇznost. To s sebou pˇrineslo z´asadn´ı ot´azku, zda nedojde k rapidn´ımu omezen´ı vlastn´ıho vyuˇzit´ı objektu List Box v aplikac´ıch, kde je potˇreba na z´akladˇe urˇcit´ych rozhodnut´ı zobrazovat r˚uzn´e poloˇzky seznamu. Pˇr´ıklad takov´eho omezen´ı m˚uzˇ e b´yt vyuˇzit´ı List Boxu jakoˇz prvku, kde si uˇzivatel vybere patˇriˇcn´y den v mˇes´ıci. V takov´em pˇr´ıpadˇe se mus´ı na z´akladˇe volby mˇes´ıce zobrazit spr´avn´y poˇcet dn´ı v seznamu. Z tohoto d˚uvodu byla kaˇzd´emu prvku seznamu zavedena vlastnost isVisible um´ıstˇen´a v SRAM, kter´a urˇcuje aktu´aln´ı stav zobrazen´ı prvku. T´ımto lze jednotliv´e prvky seznamu skr´yvat cˇ i zobrazovat. Aby byla tato vlastnost definov´ana i pˇred spuˇstˇen´ım programu, je v´ychoz´ı hodnota zobrazen´ı kaˇzd´eho prvku uloˇzena
42
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
i ve struktuˇre s textem, kter´a je uloˇzena v pamˇeti programu. List Box by mˇel umoˇznit definovat, zda povol´ı v´ybˇer pouze jedn´e poloˇzky a nebo v´ıce. Pro tuto moˇznost byla navrhnuta vlastnost oneSelected, na z´akladˇe kter´e je umoˇznˇen v´ybˇer pouze jedn´e poloˇzky a nebo v´ıce. Aby bylo moˇzn´e vyhodnotit oznaˇcen´ı prvku, m´a kaˇzd´y prvek zavedenu vlastnost isSelected, kter´a mus´ı b´yt um´ıstˇena v SRAM. Celkov´a spotˇreba pamˇeti SRAM se odv´ıj´ı od poˇctu prvk˚u. Kaˇzd´y prvek potˇrebuje prostor pro dvˇe vlastnosti, kter´e jsou typu D4D BOOL, coˇz je pro ColdFire V1 datov´y typ int.
3.2.1
Grafick´e rozhran´ı
Vzhled List Boxu byl volen co nejjednoduˇssˇ´ı. Aby sˇlo um´ıstit na objekt vlastn´ı n´azev, obsahuje List Box hlaviˇcku s textem, kter´y je pˇred´av´an pˇri vytvoˇren´ı objektu. D´ale je vykreslen vlastn´ı seznam prvk˚u, grafick´y posuvn´ık po prav´e stranˇe objektu, kter´y graficky zobrazuje pozici v seznamu a vlastn´ı r´am objektu. Postup pˇri poˇca´ teˇcn´ım vykreslen´ı List Boxu je n´asleduj´ıc´ı: 1. vykreslen´ı pozad´ı 2. vykreslen´ı titulku 3. dˇel´ıc´ı cˇ a´ ra mezi titulkem a seznamem 4. vykreslen´ı posuvn´ıku 5. vykreslen´ı poloˇzek - text 6. vykreslen´ı kurzoru 7. vykreslen´ı zbyl´eho m´ısta 8. vykreslen´ı r´amu Pˇri pˇrekreslov´an´ı objektu nen´ı nutn´e vykreslovat vˇsechny prvky. Z d˚uvodu rychlosti se pˇrekresluj´ı pouze poloˇzky seznamu, kurzor, pr´azdn´e m´ısto po poloˇzk´ach a d´ale posuvn´ık a r´am objektu. Je tak´e nutn´e dokreslovat pozad´ı za textem jednotliv´ych poloˇzek. Pokud maj´ı poloˇzky nestejnou d´elku textu, pak by pˇri pohybu vznikaly zbytky nepˇrekreslen´eho textu. Posuvn´ık slouˇz´ı pˇrednostnˇe pro zobrazen´ı polohy v seznamu. Nelze pomoc´ı nˇej
43
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
a tlaˇc´ıtek ovl´adat pohyb v seznamu. Posuvn´ık byl implementov´an hlavnˇe pro budouc´ı podporu dotykov´ych obrazovek, kde zamˇeˇren´ı dotyku pobl´ızˇ posuvn´ıku a smˇer m˚uzˇ e jednoduˇse ovlivnit pohyb uvnitˇr seznamu. To s dodan´ym LCD bohuˇzel nelze odladit. Jednotliv´e prvky a vzhled List Boxu popisuje obr´azek 3.4. Oznaˇcen´ı poloˇzek je provedeno inverz´ı barev p´ısma a pozad´ı. Protoˇze m´a kurzor stejnou barvu jako text, mus´ı se pˇri pohybu kurzoru na oznaˇcen´y text zmˇenit jeho barva. Pokud se kurzor nach´az´ı na oznaˇcen´em textu, pak m´a barvu, kter´a odpov´ıd´a barvˇe r´amu zamˇeˇren´eho objektu. Pro indexaci v seznamu List Boxu se pouˇz´ıv´a promˇenn´a cursor, kter´a ud´av´a index poloˇzky seznamu. Protoˇze mohou m´ıt poloˇzky zak´azan´e vykreslen´ı, obsahuje objekt jeˇstˇe pomocn´e promˇenn´e relCursor a relItemsCnt. Prvn´ı obsahuje relativn´ı hodnotu kurzoru, tedy poˇrad´ı vykreslen´e poloˇzky seznamu vzhledem k pˇredchoz´ım vykreslen´ym poloˇzk´am a druh´a promˇenn´a obsahuje celkov´y poˇcet viditeln´ych poloˇzek. Tyto promˇenn´e jsou uˇz´ıv´any napˇr´ıklad k vykreslen´ı posuvn´ıku. Aby bylo moˇzn´e posouvat seznam pokud je okno menˇs´ı jako poˇcet poloˇzek, obsahuje List Box hodnoty poˇca´ tku a konce v promˇenn´ych lastBegin a lastEnd. Pro vykreslen´ı seznamu je vhodn´e ukl´adat i konec z d˚uvodu vykreslov´an´ı pouze nˇekter´ych poloˇzek s nastavenou vlastnost´ı isVisible. D´ıky tomu se zjednoduˇsila kresl´ıc´ı funkce.
Obr´azek 3.4: D4D ListBox
44
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
3.2.2
Ovl´ad´an´ı objektu
Je ˇreˇseno pomoc´ı 4 z´akladn´ıch kl´aves: • D4D KEY ENTER - vstup do m´odu v´ybˇeru poloˇzek a vlastn´ı v´ybˇer poloˇzek • D4D KEY ESC - opuˇstˇen´ı m´odu v´ybˇeru poloˇzek seznamu • D4D KEY UP - pohyb v seznamu nahoru • D4D KEY DOWN - pohyb v seznamu dol˚u Po v´ybˇeru objektu je pro vstup do v´ybˇeru poloˇzek seznamu nutn´e stisknout D4D KEY ENTER. N´aslednˇe je zobrazen kurzor a umoˇznˇen pohyb v seznamu. Dalˇs´ı stisk kl´avesy D4D KEY ENTER oznaˇcuje jednotliv´e poloˇzky. Zruˇsen´ı oznaˇcen´ı poloˇzky je takt´ezˇ provedeno dalˇs´ım stisknut´ım kl´avesy D4D KEY ENTER. Pokud dojde kurzor na konec cˇ i zacˇ a´ tek seznamu, pak nedojde k n´avratu napˇr´ıklad z konce na zaˇca´ tek cˇ i naopak, ale kurzor z˚ust´av´a na pozici.
3.2.3
Pouˇzit´ı objektu v aplikaci
Pro uˇzivatele bylo implementov´ano nˇekolik maker, kter´e vytvoˇr´ı vlastn´ı objekt, poloˇzky seznamu a tabulku objektu. Z hlediska pouˇzit´ı jsou vytvoˇreny 3 typy maker pro definici poˇca´ tku List Boxu 3.2. Prvn´ı uv´adˇen´e makro je z´akladn´ı, kter´e oˇcek´av´a od uˇzivatele vˇsechny parametry objektu a t´ım umoˇznˇ uje plnou konfigurovatelnost. Pˇr´ıklad 3.2: Typy maker objektu D4D ListBox D4D DECLARE LISTBOX BEGIN(name, title text, title font, x, y, cx, cy, flags , pScheme,itemsFontId, posCnt, listboxItemsOff , pUser, pOnClick, pOnUsrMsg) D4D DECLARE STD LISTBOX BEGIN(name, title text, title font, x, y, cx, cy, ItemsFontId , posCnt, ListboxItemsOff , pOnClick) D4D DECLARE STD LISTBOX AUTOSIZE BEGIN(name, title text, title font, x, y, cx, cy, ItemsFontId, pOnClick)
Jednotliv´e parametry maj´ı n´asleduj´ıc´ı v´yznam: • name - n´azev objektu • title text - titulek objektu. Pokud uˇzivatel pˇred´a makru pˇr´ımo text, pak je uloˇzen ve FLASH. Jestliˇze chce uˇzivatel vyuˇz´ıt zmˇeny titulku pˇri bˇehu aplikace, mus´ı
45
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
pˇred´avat adresu sv´eho textov´eho pole v pamˇeti SRAM. Pak lze pro editaci titulku pouˇz´ıt implementovanou funkci. Tento zp˚usob v´ybˇeru ukl´ad´an´ı do SRAM cˇ i pˇr´ımo do FLASH byl pˇrejat od ostatn´ıch objekt˚u knihovny. • title font - druh p´ısma titulku objektu • x - X souˇradnice objektu na ploˇse • y - Y souˇradnice objektu na ploˇse • cx - rozmˇer objektu v ose X • cy - rozmˇer objektu v ose Y • flags - pˇr´ıznaky objektu • pScheme - barevn´e schema • itemsFontId - typ p´ısma poloˇzek seznamu • posCnt - moˇznost definice poˇctu zobrazen´ych poloˇzek na ploˇse ListBoxu • listboxItemsOff - rozestupy v pixelech jednotliv´ych poloˇzek seznamu • pUser - uˇzivatelsk´y ukazatel • pOnClick - ukazatel na uˇzivatelskou funkci volanou pˇri stlaˇcen´ı kl´avesy D4D KEYENTER • pOnUsrMsg - ukazatel na uˇzivatelskou funkci volanou pokud objekt obdrˇz´ı zpr´avu od knihovny N´asleduj´ıc´ı dvˇe makra 3.2 nepoˇzaduj´ı tolik vstupn´ıch parametr˚u a m´ısto nich nahrazuj´ı vlastnosti v´ychoz´ımi hodnotami. Pokud je pouˇzito posledn´ı makro, pak jsou rozestupy mezi poloˇzkami a poˇcet zobrazovan´ych poloˇzek na ploˇse List Boxu kalkulov´any automaticky z rozmˇer˚u p´ısma a rozmˇer˚u objektu. Uveden´a makra slouˇz´ı pro zaloˇzen´ı poˇca´ tku List Boxu. Po tˇechto makrech n´asleduje pouˇzit´ı makra D4D DECLARE LISTBOX ITEM pro vkl´ad´an´ı jednotliv´ych poloˇzek seznamu do List Boxu 3.3. Makro lze pouˇz´ıt v´ıcekr´at za sebou.
46
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
47
Pˇr´ıklad 3.3: Makro pro pˇrid´an´ı poloˇzky seznamu objektu D4D ListBox D4D DECLARE LISTBOX ITEM(text,defVisible)
Vstupn´ımi parametry jsou samotn´y text poloˇzky seznamu a tak´e v´ychoz´ı viditelnost poloˇzky po spuˇstˇen´ı programu. Nakonec je nutn´e pouˇz´ıt makro D4D DECLARE LISTBOX END, kter´e ukonˇcuje vlastn´ı sekci poloˇzek seznamu List Boxu a t´ım i celou deklaraci nov´eho objektu 3.4. Pˇr´ıklad 3.4: Makro pro ukonˇcen´ı definice objektu D4D ListBox D4D DECLARE LISTBOX END(name)
Pro pr´aci s List Boxem je implementov´ano 12 funkc´ı. Pokud by uˇzivatelsk´a aplikace poˇzadovala nˇejak´e speci´aln´ı funkce, pak je tu moˇznost definice vlastn´ı uˇzivatelsk´e funkce pˇred´avan´e objektu pomoc´ı ukazatele pOnClick. Vlastn´ı deklarace funkce mus´ı m´ıt n´asleduj´ıc´ı podobu, kde jm´eno funkce samozˇrejmˇe nen´ı d˚uleˇzit´e 3.5. Pˇr´ıklad 3.5: Hlaviˇcka uˇzivatelsk´e funkce D4D ListBox OnClicked(D4D OBJECT∗ pThis, D4D LISTBOX INDEX cursor);
Funkci je pˇred´av´an ukazatel na dan´y objekt a aktu´aln´ı pozice kurzoru v seznamu. Vol´an´ı probˇehne pouze pˇri stisku kl´avesy D4D KEY ENTER uvnitˇr List Boxu. Uˇzivatelsk´e funkce: • void D4D ListboxSetItemVisb(D4D OBJECT PTR pThis,D4D LISTBOX INDEX index,D4D BOOL visibility) - umoˇznˇ uje nastavit viditelnost poloˇzky seznamu na pozici index. Pokud se zmˇen´ı viditelnost libovoln´e poloˇzky, pak je ListBox kompletnˇe pˇrekreslen. Mus´ı se totiˇz obnovit rozsahy vykreslen´ı seznamu a relativn´ı indexy. • D4D BOOL D4D ListboxGetItemVisb(D4D OBJECT PTR pThis,D4D LISTBOX INDEX index) - vrac´ı viditelnost poloˇzky seznamu na pozici index. • D4D LISTBOX INDEX D4D ListboxGetSlctNext(D4D OBJECT PTR pThis,D4D LISTBOX INDEX item) - vrac´ı dalˇs´ı oznaˇcen´y prvek od pozice item. Pokud nenajde tak vrac´ı hodnotu -1. • D4D LISTBOX INDEX D4D ListboxGetSlctNextR(D4D OBJECT PTR pThis,D4D LISTBOX INDEX item) - funkce obdobn´a jako pˇredchoz´ı s t´ım rozd´ılem, zˇ e vrac´ı
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
48
relativn´ı pozici poloˇzky vzhledem ke vˇsem pˇredchoz´ım oznaˇcen´ym poloˇzk´am. Pokud nenajde tak vr´at´ı -1. • D4D LISTBOX INDEX D4D ListboxGetSlct(D4D OBJECT PTR pThis) - vrac´ı prvn´ı oznaˇcen´y prvek v seznamu. Pokud nenajde tak vr´at´ı -1. • void D4D ListboxSetoneSel(D4D OBJECT PTR pThis,D4D BOOL one) - nastavuje hodnotu vlastnosti OneSelected. Pokud je D4D TRUE, pak m˚uzˇ e b´yt vybr´an pouze jeden prvek. • D4D BOOL D4D ListboxGetoneSel(D4D OBJECT PTR pThis) - vrac´ı aktu´aln´ı hodnotu vlastnosti OneSelected. • void D4D ListboxUnSelect(D4D OBJECT PTR pThis) - funkce zruˇs´ı oznaˇcen´ı vˇsech poloˇzek seznamu. • D4D LISTBOX INDEX D4D ListboxGetItemCnt(D4D OBJECT PTR pThis) - vrac´ı poˇcet poloˇzek seznamu. • D4D LISTBOX INDEX D4D ListboxGetVisItemCnt(D4D OBJECT PTR pThis) - vrac´ı poˇcet viditeln´ych poloˇzek. • D4D LISTBOX INDEX D4D ListboxGetSelItemCnt(D4D OBJECT PTR pThis) - vrac´ı celkov´y poˇcet oznaˇcen´ych poloˇzek. • void D4D ListboxSetTitle(D4D OBJECT PTR pThis, char* pText) - nastav´ı titulek za pˇredpokladu, zˇ e je objektu pˇred´ana na m´ıstˇe titulku adresa textov´eho pole v SRAM.
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
3.3
D4D ProgressBar
Progress Bar je grafick´y zobrazovaˇc pr˚ubˇehu nˇejak´e u´ lohy cˇ i velikosti hodnoty. Jedn´a se o prvek jednoduch´y, kter´y nevyˇzaduje zˇ a´ dnou interakci s uˇzivatelem. Od uˇzivatele pouze poˇzaduje pˇred´av´an´ı hodnoty 0-100, kter´a se graficky zobraz´ı. Uprostˇred Progress Baru by mohlo b´yt moˇzn´e zobrazit danou hodnotu cˇ´ıselnˇe v podobˇe procent. Zobrazov´an´ı se prov´ad´ı pomoc´ı grafick´eho sloupce. Ten by mohl b´yt horizont´aln´ı cˇ i vertik´aln´ı.
Obr´azek 3.5: Klasick´y Progress Bar
3.3.1
Grafick´e rozhran´ı
Progress Bar se prakticky skl´ad´a z or´amov´an´ı, pozad´ı a grafick´eho sloupce kter´y mˇen´ı svou sˇ´ıˇrku popˇr´ıpadˇe v´ysˇku podle toho, jestli mluv´ıme o horizont´aln´ım nebo vertik´aln´ım Progress Baru. Volitelnˇe m˚uzˇ e b´yt uprostˇred sloupce vykreslen text zobrazuj´ıc´ı aktu´aln´ı hodnotu pr˚ubˇehu. Poˇrad´ı jednotliv´ych poloˇzek je n´asleduj´ıc´ı: 1. vykreslen´ı aktivn´ı cˇ a´ sti sloupce 2. vykreslen´ı neaktivn´ı cˇ a´ sti sloupce (pozad´ı) 3. vykreslen´ı textu 4. vykreslen´ı r´amu Vzhledem ke grafick´e jednoduchosti jsou pˇri kaˇzd´em pˇrekreslen´ı znovu vykresleny vˇsechny prvky objektu. Aby nedoch´azelo ke zbyteˇcn´emu pˇrekreslov´an´ı, je kresleno pozad´ı jen tam, kde nezasahuje barevn´y sloupec. Pro potˇrebu barvy sloupce a barvy pozad´ı byly definov´any vlastn´ı barvy pro tyto prvky v barevn´em sch´ematu a makrech pro pro tvorbu sch´emat. Patˇriˇcn´e barvy si m˚uzˇ e uˇzivatel nadefinovat pomoc´ı hodnot D4D COLOR PROGRESSB BAR FORE pro sloupec a D4D COLOR PROGRESSB BAR BCKG pro pozad´ı Progress Baru. Pokud tak neuˇcin´ı, pak jsou zvoleny v´ychoz´ı hodnoty D4D COLOR BLUE pro sloupec a D4D COLOR BRIGHT GREY. Text m´a barvu inverzn´ı v˚ucˇ i barvˇe
49
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Progress Baru, kter´a se nach´az´ı pod textem. Tedy pokud je pod textem pozad´ı, text m´a barvu sloupce a pozad´ı textu m´a barvu pozad´ı. Pokud je pod textem sloupec, pak m´a text barvu pozad´ı a pozad´ı textu m´a barvu sloupce. Dalˇs´ı moˇznost´ı je vyuˇz´ıt transparentn´ıho pozad´ı u textu. To lze definovat v pˇr´ıznaku objektu a pˇred´avat makru pro tvorbu objektu.
Obr´azek 3.6: D4D ProgressBar
3.3.2
Pouˇzit´ı objektu v aplikaci
Vzhledem k jednoduchosti cel´eho objektu byla implementov´ana dvojice maker 3.6. Prvn´ı z maker poˇzaduje vˇsechny parametry, zat´ımco druh´e nahrazuje flags, pScheme, pUser, pOnUsrMsg v´ychoz´ımi hodnotami. Pˇr´ıklad 3.6: Makra objektu D4D ProgressBar D4D DECLARE PROGRESSB(name, x, y, cx, cy, flags, pScheme, fontId, pUser, pOnUsrMsg) D4D DECLARE STD PROGRESSB(name, x, y, cx, cy, fontId)
Parametry maker jsou: • name - jm´eno objektu • x - X souˇradnice na obrazovce • y - Y souˇradnice na obrazovce • cx - rozmˇer objektu v ose X
50
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
51
• cy - rozmˇer objektu v ose Y • flags - pˇr´ıznaky objektu • pScheme - barevn´e schema • fontId - typ p´ısma zobrazovan´e hodnoty • pUser - uˇzivatelsk´y ukazatel • pOnUsrMsg - ukazatel na uˇzivatelskou funkci pro pˇr´ıjem zpr´av od knihovny Pokud chce uˇzivatel horizont´aln´ı pozici Progress Baru, jednoduˇse zad´a vˇetˇs´ı hodnotu rozmˇeru cx, neˇz rozmˇeru cy. Pro vertik´aln´ı pozici zad´a cy vˇetˇs´ı neˇz cx. Objekt pˇri vyhodnocov´an´ı rozmˇer˚u automaticky rozpozn´a jak m´a sloupec vykreslovat. Z hlediska uˇzivatelsk´ych funkc´ı obsahuje Progress Bar pouze funkce pro pr´aci s aktu´aln´ı hodnotou zobrazovanou objektem a funkci pro volbu zobrazen´ı aktu´aln´ı hodnoty jakoˇz textu: • void D4D ProgressbSetVal(D4D OBJECT PTR pThis, D4D PROGRESSB VALUE value) - nastav´ı hodnotu zobrazenou Progress Barem na hodnotu pˇredanou pomoc´ı value. Akceptuje pouze hodoty 0 aˇz 100. • D4D PROGRESSB VALUE D4D ProgressbGetVal(D4D OBJECT PTR pThis) vr´at´ı nastavenou hodnotu. • void D4D ProgressbChangeVal(D4D OBJECT PTR pThis, D4D PROGRESSB VALUE incr) - pˇriˇcte k hodnotˇe Progress Baru hodnotu pˇredanou pomoc´ı incr. • void D4D ProgressbViewVal(D4D OBJECT PTR pThis,D4D BOOL view) - pomoc´ı t´eto funkce lze zobrazit cˇ i skr´yt vykreslen´ı aktu´aln´ı hodnoty formou procent uprostˇred Progress Baru.
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
3.4
D4D EditBox
Objekt, kter´y umoˇznˇ uje editovat cˇ i zobrazovat mnohaˇra´ dkov´y text. Z tohoto d˚uvodu by mˇel umˇet zalamovat text a pohybovat se v textu po str´ank´ach. Mˇel by tak´e umoˇznˇ ovat pohyb vˇsemi smˇery uvnitˇr textu a jeho libovolnou editaci. Celkovˇe jde o sloˇzitˇejˇs´ı objekt, kv˚uli zm´ınˇen´e nutnosti implementace vykreslov´an´ı textu se spr´avn´ym zalamov´an´ım a pohybem kursoru v takto zalamovan´em textu. Aby uˇzivatel vˇedˇel, kde se nach´az´ı, bylo by vhodn´e implementovat posuvn´ık cˇ i spodn´ı liˇstu, kde by se zobrazovala aktu´aln´ı pozice kursoru, celkov´a d´elka textu a maxim´aln´ı d´elka textu, kter´y lze do Edit Boxu vloˇzit.
Obr´azek 3.7: Klasick´y Edit Box
Pro uloˇzen´ı textu do pamˇeti SRAM byla zvolena stejn´a metoda jako u objektu Text Box. Tedy text je uloˇzen ve statick´em textov´em poli, jehoˇz velikost m´a moˇznost uˇzivatel ovlivnit pˇri deklaraci objektu.
3.4.1
Grafick´e rozhran´ı
Vzhled grafick´eho rozhran´ı Edit Boxu je patrn´y z 3.8. Objekt m´a stejnˇe jako List Box sv˚uj vlastn´ı nadpis, kter´y je uloˇzen v pamˇeti programu nebo v SRAM na pozici definovan´e uˇzivatelem pomoc´ı textov´eho pole. Barvy Edit Boxu jsou standardn´ı z barevn´eho sch´ema pˇredan´eho knihovnou. Cel´y objekt se skl´ad´a z nadpisu, oddˇelovaˇce nadpisu, vlastn´ıho textu a oddˇelovaˇce cˇ a´ sti, ve kter´e se nach´az´ı cˇ´ıselnˇe zobrazen´a pozice kurzoru, celkov´a d´elka textu a takt´ezˇ maxim´aln´ı d´elka textu, kterou je Edit Box schopen uloˇzit. Posuvn´ıky nakonec nebyly implementov´any. Pro vlastn´ı navigaci slouˇz´ı kurzor, kter´y se pohybuje
52
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
v dynamicky zalamovan´em textu. Vlastn´ı pozice v textu je pak patrn´a z cˇ´ıseln´ych hodnot zobrazen´ych ve spodn´ı cˇ a´ sti Edit Boxu. Postup vykreslen´ı objektu: 1. pozad´ı - kresleno pouze poprv´e nebo pˇri poˇzadavku na kompletn´ı pˇrekreslen´ı 2. titulek - kreslen stejnˇe jako pozad´ı 3. oddˇelovaˇce titulku a spodn´ıho panelu - kresleny takt´ezˇ jako pˇredeˇsl´e cˇ a´ sti 4. hodnota maxim´aln´ı d´elky textu - je kreslena vpravo dole a to pouze poprv´e nebo pˇri poˇzadavku na kompletn´ı pˇrekreslen´ı 5. pozice kurzoru a d´elka textu - pˇrekreslov´ana po kaˇzd´em vykreslen´ı 6. vlastn´ı text - dynamicky zalamov´an pˇri kaˇzd´em vykreslen´ı 7. pr´azdn´y prostor textu - pˇrekreslov´an z d˚uvodu rychlosti, kdy celkov´e pˇrekreslen´ı pozad´ı by zp˚usobovalo pomal´y refresh obrazovky. 8. kurzor 9. r´am objektu Edit Box vykresluje text po str´ank´ach, kde zaˇca´ tek str´anky urˇcuje pomocn´a promˇenn´a lastBegin a konec str´anky pak urˇcuje promˇenn´a lastEnd. Hodnota promˇenn´e lastEnd je urˇcena na z´akladˇe dynamick´eho vykreslen´ı zalamovan´eho textu. Zalamov´an´ı je implementov´ano zp˚usobem, kdy funkce D4D EditboxFindNewLine nalezne vˇzdy nov´y poˇca´ tek a tento pˇred´a kresl´ıc´ı rutinˇe. Takto je vykreslena cel´a str´anka. Funkce jednoduˇse hled´a od pˇredan´eho poˇca´ tku, v´yskyt posledn´ı mezery cˇ i znaku nov´eho ˇra´ dku na moˇzn´em rozsahu dan´em sˇ´ıˇrkou objektu. Pokud takovou pozici najde tak vr´at´ı n´asleduj´ıc´ı zaˇca´ tek. V pˇr´ıpadˇe, zˇ e text nelze zalomit tak vr´at´ı pˇr´ımo maxim´aln´ı poˇca´ tek. To nast´av´a, pokud je dan´e slovo delˇs´ı jako ˇra´ dek Edit Boxu. Pohyb kurzoru v takto vytvoˇren´em textu nen´ı obt´ızˇ n´e implementovat pro smˇery vlevo a vpravo. Horˇs´ı situace nast´av´a pro smˇer dol˚u, kde se mus´ı hledat zaˇca´ tek a konec n´asleduj´ıc´ıho ˇra´ dku a k tomuto patˇriˇcnˇe vypoˇc´ıtat pozici v textu z aktu´aln´ı relativn´ı pozice od zaˇca´ tku ˇra´ dku. Jeˇstˇe horˇs´ı je situace pˇri pohybu kurzoru nahoru, kde se mus´ı zaˇc´ıt
53
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Obr´azek 3.8: D4D EditBox s hled´an´ım od pozice lastBegin a dynamicky naj´ıt pˇredeˇsl´e ˇra´ dky kam m´a b´yt kurzor patˇriˇcnˇe pˇresunut. Pokud kurzor pˇrekroˇc´ı konec str´anky, je nastaven lastBegin pomoc´ı hodnoty lastEnd. Pak je tedy vykreslena jednoduˇse nov´a str´anka a po jej´ım vykreslen´ı je nastaven nov´y lastEnd. Probl´em nast´av´a pokud kurzor pˇrekroˇc´ı zaˇca´ tek str´anky smˇerem nahoru. Pˇredeˇsl´e rozsahy str´anek nejsou kv˚uli u´ spoˇre datov´e pamˇeti ukl´ad´any. Proto se mus´ı pˇri takov´em posunu naj´ıt teoretick´y maxim´aln´ı zaˇca´ tek pˇredeˇsl´e str´anky a od tohoto dynamicky vyhodnocovat, zda nalezen´y konec pˇredch´az´ı zaˇca´ tku aktu´aln´ı str´anky. Tento algoritmus tedy v cyklu inkrementuje nov´y lastBegin tak dlouho, dokud nenalezne odpov´ıdaj´ıc´ı konec str´anky tak, aby str´anky na sebe navazovaly.
3.4.2
Ovl´ad´an´ı objektu
Pro ovl´ad´an´ı Edit Boxu je nutn´e m´ıt celkem 8 kl´aves pro pohyb a u´ pravy. V tomto samozˇrejmˇe nejsou zahrnuty znakov´e kl´avesy. • D4D KEY ENTER - umoˇznˇ uje vstup do editace a tak´e ukonˇcen´ı ˇra´ dku. • D4D KEY ESC - ukonˇcuje editaci textu. • D4D KEY BACKSPACE - smaˇze patˇriˇcn´y znak pˇred kurzorem.
54
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• D4D KEY SPACE - pˇrid´a klasickou mezeru do textu. • D4D KEY LEFT - pohyb kurzoru vlevo. • D4D KEY RIGHT - pohyb kurzoru vpravo. • D4D KEY UP - pohyb kurzoru nahoru. • D4D KEY DOWN - pohyb kurzoru dol˚u. Pˇri zamˇeˇren´ı Edit Boxu a stisknut´ı kl´avesy D4D KEY ENTER je spuˇstˇena editace a zobrazen kurzor. Pak objekt pˇrej´ım´a vˇsechny v´ysˇe uveden´e kl´avesy jako vlastn´ı ˇr´ıdic´ı. V tomto stavu lze vkl´adat text jako jednotliv´e znaky, kter´e jsou reprezentov´any hodnotou dle ASCII a pˇred´av´any stejnˇe jako stiskl´e navigaˇcn´ı kl´avesy. Opuˇstˇen´ı editaˇcn´ıho reˇzimu lze uskuteˇcnit stiskem D4D KEY ESC.
3.4.3
Pouˇzit´ı objektu v aplikaci
Pro vytvoˇren´ı objektu v uˇzivatelsk´e aplikaci byla zavedena dvojice maker 3.7. Pˇr´ıklad 3.7: Makra pro vytvoˇren´ı objektu D4D EditBox D4D DECLARE EDITBOX(name,title text, x, y, cx, cy, flags , pScheme, fontId , titleFontId , barFontId , posCnt, textOff , maxTxtLen, onClick, pUser, pOnUsrMsg) D4D DECLARE STD EDITBOX(name,title text, x, y, cx,cy, font, titleFontId , barFontId )
Prvn´ı z maker D4D DECLARE EDITBOX poˇzaduje od uˇzivatele vˇsechny nastaviteln´e parametry objektu: • name - n´azev vytv´aˇren´eho objektu • title text - titulek Editboxu • x - X souˇradnice pozice na obrazovce, ud´av´ana v pixelech • y - Y souˇradnice pozice na obrazovce, ud´av´ana v pixelech • cx - d´elka objektu v pixelech • cy - v´ysˇka objektu v pixelech • flags - pˇr´ıznaky objektu (napˇr. zda m˚uzˇ e b´yt zamˇeˇren, zda m˚uzˇ e m´ıt transparentn´ı pozad´ı textu apod.)
55
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• pScheme - ukazatel na barevn´e sch´ema objektu • fontId - zvolen´e p´ısmo pro text objektu • titleFontId - styl p´ısma pro titulek objektu • barFontId - styl p´ısma pro spodn´ı panel • posCnt - poˇcet ˇra´ dk˚u • textOff - rozestup ˇra´ dk˚u • maxTxtLen - maxim´aln´ı d´elka textu, kter´y m˚uzˇ e b´yt uloˇzen a zobrazen • OnClick - ukazatel na uˇzivatelskou funkci • pUser - uˇzivatelsk´y ukazatel pro libovoln´e uˇzit´ı • pOnUsrMsg - ukazatel na uˇziv. funkci, kter´a pokud je definov´ana tak m˚uzˇ e pˇrij´ımat zpr´avy urˇcen´e dan´emu objektu Druh´e z maker poˇzaduje po uˇzivateli pouze z´akladn´ı parametry objektu a za zbytek jsou dosazeny v´ychoz´ı hodnoty a nebo jsou hodnoty vypoˇc´ıt´any z rozmˇer˚u objektu a p´ısma. To je provedeno napˇr´ıklad u hodnot pro poˇcet ˇra´ dk˚u a jejich rozestup. Pro pr´aci s objektem m˚uzˇ e uˇzivatel volat 6 funkc´ı, kter´e pracuj´ı s textem objektu. Je tu tak´e moˇznost implementace vlastn´ı uˇzivatelsk´e funkce, kter´a je vol´ana po stisknut´ı libovoln´e kl´avesy nad dan´ym Edit Boxem a jsou ji pˇred´any parametry pozice kurzoru v objektu a vlastn´ı hodnota tlaˇc´ıtka, kter´e tuto ud´alost vyvolala 3.8. Pˇr´ıklad 3.8: Hlaviˇcka uˇzivatelsk´e funkce pro D4D EditBox OnClicked(D4D OBJECT∗ pThis, D4D EBOX INDEX index,D4D KEYS key);
Funkce pro pr´aci s Editboxem: • void D4D EditboxSetText(D4D OBJECT PTR pThis, char * pText) - nastav´ı text dle pˇredan´eho textu, na kter´y ukazuje pText • void D4D EditboxDelText(D4D OBJECT PTR pThis) - vymaˇze cel´y text, kter´y je zobrazen v Edit Boxu
56
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• void D4D EditboxTextEdit(D4D OBJECT PTR pThis, char * text, D4D EBOX INDEX pos) - na uvedenou pozici pos vloˇz´ı pˇredan´y text • void D4D EditboxDelChars(D4D OBJECT PTR pThis, D4D EBOX INDEX pos, D4D EBOX INDEX cnt) - vymaˇze od dan´e pozice zadan´y poˇcet znak˚u smˇerem vlevo • char * D4D EditboxGetText(D4D OBJECT PTR pThis) - vr´at´ı ukazatel na textov´e pole Editboxu • void D4D EditboxSetTitle(D4D OBJECT PTR pThis,char * pText) - pokud uˇzivatel pˇred´a makru pro vytvoˇren´ı objektu na pozici titulku vlastn´ı textov´e pole, pak lze uˇz´ıt tuto funkci pro vlastn´ı nastaven´ı textu.
57
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
4
´ ER ˇ ZAV
Po d˚ukladn´em studiu knihovny D4D jsem postupnˇe navrhl, implementoval a odladil zadan´e objekty Text Box, List Box, Progress Bar a Edit Box, coˇz bylo hlavn´ım u´ kolem t´eto bakal´aˇrsk´e pr´ace. Grafick´y objekt Text Box byl implementov´an jako jednoduch´e jednoˇra´ dkov´e editaˇcn´ı okno s moˇznost´ı rolov´an´ı textu pˇri pohybu kurzorem. Objekt List Box byl nakonec implementov´an jako seznam poloˇzek, kter´e se nach´az´ı v pamˇeti programu. Jsou vytv´aˇreny pouze pˇred kompilac´ı. Tato moˇznost byla zvolena z d˚uvodu u´ spory pamˇeti dat. Program´ator m´a vˇsak moˇznost ovlivnit zda se jednotliv´e poloˇzky seznamu zobraz´ı pomoc´ı funkc´ı. Vlastn´ı interakce uˇzivatele s objektem spoˇc´ıv´a v moˇznosti pohybu kurzorem v seznamu a v´ybˇeru jednotliv´ych poloˇzek. Grafick´y objekt Progress Bar je z implementovan´ych objekt˚u nejjednoduˇssˇ´ı. Zobrazuje hodnotu 0 aˇz 100% grafick´ym sloupcem, jehoˇz barvy m˚uzˇ e program´ator libovolnˇe nadefinovat. Objekt m´a moˇznosti zobrazen´ı jak vertik´alnˇe tak horizont´alnˇe a umoˇznˇ uje zobrazen´ı hodnoty v podobˇe cˇ´ısla uprostˇred objektu. Objekt neumoˇznˇ uje zˇ a´ dnou interakci s uˇzivatelem. Posledn´ı z implementovan´ych objekt˚u Edit Box je patrnˇe nejsloˇzitˇejˇs´ı. Objekt umoˇznˇ uje vkl´ad´an´ı textu na v´ıce ˇra´ dk˚u. Z toho d˚uvodu byla do objektu implementov´ana vlastnost dynamick´eho zalamov´an´ı ˇra´ dk˚u a zobrazov´an´ı textu po str´ank´ach. Celkov´e schopnosti implementovan´ych grafick´ych objekt˚u jsou patrn´e z jejich deklaraˇcn´ıch maker pro vytvoˇren´ı objekt˚u a funkc´ı, kter´e jsou pops´any v t´eto bakal´aˇrsk´e pr´aci. Aˇckoliv m´a knihovna moˇznost pouˇzit´ı i na dotykov´ych displej´ıch, nebyla tato vlastnost u objekt˚u implementov´ana z d˚uvodu nemoˇznosti odladˇen´ı na bezdotykov´em LCD, kter´e bylo dod´ano k v´yvojov´emu kitu. Dalˇs´ı rozˇs´ıˇren´ı objekt˚u by bylo moˇzn´e v implementaci speci´aln´ıch uˇzivatelsk´ych funkc´ı napˇr´ıklad pro pr´aci s textem cˇ i vyuˇzit´ı bitmapov´ych obr´azk˚u pro jednotliv´e cˇ a´ sti objekt˚u. Nejvˇetˇs´ı moˇznosti rozˇs´ıˇren´ı nab´ız´ı objekt Edit Box, kde by bylo moˇzn´e implementovat schopnosti oznaˇcen´ı, kop´ırov´an´ı a vkl´ad´an´ı textu pˇres grafick´e rozhran´ı cˇ i implementovat vertik´aln´ı posuvn´ık. Na z´avˇer jsem vytvoˇril aplikaci pro dodan´y v´yvojov´y kit DEMOQE128, na kter´e lze prezentovat vlastn´ı implementovan´e objekty Text Box, List Box, Progress Bar a Edit Box.
58
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
59
REFERENCE ˇ ´ CEK, [1] VOJA A. Jak snadn´y je pˇrechod z 8bit. MCU na 32bitov´y s kitem DEMOQE128 ? [online]. 2008, posledn´ı aktualizace 3. 1. 2008 [cit. 17. 11. 2009]. Dostupn´e z URL:
. [2] FREESCALE. 5/2007,
rev.
HCS08
Family
2
20.
[cit.
Reference 11.
[online].
Manual
2009].
Dostupn´e
z
URL:
. [3] FREESCALE. 6/2007,
rev.
MC9S08QE128 2
[cit.
22.
Reference
Manual
2009].
Dostupn´e
11.
[online]. z
URL:
. [4] FREESCALE. line].
7/2006,
Version rev.
0
R ColdFire
1 [cit.
23.
11.
White
2009].
[on-
Paper
Dostupn´e
z
URL:
. [5] FREESCALE. 9/2007,
rev.
MCF51QE128 3
[cit.
Reference
26.
11.
2009].
[online].
Manual Dostupn´e
z
URL:
. [6] Petr Gargulak. Freescale Lightweight Display Driver for Flexis Family [CD-ROM]. 2009, rev. 2 [cit. 1. 4. 2010]. Dokumentace knihovny Freescale D4D. [7] P&E Micro. DEMOQE128UM -QE Family Demonstration Board User’s Manual [online]. 9/2009, rev. 1.06 [cit. 25. 11. 2009]. Dostupn´e z URL: . [8] Wikipedie.
ASCII
-
American
Standard
Code
for
Information
Inter-
change [online]. 2. 3. 2010 [cit. 16. 4. 2010]. Dostupn´e z URL: .
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
ˇ ˚ VELICIN SEZNAM SYMBOLU, A ZKRATEK LCD displej z tekut´ych krystal˚u – Liquid Crystal Display CPU procesor – Central Processing Unit MCU jednoˇcipov´y poˇc´ıtaˇc – Microcontroller SRAM statick´a volatiln´ı pamˇet s libovoln´ym pˇr´ıstupem – Static Random-Access Memory FLASH nevolatiln´ı pamˇet s libovoln´ym pˇr´ıstupem RISC architektura procesor˚u s redukovanou instrukˇcn´ı sadou – Reduced Instruction Set Computer
60
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
61
ˇ ILOH ´ SEZNAM PR A Tabulka ASCII
62
B DEMOQE128
63
C Prezentaˇcn´ı aplikace
64
C.1 Struktura projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
C.2 Ovl´ad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
D Elektronick´a pˇr´ıloha
69
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
A
TABULKA ASCII
Obr´azek A.1: ASCII tabulka znak˚u [8]
62
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
B
DEMOQE128
Obr´azek B.1: V´yvojov´y kit DEMOQE128 s procesory MC9S08QE128 a MCF51QE128
Obr´azek B.2: V´yvojov´y kit DEMOQE128 s LCD (vrchn´ı strana)
63
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
64
ˇ I´ APLIKACE PREZENTACN
C
Na z´avˇer byla vytvoˇrena pro potˇreby testov´an´ı a prezentace navrˇzen´ych objekt˚u aplikace pro v´yvojov´y kit DEMOQE128.
C.1
Struktura projektu
Projekt i samotnou knihovnu lze naj´ıt na doprovodn´em mediu ve sloˇzce CW Projekt, kde d´ale ve sloˇzce project d4d lze naj´ıt stejnojmenn´y projekt prezentaˇcn´ı aplikace, spustiteln´y souborem project d4d.mcp za pˇredpokladu nainstalovan´eho v´yvojov´eho prostˇred´ı CodeWarrior for Microcontrollers. Po otevˇren´ı ve v´yvojov´em prostˇred´ı je vlevo stromov´a struktura projektu kde d˚uleˇzit´e sloˇzky jsou: • D4D-bak-prace - zmˇenˇen´e cˇ i novˇe vytvoˇren´e soubory knihovny D4D v r´amci bakal´aˇrsk´e pr´ace: – upravene soub - soubory rozˇs´ıˇren´e v r´amci bakal´aˇrsk´e pr´ace – graphic obj - vlastn´ı soubory implementovan´ych objekt˚u • D4D-bez zmen - p˚uvodn´ı nezmˇenˇen´e soubory knihovny D4D • D4D Conf Files - konfiguraˇcn´ı soubory knihovny D4D • Sources - vlastn´ı zdrojov´e soubory prezentaˇcn´ı aplikace
C.2
Ovl´ad´an´ı
Po spuˇstˇen´ı se naˇcte u´ vodn´ı obrazovka (obr. C.1), kde v prav´em horn´ım rohu je D4D Listbox Vyber obj, kter´y se nach´az´ı na vˇsech obrazovk´ach aplikace a lze pomoc´ı nˇej vyb´ırat objekty. Volba objektu v List Boxu Vyber obj se provede pomoc´ı tlaˇc´ıtek oznaˇcen´ych na kitu jako D6 a D7 (pohyb v seznamu) a potvrzen´ı pomoc´ı tlaˇc´ıtka D5. Na u´ vodn´ı obrazovce nejsou kl´avesy oznaˇceny. Kaˇzd´y objekt m´a svou vlastn´ı obrazovku. Na vlastn´ıch obrazovk´ach objekt˚u Text Box (obr. C.2), List Box (obr. C.3), Progress Bar (obr. C.4) a Edit Box (obr. C.5) se krom samotn´ych objekt˚u nach´az´ı jeˇstˇe pomocn´e objekty Button, kter´ymi lze volit r˚uzn´e funkce,
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
kter´e vyuˇz´ıvaj´ı implementovan´ych uˇzivatelsk´ych funkc´ı pro pr´aci s prezentovan´ymi objekty. Ve spodn´ı cˇ a´ sti obrazovky se nach´az´ı zobrazen´ı aktu´aln´ıho v´yznamu ovl´adac´ıch tlaˇc´ıtek, kde tlaˇc´ıtko A0 (na displeji MK1 - MK4) pˇrep´ın´a v´yznam zbyl´ych ovl´adac´ıch kl´aves. Pˇri stisku libovoln´eho ovl´adac´ıho tlaˇc´ıtka je stisk signalizov´an zobrazen´ım cˇ erven´eho r´ameˇcku na popisku dan´eho tlaˇc´ıtka na displeji. Tlaˇc´ıtko A0 definuje 4 volby kl´aves : • MK1 - z´akladn´ı kl´avesy pro pohyb mezi objekty ESC, ENTER, UP, DOWN • MK2 - kl´avesy LEFT, RIGHT, SPACE a BACKSPACE • MK3 - kl´avesy pro vkl´ad´an´ı textov´ych znak˚u (p´ısmen) ’A’, ’H’, ’O’, ’J’ • MK4 - kl´avesy pro vkl´ad´an´ı textov´ych znak˚u (ˇc´ıslic) ’3’, ’7’, ’0’, ’9’ Pro pohyb mezi objekty slouˇz´ı kl´avesy UP, DOWN. Objekt lze vybrat kl´avesou ENTER, kdy se provede bud’ uveden´a akce (Button) a nebo se vstoup´ı do samotn´eho pohybu v objektu (pˇr. List Box). Pro opuˇstˇen´ı pohybu uvnitˇr objektu lze pouˇz´ıt kl´avesu ESC. Zbyl´e kl´avesy slouˇz´ı zejm´ena pro pr´aci uvnitˇr objekt˚u Text Box a Edit Box. Kaˇzd´y objekt umoˇznˇ uje testovat jin´e funkce: • Text Box – Button vloz txt - vloˇz´ı do objektu pˇrednastaven´y text – Button smaz txt - smaˇze text v objektu • List Box – Button unSel - smaˇze oznaˇcen´ı vˇsech poloˇzek objektu – Button oneSel/neomez - volba oznaˇcen´ı jedn´e cˇ i v´ıce poloˇzek seznamu – Button sudy - zobraz´ı pouze sud´e poloˇzky seznamu – Button vse - zobraz´ı vˇsechny poloˇzky – Button lichy - zobraz´ı lich´e poloˇzky – Label Celk.oznac - poˇcet oznaˇcen´ych poloˇzek – Label Enter pos - posledn´ı pozice v seznamu, kde byl stisknut ENTER
65
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
• Progress Bar – Button +10 - inkrementuje Prog. Bary o 10% – Button -10 - dekrementuje o 10% – Button skryj/zobraz val. - skryje cˇ i zobraz´ı vykreslenou hodnotu v % • Edit Box – Button umaz - od indexu 14 umaˇze 9 znak˚u smˇerem vlevo – Button pripis - na pozici indexu 6 pˇrip´ısˇe text ”PRIPSANO”(lze umazat v´ysˇe uveden´ym tlaˇc´ıtkem) – Button vloz txt - vloˇz´ı pˇrednastaven´y text do objektu – Button smaz txt - smaˇze cel´y text
´ Obr´azek C.1: Uvodn´ ı obrazovka aplikace
66
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Obr´azek C.2: Obrazovka aplikace s objektem Text Box
Obr´azek C.3: Obrazovka aplikace s objektem List Box
67
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
Obr´azek C.4: Obrazovka aplikace s objektem Progress Bar
Obr´azek C.5: Obrazovka aplikace s objektem Edit Box
68
´ ˇ I´ TECHNIKY USTAV AUTOMATIZACE A MEˇ RIC Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı Vysok´e uˇcen´ı technick´e v Brnˇe
D
´ PR ˇ ILOHA ´ ELEKTRONICKA
Souˇca´ st´ı bakal´aˇrsk´e pr´ace je tak´e elektronick´a pˇr´ıloha (CD), kde lze naj´ıt: • zdrojov´e soubory knihovny D4D s implementovan´ymi objekty .\CW Pro ject\D4D\D4D\graphic ob jects\ • projekt z v´yvojov´eho prostˇred´ı CodeWarrior s pˇr´ıklady pouˇzit´ı objekt˚u .\CW Pro ject\pro ject d4d\ • dokumentaci knihovny D4D .\Literatura\Freescale D4D.pd f • dokumentaci v´yvojov´eho kitu a mikrokontrol´er˚u .\Literatura\ • elektronickou verzi t´eto pr´ace .\Bp Tisk\BP.pd f • pomocn´y software na generov´an´ı bitmap z obr´azk˚u pro knihovnu D4D .\So f tware\D4D Image Converter1.1 • p˚uvodn´ı zdrojov´e soubory a projekty dodan´e k bakal´aˇrsk´e pr´aci ve spustiteln´em archivu .\So f tware\D4D Pack RC.exe
69