Download as pdf or txt
Download as pdf or txt
You are on page 1of 260

LP TRNH H NHNG

GV: Phm Ngc Hng


B mn K thut My tnh
Vin CNTT&TT- H BKHN
email: hungpn@soict.hut.edu.vn
Lp trnh nhng ARM-Linux
Ni dung
Chng 1. Gii thiu lp trnh h nhng
Chng 2. Lp trnh v{o ra c bn
Chng 3. Lp trnh v{o ra n}ng cao
Chng 4. C|c k thut lp trnh n}ng cao
Chng 5. Lp trnh device driver trn Linux
Chng 6. Lp trnh nn tng QT
Chng 7. Lp trnh mng trn Linux nhng
Chng 8. Lp trnh x l nh trn nn nhng
2
Lp trnh nhng ARM-Linux
Ti liu tham kho
Ti liu tham kho chnh:
Micro2440 User Manual
S3C2440 MicroController Users Manual
Beginning Linux Programming
Advanced Linux Programming
Linux Device Driver
C++ GUI programming with QT
Website:
https://sites.google.com/site/embedded247/

3
Lp trnh nhng ARM-Linux
Chng 1

Gii thiu
Lp trnh h nhng
4
Lp trnh nhng ARM-Linux
Ni dung chng 1
1.1. Gii thiu v lp trnh h nhng
1.2. Gii thiu KIT FriendlyArm micro2440
1.3. H iu h{nh nhng Linux
1.4. Mi trng lp trnh KIT FriendlyArm 2440
5
Lp trnh nhng ARM-Linux
1.1. Gii thiu lp trnh h nhng
Lp trnh ng dng trn h nhng ph thuc vo nn
tng (platform) phn cng, phn mm ca h nhng .
H nhng khng c h iu hnh:
Thng s dng c|c vi iu khin
hiu nng tng i thp
(8051, ATMega, PIC, ARM7, )
Lp trnh bng C, ASM
Mi trng, cng c lp trnh ty theo tng dng vi iu
khin (CodeVision, AVR Studio, Keil)
Ph hp c|c ng dng iu khin v{o/ra c bn, c|c giao
tip ngoi vi c bn.
6
Lp trnh nhng ARM-Linux
1.1. Gii thiu lp trnh h nhng
H nhng c h iu hnh:
Da trn c|c vi iu khin, vi x l (CPU) c hiu
nng cao (V d: AVR 32, ARM 9, ARM 11, )
Nhiu nn tng h iu h{nh nhng : uCLinux,
Embedded Linux, Windows CE,
Mi trng, cng c lp trnh ty thuc nn tng h
iu h{nh: C/C++, QT SDK (Nokia), .Net Compact
FrameWork (Microsoft),
ng dng nhiu b{i to|n phc tp: GPS
Tracking/Navigator, X l nh, ng dng
Client/Server,
7
Lp trnh nhng ARM-Linux
1.1. Gii thiu lp trnh h nhng
Cc thit b di ng thng minh:
Xu hng cng ngh hin nay
Nhiu nn tng: iOS, Android, Windows Phone,
Symbian OS/Memo,
Mi trng, cng c:
iOS: Xcode + iOS SDK (ngn ng Object-C)
Android: C, Java + Android SDK, Eclipse/Netbean
Windows Phone: SDK + Visual Studio (C#)
C|c ng dng phong ph: Google Play Store, Apple
Store, Windows Market Place,

8
Lp trnh nhng ARM-Linux
1.1. Gii thiu lp trnh h nhng
Mn hc n{y hng ti:
Lp trnh h nhng nn tng ARM + Linux
Minh ha trn KIT FriendlyArm micro 2440
Lp trnh C/C++, lp trnh giao din ha QT
L do:
ARM ? > 90% th phn thit b nhng,
l{ dng vi iu khin hiu nng cao.
Embedded Linux ? M~ ngun m, kh nng can thip, hiu
s}u h thng. Nhiu OS kh|c (iOS, Android) da trn Linux
kernel
9
Lp trnh nhng ARM-Linux
1.2. Gii thiu KIT nhng micro2440
10
Lp trnh nhng ARM-Linux
Gii thiu KIT nhng micro2440
11
Lp trnh nhng ARM-Linux
Gii thiu KIT nhng micro2440
12
Lp trnh nhng ARM-Linux
Gii thiu KIT nhng micro2440
Thng s k thut

13
Lp trnh nhng ARM-Linux
Gii thiu KIT nhng micro2440
14
Lp trnh nhng ARM-Linux
1.3. H iu hnh nhng Linux
1.3.1. Tng quan h iu h{nh nhng Linux
1.3.2. C{i t Embedded Linux trn Micro2440
1.3.3. Bin dch, ty bin nh}n Linux
15
Lp trnh nhng ARM-Linux
1.3.1. Tng quan Embedded Linux
H iu h{nh nhng (embedded os) ?
L{ h iu h{nh c{i t cho c|c h thng nhng
(embedded system)
c thit k: compact, efficient, reliable.
16
Lp trnh nhng ARM-Linux
S phn cp h thng
17
Lp trnh nhng ARM-Linux
Kin trc h iu hnh Linux
18
Lp trnh nhng ARM-Linux
c trng h iu hnh nhng
Tng tnh tin cy (reliability)
Tng tnh kh chuyn (portability)
Kh nng tng thch mm: d d{ng n}ng cp hay
thu gn tng thch vi nn tng h thng
Thu gn, i hi t b nh hn. C th h tr khi
ng t b nh ROM, Flash (h thng khng c
cng)
Cung cp c|c c ch lp lch (scheduler) h tr thi
gian thc (Realtime OS RTOS)
19
Lp trnh nhng ARM-Linux
H iu hnh thi gian thc
H thng thi gian thc (Realtime): c|c phn mm,
phn cng hot ng tha m~n c|c r{ng buc v
thi gian
Ph}n loi:
Hard Realtime: khng |p ng deadline -> li h
thng
Soft Realtime: khng |p ng deadline -> gim cht
lng dch v (QoS)
20
Lp trnh nhng ARM-Linux
H iu hnh thi gian thc
21
Lp trnh nhng ARM-Linux
Cu trc nhn h iu hnh
22
Lp trnh nhng ARM-Linux
H thng file trong Linux
Mt s th mc quan trng
/home: th mc ngi dng
/dev: cha c|c file thit b
/bin: cha c|c file thc thi ca h thng
/etc: cha c|c file cu hnh
/var: cha c|c file log
/opt: cha c|c gi chng trnh c{i t thm
/proc: cha thng tin v c|c tin trnh, c|c th{nh phn phn
cng, phn mm ang chy trong h thng
/usr: cha c|c file thc thi, t{i liu lin quan ti ngi dng

23
Lp trnh nhng ARM-Linux
Embedded Linux
H tr rt nhiu kin trc vi x l (c 32 bit v{ 64
bit)
Intel X86, ARM, PowerPC, MIPS, AVR32,
Khng h tr c|c vi iu khin hiu nng thp
H tr c kin trc c v{ khng c khi qun l b
nh (MMU)
C|c h thng c th dng chung toolchains,
bootloader v{ kernel, c|c th{nh phn kh|c phi
ring bit v{ tng thch vi tng h thng
24
Lp trnh nhng ARM-Linux
Qu trnh boot h thng Linux trn PC
25
Lp trnh nhng ARM-Linux
Qu trnh boot h thng Linux nhng
26
Lp trnh nhng ARM-Linux
Qu trnh boot h thng Linux nhng
Boot loader: chng trnh mi, thc hin kim tra
phn cng h thng v{ np nh}n (kernel) ca h
iu h{nh
Kernel: nh}n h iu h{nh, cha c|c th{nh phn
c bn nht
Root file system: h thng file, cha c|c modules
b sung v{ c|c phn mm ng dng
27
Lp trnh nhng ARM-Linux
1.3.2. Ci t Embedded Linux
Bc 1: C{i t bootloader (VD: U-Boot,
Supervivi)
Bc 2: C{i t kernel
Bc 3: C{i t h thng file (root file system)
28
Lp trnh nhng ARM-Linux
Ci t t mi trng Windows
Cng c
Phn mm HyperTerminal: kt ni vi KIT
micro2440 qua cng COM
Phn mm DNW: kt ni vi KIT micro2440 qua
cng USB
C|ch thc
Phn mm HyperTerminal (giao tip vi BIOS trn
Nor Flash qua cng rs232) truyn c|c lnh iu
khin
Phn mm DNW trao i file
29
Lp trnh nhng ARM-Linux
Ci t t mi trng Linux
Cng c:
Phn mm minicom: kt ni vi KIT micro2440
qua cng COM
Phn mm usbpush: kt ni vi KIT micro2440 qua
cng USB
C|ch thc
Phn mm minicom cho php giao tip serial,
truyn c|c lnh iu khin
Phn mm usbpush np file xung KIT


30
Lp trnh nhng ARM-Linux
Ci t h iu hnh nhng Linux
Demo
<Xem hng dn chi tit trong ti liu
hng dn ci t v s dng KIT
micro2440>
31
Lp trnh nhng ARM-Linux
1.3.3. Bin dch, ty bin nhn Linux
Khi n{o cn bin dch li nh}n?
Khi n}ng cp h thng ln c|c phin bn mi hn
Khi cn sa li, thay i, ty chnh c|c module
Qu| trnh bin dch nh}n
Download nh}n ti a ch: kernel.org (Hoc trong
CD i km KIT)
File nn linux-2.6.32.2.tar (ty phin bn);
Gii nn c th mc to{n b m~ ngun ca nh}n
(v d th mc linux-2.6.32.2)

32
Lp trnh nhng ARM-Linux
Bin dch nhn Linux
Qu| trnh bin dch nh}n (tip):
V{o th mc cha m~ ngun nh}n (linux-2.6.32.2)
Cu hnh trc khi bin dch bng lnh:
make menuconfig
Xut hin giao din cu hnh, ty chnh ph hp vi
h thng.
Thc hin bin dch bng lnh: make zImage
Bin dch th{nh cng kt qu s l{ file zImage (trong
th mc linux-2.6.32.2/arch/arm/mach-s3c2440) ,
s c np (porting) xung KIT
33
Lp trnh nhng ARM-Linux
Bin dch nhn Linux
Demo
<Xem hng dn chi tit trong ti liu
hng dn ci t v s dng KIT
micro2440>
34
Lp trnh nhng ARM-Linux
1.4. Mi trng lp trnh KIT
FriendlyARM Micro2440
1.4.1. Mi trng ph|t trin ng dng nhng
1.4.2. C{i t mi trng ph|t trin KIT 2440
1.4.3. Chng trnh HelloWorld

35
Lp trnh nhng ARM-Linux
1.4.1. Mi trng pht trin ng dng
nhng
M hnh lp trnh h thng nhng
Mi trng lp trnh KIT micro 2440
36
Lp trnh nhng ARM-Linux
M hnh lp trnh h thng nhng
Host: h thng cha mi trng pht trin
Target: h nhng cn pht trin ng dng
37
Lp trnh nhng ARM-Linux
Mi trng lp trnh KIT micro 2440
M|y host c{i h iu h{nh Linux (Ubuntu 10.04)
Trnh bin dch cho Cross toolchains (arm-linux-gcc 4.4.3):
bin dch ng dng (vit bng C/C++)
Cng c vit m~ ngun chng trnh C (dng gedit, eclipse)
gFTP: truyn nhn file Host<->KIT qua giao thc FTP
Telnet: kt ni KIT qua Ethernet (s dng cross cable)

38
Lp trnh nhng ARM-Linux
Mi trng lp trnh theo nhm
Mi trng pht trin ng dng theo nhm
39
Lp trnh nhng ARM-Linux
1.4.2. Ci t mi trng pht trin
Cu hnh mng LAN (host + KIT) qua c|p cho v{ s
dng IP cng di:
Linux host: 192.168.1.30
Linux target: 192.168.1.230 (default)

40
Lp trnh nhng ARM-Linux
Ci t trnh bin dch cho
Bc 1: Gii nn arm-linux-gcc-4.4.3.tar.gz
tar zxvf arm-linux-gcc-4.4.3.tar.gz
Bc 2: Cp nht bin mi trng PATH
Thm ng dn ti th mc bin ca arm-linux-gcc-
4.4.3 (Cp nht bin mi trng PATH trong file
.bashrc trong ng dn ch ra bi bin $HOME)
Bc 3: Kim tra trnh bin dch
M c s console, g lnh: arm-linux-gcc --version
Thng b|o v phin bn ca arm-linux-gcc hin ra =>
qu| trnh c{i t th{nh cng
41
Lp trnh nhng ARM-Linux
Kim tra trnh bin dch cho
42
Lp trnh nhng ARM-Linux
Ci t phn mm gFTP
Bc 1: Ci t phn mm gFTP (nu cha c)
G lnh: sudo apt-get install gftp
Bc 2: Kim tra kt ni gia Host v Target
M phn mm gFTP: Applications->Internet-
>gFTP
Thit lp cc tham s
a ch IP ca KIT: 192.168.1.230
Username: root
Password: ktmt (c th i bng lnh passwd)
M kt ni
43
Lp trnh nhng ARM-Linux
Kt ni s dng gFTP
44
Lp trnh nhng ARM-Linux
Ci t phn mm debug GDB
Bc 1: download m~ ngun gdb (version 7.0)
Cch 1: apt-get source gdb
Cch 2: http://ftp.gnu.org/gnu/gdb/
Bc 2: Bin dch v{ c{i t gdb client trn m|y
HOST
Bc 3: Bin dch v{ c{i t gdb server trn m|y
TARGET
(Chi tit xem trong ti liu hng dn ci t mi
trng pht trin ng dng)
45
Lp trnh nhng ARM-Linux
1.4.3. Chng trnh HelloWorld
Cu trc chng trnh n gin
C|ch thc bin dch chng trnh
Np file thc thi xung KIT v{ chy ng dng
46
Lp trnh nhng ARM-Linux
Cu trc chng trnh
Tu}n th cu trc chng trnh ANSII C
47
Lp trnh nhng ARM-Linux
Chng trnh Hello World
Son tho m~ ngun chng trnh C bng gedit (file Hello.c)

#include <stdio.h>
int main (int argc, char* argv[])
{
printf(Hello World !\n);
printf (Ten chuong trinh la %s.\n, argv[0]);
printf (Chuong trinh co %d tham so \n, argc - 1);
/* Neu co bat cu tham so dong lenh nao*/
if (argc > 1) {
/* Thi in ra*/
int i;
printf (Cac tham so truyen vao la:\n);
for (i = 1; i < argc; ++i)
printf ( Tham so %d: %s\n, i, argv[i]);
}
return 0;
}
48
Lp trnh nhng ARM-Linux
Cch thc bin dch chng trnh
Cch 1: S dng lnh ca cross compiler
VD: arm-linux-gcc g o Hello Hello.c
Kt qu: bin dch ra mt file thc thi c tn l{ Hello t mt file
m~ ngun l{ Hello.c, file n{y c h tr kh nng debug (-g)
Cch 2: To v{ s dng Makefile
make l{ mt tool cho php qun l qu| trnh bin dch, lin kt
ca mt d |n vi nhiu file m~ ngun.
To Makefile lu c|c lnh bin dch theo nh dng ca
Makefile
S dng lnh make chy Makefile v{ bin dch chng trnh
Cch 3: S dng automake v autoconf
To makefile t ng
49
Lp trnh nhng ARM-Linux
Cu trc Makefile
Makefile cu th{nh t c|c target, variables v{
comments
Target c cu trc nh sau:
target: dependencies
[tab] system command
target: make target
Dependencies: c|c th{nh phn ph thuc (file m~
ngun, c|c file object)
System command: c|c c}u lnh (lnh bin dch, lnh
linux)
50
Lp trnh nhng ARM-Linux
VD 1: Makefile n gin
CC=arm-linux-gcc
all: Hello.c
$(CC) g o Hello Hello.c
clear:
rm Hello

Bin dch chng trnh: make all
Xa file sinh ra trc : make clear
51
Lp trnh nhng ARM-Linux
VD 2: Makefile lin kt
Hello.c Display.c
Display.h
include
include
void display(int index, char* str)
void display(int index, char* str)
52
Lp trnh nhng ARM-Linux
VD2: Makefile lin kt
Hello.c
Compiler
Hello.o
Display.c
Compiler
Display.o
Linker
Hello
File thc thi
53
Lp trnh nhng ARM-Linux
VD 2: Makefile lin kt
CC=arm-linux-gcc
OUTPUT=Hello
all:Hello.o display.o
$(CC) -o $(OUTPUT) Hello.o display.o
Hello.o:Hello.c
$(CC) -c Hello.c
display.o:display.c
$(CC) -c display.c
54
Lp trnh nhng ARM-Linux
Np file thc thi xung KIT
Bc 1: s dng phn mm gFTP chuyn file Hello
(~ c bin dch trc ) xung KIT, v d
xung th mc: /ktmt
Bc 2: telnet xung KIT, chuyn ti th mc
/ktmt, thc thi chng trnh
G lnh: ./Hello
Nu chng trnh cha c quyn thc thi, thc hin
cp quyn: chmod +x Hello
Bc 3: quan s|t kt qu
55
Lp trnh nhng ARM-Linux
Tho lun
56
Lp trnh nhng ARM-Linux
Chng 2


Lp trnh vo ra c bn
57
Lp trnh nhng ARM-Linux
Mc tiu chng 2
Sau khi kt thc chng n{y, sinh vin c th
Nm c nguyn tc lp trnh giao tip v{o ra c
bn trn h iu h{nh Linux nhng
Lp trnh giao tip thit b (ghp ni GPIO) vi
driver ~ c (led, button)
Bit c|ch lp trnh giao tip GPIO m rng da trn
giao din sysfs (gpiolib)

58
Lp trnh nhng ARM-Linux
Ni dung bi hc
2.1. C ch lp trnh giao tip thit b
2.2. Lp trnh iu khin led n
2.3. Lp trnh giao tip nt bm
2.4. Lp trnh giao tip GPIO m rng

59
Lp trnh nhng ARM-Linux
2.1. C ch lp trnh giao tip thit b
Device files, Device number
Kim tra danh s|ch device driver, thit b
C ch giao tip
60
Lp trnh nhng ARM-Linux
M hnh giao tip ng dng thit b
Phn mm ng dng
Device files
Device Drivers
Phn cng
User Space
Kernel Space
(Ton quyn truy xut trc tip ti
nguyn phn cng ca h thng)
Cc hm giao tip chun:
open
close
read
write
ioctl

61
Lp trnh nhng ARM-Linux
Device files, Device number
Device files: ls l /dev
Device file khng phi l{ file thng thng, khng
phi l{ mt vng d liu trn h thng file
Qu| trnh c ghi device file
Giao tip vi device driver
c, ghi phn cng ca thit b
Ph}n loi device files
Character device: thit b phn cng c, ghi mt
chui c|c byte d liu
Block device: thit b phn cng c, ghi mt khi
d liu



62
Lp trnh nhng ARM-Linux
Device files, Device number
Device number: mi thit b c x|c nh bi hai
gi| tr
Major device number: x|c nh thit b n{y s dng
drvier no
Minor device number: ph}n bit gia c|c thit b
kh|c nhau cng s dng chung mt device driver



63
Lp trnh nhng ARM-Linux
Kim tra danh sch thit b
Kim tra danh s|ch c|c thit b
G lnh ls al /dev
Gii thch thng tin
Loi thit b: char device hay block device
Ti khon ngi dng
Tn thit b
Major v minor number
Mount ponint

64
Lp trnh nhng ARM-Linux
Kim tra danh sch thit b
Kim tra danh s|ch c|c nhm thit b
G lnh cat /proc/devices


65
Lp trnh nhng ARM-Linux
C ch lp trnh giao tip thit b
C ch lp trnh
S dng c|c h{m v{o ra file
open
close
read
write
S dng h{m iu khin v{o ra: ioctl


66
Lp trnh nhng ARM-Linux
2.2. Lp trnh iu khin led n
S dng led driver ~ c
4 led n, ghp ni qua GPB5,6,7,8
iu khin led on/off, to hiu ng: nhp nh|y,
chy ui,
Cn s dng h{m tr (delay): sleep, usleep (th
vin sys/time.h)
67
Lp trnh nhng ARM-Linux
M hnh giao tip iu khin led
Phn mm ng dng
Device files
Device Drivers
Phn cng
leds.c
/dev/leds
Mini2440_leds.c
GPIO Port
Hm giao tip:
open
close
ioctl
68
Lp trnh nhng ARM-Linux
Lp trnh iu khin led n
fd=open(/dev/leds,0)
fd: file id
/dev/leds: device file
0: WRITE_ONLY
ioctl(fd, on, led_no)
Ioctl: IO control
iu khin bt/tt led n c s hiu led_no
Driver cho led n:
linux-2.6.32.2/drivers/char/mini2440_leds.c

69
Lp trnh nhng ARM-Linux
M ngun minh ha iu khin led n
70
Lp trnh nhng ARM-Linux
2.3. Lp trnh giao tip nt bm
Giao tip qua driver ~ c
71
Lp trnh nhng ARM-Linux
M hnh giao tip iu khin nt bm
Phn mm ng dng
Device files
Device Drivers
Phn cng
Buttons.c
/dev/buttons
Mini2440_buttons.c
GPIO Port
Hm giao tip:
open
close
read
72
Lp trnh nhng ARM-Linux
Lp trnh ghp ni nt bm
buttons_fd=open(/dev/buttons,0)
buttons_fd: file id
/dev/buttons: device file
read(buttons_fd,current_buttons,sizeof(curren
t_buttons)
c trng th|i c|c nt bm
close(buttons_fd): ng file
M~ ngun driver cho nt bm
linux-
2.6.32.2/drivers/char/mini2440_buttons.c





73
Lp trnh nhng ARM-Linux
M ngun chng trnh c nt bm
74
Lp trnh nhng ARM-Linux
2.4. Lp trnh giao tip GPIO m rng
2 c|ch s dng giao tip gpio (t Linux user space)
Cch 1: Vit gpio driver (trn khng gian nh}n h
iu h{nh, kernel space), giao tip qua driver n{y.
(V d vi led, button ~ l{m)
Cch 2: giao tip c|c ch}n gpio trc tip t khng
gian ngi dng (user space) da trn API th vin
gpiolib cung cp. Linux cung cp giao din GPIO
sysfs cho php thao t|c vi bt k ch}n GPIO t
userspace.

75
Lp trnh nhng ARM-Linux
Lp trnh giao tip GPIO m rng
Tt c c|c giao din iu khin GPIO thng qua sysfs
nm trong th mc /sys/class/gpio
Kim tra bng lnh: ls /sys/class/gpio

76
Lp trnh nhng ARM-Linux
Lp trnh giao tip GPIO m rng
Giao din n{y cung cp c|c files iu khin sau }y:
77
Lp trnh nhng ARM-Linux
Lp trnh giao tip GPIO m rng
V d minh ha





Chi tit xem b{i vit:
https://sites.google.com/site/embedded247/ddcour
se/giao-tiep-gpio-tu-userspace-1
Cu hnh chn GPF5 (micro2440) output, v xut gi tr 0
ra chn ny
echo 165 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio165/direction
echo 0 > /sys/class/gpio/gpio165/value
78
Lp trnh nhng ARM-Linux
Tho lun
79
Lp trnh nhng ARM-Linux
Chng 3


Lp trnh vo ra nng cao
80
Lp trnh nhng ARM-Linux
Mc tiu chng 3
Sau khi kt thc chng n{y, sinh vin c th
Nm c chun RS232
Lp trnh giao tip chun RS232 trn kit nhng
Micro2440
Nm c chun giao tip USB
Lp trnh ghp ni USB Joystick qua cng USB
Lp trnh giao tip ADC
81
Lp trnh nhng ARM-Linux
Ni dung bi hc
3.1. Gii thiu chun RS232
3.2. Lp trnh giao tip chun RS232
3.3. Gii thiu chun USB
3.4. Lp trnh giao tip USB Joystick
3.5. Lp trnh giao tip ADC

82
Lp trnh nhng ARM-Linux
3.1. Gii thiu chun RS232
Mc in |p ng truyn
Chun u ni trn m|y tnh PC
Khun dng khung truyn
Tc truyn
Kch bn truyn
83
Lp trnh nhng ARM-Linux
Chun RS232
Mc in |p ng truyn (Chun RS-232C)

84
Lp trnh nhng ARM-Linux
Chun RS232
Chun u ni trn PC
UART UART
UART (Universal Asynchronous receiver/transmitter)
85
Lp trnh nhng ARM-Linux
Chun RS232
Chun u ni trn PC
Chn 1 (DCD-Data Carrier Detect):
ph|t hin tn hiu mang d liu
Chn 2 (RxD-Receive Data): nhn d
liu
Chn 3 (TxD-Transmit Data): truyn
d liu
Chn 4 (DTR-Data Terminal Ready):
u cui d liu sn s{ng
Ch}n 5 (Signal Ground): t ca tn
hiu
Chn 6 (DSR-Data Set Ready): d liu
sn s{ng
Chn 7 (RTS-Request To Send): yu
cu gi
Chn 8 (CTS-Clear To Send): Xa
gi
Chn 9 (RI-Ring Indicate): bo chung

86
Lp trnh nhng ARM-Linux
Chun RS232
Khun dng khung truyn
PC truyn nhn d liu qua cng ni tip RS-232 thc
hin theo kiu khng ng b (Asynchronous)
Khung truyn gm 4 th{nh phn
1 Start bit (Mc logic 0): bt u mt gi tin, ng b xung
nhp clock gia DTE v{ DCE
Data (5,6,7,8 bit): d liu cn truyn
1 parity bit (chn (even), l (odd), mark, space): bit cho php
kim tra li
Stop bit (1 hoc 2 bit): kt thc mt gi tin
87
Lp trnh nhng ARM-Linux
Chun RS232
Kch bn truyn
Khng c bt tay (none-handshaking): m|y thu c kh
nng c c|c k t thu trc khi m|y ph|t truyn k t
tip theo



Kt ni khng cn bt tay gia hai thit b

(cng mc in p)
88
Lp trnh nhng ARM-Linux
Chun RS232
Kch bn truyn

Ghp ni khng bt tay gia hai thit b
(Khc nhau v mc in p)
89
Lp trnh nhng ARM-Linux
3.2. Lp trnh giao tip chun RS232
Khi to: Khai b|o th vin
Bc 1: M cng
Bc 2: Thit lp tham s
Bc 3: c, ghi cng
Bc 4: ng cng
90
Lp trnh nhng ARM-Linux
Khai bo th vin
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> // UNIX standard function
#include <fcntl.h> // File control definitions
#include <errno.h> // Error number definitions
#include <termios.h> // POSIX terminal control
#include <time.h> // time calls

91
Lp trnh nhng ARM-Linux
Bc 1: M cng
S dng lnh m file
int fd = open ("/dev/ttySAC0", O_RDWR);
Fd >0 nu m file th{nh cng
Fd<0 nu m file tht bi
92
Lp trnh nhng ARM-Linux
Bc 2: Thit lp tham s
S dng cu trc termios
struct termios port_settings;
Thit lp tham s (9600, 8, n, 1)
cfsetispeed(&port_settings, B9600);
cfsetospeed(&port_settings, B9600);
port_settings.c_cflag &= ~PARENB;
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
tcsetattr(fd, TCSANOW, &port_settings);


93
Lp trnh nhng ARM-Linux
Bc 3: c, ghi cng
c cng: s dng lnh c file
n=read(fd,&result,sizeof(result));
N: s k t c c
Result: cha kt qu
Ghi cng: s dng lnh ghi file
n=write(fd,Hello World\r",12);
N:s k t ~ ghi
Fd: file id (c c t thao t|c m file th{nh cng)
94
Lp trnh nhng ARM-Linux
Bc 4: ng cng
ng cng: s dng lnh ng file
close (fd);
Fd: file ID (c c t thao t|c m file th{nh cng)

95
Lp trnh nhng ARM-Linux
Demo
96
Lp trnh nhng ARM-Linux
3.3. Gii thiu chun USB
Nm 1995: USB 1.0
Tc Low-Speed: 1.5 Mbps
Tc ti a (Full-Speed): 12 Mbps
Nm 1998: USB 1.1 (Sa li ca USB 1.0)
Tc ti a (Full-Speed): 12 Mbps
Nm 2001: USB 2.0
Tc ti a (High-Speed): 480 Mbps
Nm 2008: USB 3.0
Tc ti a (Super-Speed): 4.8 Gbps

97
Lp trnh nhng ARM-Linux
Tn hiu chun USB
Tn hiu
Truyn kiu ni tip
Tn hiu trn hai ng D+ v D- l tn hiu vi sai


98
Lp trnh nhng ARM-Linux
M hnh bus USB
99
Lp trnh nhng ARM-Linux
Vai tr ca cc thnh phn
Vai tr ca USB host:
Trao i d liu vi c|c thit b ngoi vi
iu khin USB bus:
Qun l c c|c thit b kt ni v{o ng bus v{
kh nng ca mi thit b : s dng c ch im
danh (Enumeration)
Ph}n x, qun l lung d liu trn bus, m bo c|c
thit b u c c hi trao i d liu
Kim tra li: thm c|c m~ kim tra li v{o gi tin
cho php ph|t hin li v{ yu cu truyn li gi tin
Cung cp ngun in cho tt c c|c thit b


100
Lp trnh nhng ARM-Linux
Vai tr ca cc thnh phn
Vai tr ca thit b ngoi vi
Trao i d liu vi host
Ph|t hin c|c gi tin hay yu cu (request) c gi
ti thit b x l ph hp
Kim tra li: tng t nh Host, c|c thit b ngoi vi
cng phi chn thm c|c bit kim tra li v{o gi tin
gi i
Qun l ngun in: c|c thit b c th s dng
ngun in ngo{i hay ngun t bus. Nu s dng
ngun t bus, phi chuyn sang ch tit kim
in nng.
101
Lp trnh nhng ARM-Linux
Endpoint & pipes
Mi qu| trnh truyn nhn d liu bao gm mt
hay nhiu giao dch (transactions), mi giao dch
gm mt hay nhiu packets
-> hiu c c|c giao dch, c|c packet v{ ni dung
ca chng -> cn tm hiu hai kh|i nim Endpoint
v Pipes
102
Lp trnh nhng ARM-Linux
Endpoint
Endpoint ca thit b:
Ch c thit b mi c Endpoint, Host khng c
Endpoint
Endpoint l{ b m (gi, nhn)
C|c Endpoint c |nh a ch v{ x|c nh hng
In Endpoint: b m gi
Out Endpoint: b m nhn
Tt c c|c thit b u phi c Endpoint 0, }y l{
endpoint mc nh gi c|c thng tin iu khin
103
Lp trnh nhng ARM-Linux
Pipes
Pipes: kt ni Endpoint ca thit b ti Host
Phi thit lp pipe trc khi mun trao i d liu
Host thit lp pipe trong qu| trnh im danh
(Enumeration)
C|c Pipe s c hy khi thit b ngt kt ni khi
bus
Tt c c|c thit b u c mt ng ng iu khin
(control pipe) mc nh s dng Endpoint 0

104
Lp trnh nhng ARM-Linux
Device Classes
C|c thit b ngoi vi cng chc nng (chut, m|y in, nh
flash) c c tnh truyn nhn d liu chung -> H iu
h{nh c th cung cp driver chung cho c|c nhm, c|c nh{
sn xut thit b khng cn vit driver ring.
C|c nhm thit b ~ c nh ngha
Audio
Communication devices
Human interface (HID)
IrDA Bridge
Mass Storage
Cameras and scanners
Video



105
Lp trnh nhng ARM-Linux
Qu trnh trao i d liu
C|c thit b USB c th trao i d liu vi Host
theo 4 kiu ho{n to{n kh|c nhau, c th:
Truyn iu khin (control transfer)
Truyn ngt (interrupt transfer)
Truyn theo khi (bulk transfer)
Truyn ng thi (isochronous transfer)
106
Lp trnh nhng ARM-Linux
Cc kiu truyn
Truyn iu khin: iu khin phn cng, c|c
yu cu iu khin c truyn. Chng l{m vic
vi mc u tin cao v{ vi kh nng kim so|t li
t ng. Tc truyn ln v c n 64 byte trong
mt yu cu (request) c th c truyn.
Truyn ngt: c|c thit b, cung cp mt lng d
liu nh, tun ho{n chng hn nh chut, b{n phm
u s dng kiu truyn n{y. H thng s hi theo
chu k, chng hn 10ms mt ln xem c c|c d liu
mi gi n.
107
Lp trnh nhng ARM-Linux
Cc kiu truyn
Truyn theo khi: khi c lng d liu ln cn
truyn v{ cn kim so|t li truyn nhng li khng
c yu cu thc p v thi gian truyn th d liu
thng c truyn theo khi. VD: m|y in, m|y
qut
Truyn ng thi: khi c khi lng d liu ln
vi tc d liu ~ c quy nh, v d nh card
}m thanh. Theo c|ch truyn n{y mt gi| tr tc
x|c nh c duy tr. Vic hiu chnh li khng
c thc hin v nhng li truyn l t cng
khng g}y nh hng |ng k.
108
Lp trnh nhng ARM-Linux
3.4. Lp trnh giao tip USB Joystick
109
Lp trnh nhng ARM-Linux
Cu trc JOYINFO trn Windows
Windows nh ngha cu trc JOYINFO lu c|c
thng tin v tnh trng c|c nt bm trn Joystick
Nt tri, phi
Nt ln, xung
Cc nt chc
nng: 1, 2, 3, 4,
L1, L2, R1, R2,
Select, Start
110
Lp trnh nhng ARM-Linux
Cu trc JOYINFO
wXpos
wXpos=0 -> nt sang tr|i c bm
wXpos=65535 -> nt sang phi c bm
wYpos
wYpos=0 -> nt ln c bm
wYpos=65535 -> nt xung c bm
wButtons: mi bit biu din trng th|i ca mt nt
chc nng
VD: Button 1 -> bit 0, Button 2 -> bit 1
111
Lp trnh nhng ARM-Linux
Cu trc js_event trn Linux
Linux nh ngha cu trc js_event lu c|c thng
tin khi c ph|t sinh s kin (khi to thit b,
ngi dng bm nt chc nng, nt chnh hng)
nh ngha trong include/linux/joystick.h

112
Lp trnh nhng ARM-Linux
Cu trc js_event
Ni dung c|c trng d liu
Time: nh~n thi gian ph|t sinh s kin
Value: gi| tr, ph thuc v{o nt chc nng hay nt
chnh hng
Nt chc nng: 0/1
Nt chnh hng: -32768 -> 32767
Type: loi s kin
Khi to thit b: 0x80
Nt chnh hng: 0x02
Nt chc nng: 0x01
Number: x|c nh nt c nhn
113
Lp trnh nhng ARM-Linux
Lp trnh kt ni joystick
M file thit b:
joystick_fd = open(JOYSTICK_DEVNAME,
O_RDONLY | O_NONBLOCK);
JOYSTICK_DEVNAME: tn ca file thit b, thng
l /dev/input/js0
O_RDONLY | O_NONBLOCK: m file ch c ch
NONBLOCK

114
Lp trnh nhng ARM-Linux
Lp trnh kt ni joystick
c d liu t thit b (khi c pht sinh s
kin)
bytes = read(joystick_fd, jse, sizeof(*jse));
joystick_fd: con tr file c c khi m file
jse: bin cu trc js_event
bytes: Tng s file c c, nu s n{y bng kch
thc ca cu trc js_event th qu| trnh c th{nh
cng
115
Lp trnh nhng ARM-Linux
Demo
116
Lp trnh nhng ARM-Linux
Kt qu demo
C|c s kin khi khi to thit b
117
Lp trnh nhng ARM-Linux
Kt qu demo
C|c s kin khi ngi dng nhn c|c nt
118
Lp trnh nhng ARM-Linux
QT Joystick Demo
119
Lp trnh nhng ARM-Linux
3.5. Lp trnh giao tip ADC
Gii thiu ADC
Minh ha lp trnh ADC
120
Lp trnh nhng ARM-Linux
Gii thiu ADC
ADC: Analog to Digital Converter
Thng s quan trng ca ADC
Di in |p chuyn i
ADC 8 bit, 10 bit, 12 bit
Bao nhiu knh?
ph}n ly
121
Lp trnh nhng ARM-Linux
Minh ha lp trnh ADC
Khai b|o th vin
122
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fs.h>
#include <errno.h>
#include <string.h>
Lp trnh nhng ARM-Linux
Minh ha lp trnh ADC
123
int main(void){
fprintf(stderr, "press Ctrl-C to stop\n");
int fd = open("/dev/adc", 0);
if (fd < 0) {
perror("open ADC device:");
return 1;
}
for(;;) {
char buffer[30];
int len = read(fd, buffer, sizeof buffer -1);
if (len > 0) {
buffer[len] = '\0';
int value = -1;
sscanf(buffer, "%d", &value);
printf("ADC Value: %d\n", value);
} else {
perror("read ADC device:");
return 1;
}
usleep(500* 1000); }
close(fd); }
Lp trnh nhng ARM-Linux
Chng 4


K thut lp trnh nng cao
124
Lp trnh nhng ARM-Linux
Mc tiu chng 4
Sau khi kt thc chng n{y, sinh vin c th
Nm c kh|i nim tin trnh (process), quan h
gia c|c tin trnh
Trnh b{y c c ch s dng signal giao tip
gia c|c tin trnh
Lp trnh s dng k thut a tin trnh
Trnh b{y kh|i nim lung
Lp trnh ng dng a lung

125
Lp trnh nhng ARM-Linux
Ni dung
4.1. Tin trnh (process)
4.2. C ch s dng signal
4.3. Lp trnh giao tip a tin trnh
4.4. Lung (thread)
4.5. Lp trnh ng dng a lung

126
Lp trnh nhng ARM-Linux
4.1. Tin trnh (Process)
Kh|i nim tin trnh
Lp trnh a tin trnh
127
Lp trnh nhng ARM-Linux
Khi nim tin trnh
Tin trnh c to ra khi ta thc thi mt chng
trnh
a tin trnh cho php nhiu chng trnh cng
thc thi v{ chia s d liu vi nhau
C|c tham s ca mt tin trnh
PID (Process ID): s hiu tin trnh
PPID (Parent Process ID): s hiu tin trnh cha
Command: c}u lnh c gi thc thi tin trnh
ls e o pid,ppid,command
128
Lp trnh nhng ARM-Linux
PID, PPID
Ly v PID: s dng hm getpid()
Ly v PPID: s dng hm getppid()
Hm getpid() v getppid() tr gi tr kiu pid_t (bn
cht l kiu int)
129
Lp trnh nhng ARM-Linux
Dng tin trnh
C|ch 1: S dng t hp phm Ctrl + C
C|ch 2: S dng shell command
kill PID

130
Lp trnh nhng ARM-Linux
To tin trnh mi
Cch 1: s dng h{m system



131
Lp trnh nhng ARM-Linux
To tin trnh mi
Cch 2: s dng h{m fork v{ exec
132
Lp trnh nhng ARM-Linux
4.2. C ch s dng signal
Signal l{ c ch cho php giao tip gia c|c tin
trnh
Signal l{ c ch khng ng b
Khi tin trnh nhn c signal, tin trnh phi x
l signal ngay lp tc
Linux h tr 32 SIGNAL

133
Lp trnh nhng ARM-Linux
Danh sch signal thng dng
Kiu SIGNAL L do gi SIGNAL
SIGHUP Bo cho chng trnh khi thot khi terminal
SIGINT Khi ngi dng nhn Ctrl + C tt chng trnh
SIGILL Khi chng trnh chy lnh khng hp l
SIGABRT Khi chng trnh nhn c lnh abort
SIGKILL Khi chng trnh nhn c lnh kill (ng chng
trnh)
SIGUSR1 Ty bin theo ng dng
SIGUSR2 Ty bin theo chng trnh
134
Lp trnh nhng ARM-Linux
Gi SIGNAL ti process
Cch 1: s dng shell command
kill [-SIGNAL_TYPE] PID
Cch 2: s dng h{m kill trong chng trnh, cho
php process n{y gi signal ti process kh|c
kill(PID, SIGNAL_TYPE)
135
Lp trnh nhng ARM-Linux
4.3. Lp trnh giao tip a tin trnh
C ch:
Tin trnh chnh to ra c|c tin trnh con s dng
lnh fork v{ exec
S dng c ch signal trao i tn hiu gia c|c
tin trnh
136
Lp trnh nhng ARM-Linux
V d
Bt v{ x l signal c gi ti mt tin trnh
(SIGTERM v SIGINT)

137
Lp trnh nhng ARM-Linux
killsignal.c

138
Lp trnh nhng ARM-Linux
V d: killsignal.c (tip)

139
Lp trnh nhng ARM-Linux
Demo
140
Lp trnh nhng ARM-Linux
4.4. Lung (thread)
Mt chng trnh mc nh chy mt lung ->
lung chnh
Lung chnh c th to ra c|c lung kh|c, c|c lung
s chy ng thi -> tng tc chng trnh
C|c lung chia s khng gian nh, truy xut file v{
cc ti nguyn khc
Tham s ca mt lung:
thread ID: s hiu lung (kiu d liu pthread_t)

141
Lp trnh nhng ARM-Linux
4.5. Lp trnh x l a lung
To lung
Truyn tham s cho lung
Nhn gi| tr tr v t lung
Tt lung
142
Lp trnh nhng ARM-Linux
To lung
Khai b|o th vin: pthread.h
H{m to lung: pthread_create
thread: thread id
attr: cc thuc tnh ca lung, mc nh NULL
start_routine: hm thc thi trong lung
arg: cc tham s truyn cho lung
Bin dch chng trnh:
gcc o multithread multithread.c -pthread
143
Lp trnh nhng ARM-Linux
M ngun to lung
144
Lp trnh nhng ARM-Linux
Truyn tham s cho lung
Khai bo cu trc d liu cha d liu cn truyn cho
lung. V d:
struct arg {
//Ky tu can in
char character;
//So lan can in
int count; };
Truyn d liu cho lung khi to lung qua tham s
arg
Chng trnh con thc thi lung nhn tham s v v
x l
145
Lp trnh nhng ARM-Linux
M ngun truyn tham s cho lung
146
Lp trnh nhng ARM-Linux
Tt lung
S dng h{m pthread_cancel:
thread: nhn tham s thread id ca lung
mun tt
147
Lp trnh nhng ARM-Linux
M ngun tt lung
148
Lp trnh nhng ARM-Linux
Tho lun
149
Lp trnh nhng ARM-Linux
Chng 5


Lp trnh device driver
150
Lp trnh nhng ARM-Linux
Ni dung
5.1. Gii thiu v Kernel Module
5.2. C ch x}y dng Device Driver
5.3. Tm hiu, ty chnh mt s driver ~ c
5.4. X}y dng usb device driver

151
Lp trnh nhng ARM-Linux
5.1. Kernel Module
Hot ng trn Kernel Space, c th truy xut ti
c|c t{i nguyn ca h thng
Kernel Module cho php thm mi c|c module mt
c|ch linh hot, tr|nh vic phi bin dch li nh}n h
iu h{nh
Kernel Module l{ c ch hu hiu ph|t trin c|c
device driver
Xem danh s|ch c|c module ang chy: lsmod
152
Lp trnh nhng ARM-Linux
Kernel Module
C|c bc thm mt kernel module v{o h thng
Vit m~ ngun: ch s dng c|c th vin c cung
cp bi kernel, khng s dng c c|c th vin
bn ngoi
Bin dch m~ ngun module
C{i t module: dng lnh
insmod Tn_Module.ko
G module: dng lnh rmmod Tn_Module
Xem c|c thng tin log: s dng System Log Viewer
153
Lp trnh nhng ARM-Linux
M ngun kernel Module
154
Lp trnh nhng ARM-Linux
Kernel Module Makefile
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build
M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build
M=$(PWD) clean

155
Lp trnh nhng ARM-Linux
Lin kt Kernel Module

156
Lp trnh nhng ARM-Linux
5.2. Device Driver
Thm c|c device driver theo c ch s dng Kernel
Module
C|c thao t|c thm driver v{o h thng
Vit m~ ngun (cu trc tng t kernel Module).
ng k Major ID
Bin dch m~ ngun
C{i t s dng lnh insmod
S dng lnh mknod to device file trong /dev
mknod [options] NAME Type [Major Minor]


157
Lp trnh nhng ARM-Linux
V d: Hello Driver

158
Lp trnh nhng ARM-Linux
Demo
159
Lp trnh nhng ARM-Linux
V d
V d 1: Chnh sa driver sn c
Chnh sa driver iu khin led, b sung thm hm
write iu khin trc tip tt c c|c led n trn
KIT
V d 2: To driver mi theo c ch kernel module
160
Lp trnh nhng ARM-Linux
Tho lun
161
Lp trnh nhng ARM-Linux
Bi s 6


Lp trnh nn tng QT
162
Lp trnh nhng ARM-Linux
Mc tiu bi hc s 6
Sau khi kt thc b{i hc n{y, sinh vin c th
Nm c c|c vn c bn, c trng ca nn
tng Qt
C{i t Qt Creator (Qt SDK) trn m|y ph|t trin
(Ubuntu)
L{m quen vi lp trnh ng dng giao din ha
s dng nn tng Qt
C{i t Qt Everywhere ph|t trin ng dng cho
nn tng Arm Embedded Linux
163
Lp trnh nhng ARM-Linux
Ni dung bi hc
6.1. Gii thiu QT
6.2. C{i t mi trng ph|t trin Qt
6.3. L{m quen vi lp trnh QT
6.4. C{i t Qt Everywhere (Qt Embedded)

164
Lp trnh nhng ARM-Linux
6.1. Gii thiu Qt
Qt Development Frameworks c s|ng lp nm 1994
bi TrollTech
2008: TrollTech s|p nhp v{o Nokia
Qt l{ mt Framework ph|t trin ng dng a nn tng
(desktop, mobile, embedded).
H tr c|c nn tng: Windows, Linux, Embedded
Linux, Win CE, Symbian, Maemo

165
Lp trnh nhng ARM-Linux
Gii thiu QT
Qt cho php vit ng dng mt ln v{ bin dch cho
trn nhiu nn tng h iu h{nh khc nhau m khng
phi vit li m~. Tuy nhin, m~ ngun cn c bin
dch trn nn tng m{ mun ng dng c thc thi.
Lp trnh Qt theo chun C++.
166
Lp trnh nhng ARM-Linux
Gii thiu QT
Qt Framework bao gm:
a cross-platform class library (Th vin c|c lp hng
i tng)
integrated development tools (C|c cng c ph|t trin
tch hp)
a cross-platform IDE. (Mi trng ph|t trin ng dng)
Tham kho: qt.nokia.com; qtcentre.org
167
Lp trnh nhng ARM-Linux
QT c s dng rng ri
168
Lp trnh nhng ARM-Linux
Kin trc Qt
169
Lp trnh nhng ARM-Linux
6.2. Ci t Qt SDK
C{i t Qt SDK trn m|y ph|t trin (Linux,
Windows, MacOS)
File c{i t
qt-sdk-linux-x86-opensource-2010.05.1.bin
(http://qt.nokia.com/downloads)
Thc thi file c{i t:
$ ./qt-sdk-linux-x86-opensource-2010.05.1.bin
i qu| trnh c{i t din ra th{nh cng, mc nh
th mc c{i t cha ti
$HOME/qtsdk-2010.01/qt/bin
170
Lp trnh nhng ARM-Linux
Ci t Qt SDK
Sau khi c{i t xong Qt SDK, cng c Qt Creator cho
php ph|t trin ng dng vi la chn mc nh
bin dch trn m|y tnh Linux. bin dch cho
ng dng thc thi trn KIT FriendlyArm
(Embedded Linux) cn c{i t Qt Everywhere
171
Lp trnh nhng ARM-Linux
6.3. Lm quen vi lp trnh QT
S dng mi trng ph|t trin Qt Creator (IDE)
Chng trnh HelloQt
C ch Signals/Slot
Qun l layout
172
Lp trnh nhng ARM-Linux
Mi trng pht trin Qt Creator IDE
173
Lp trnh nhng ARM-Linux
Cc thnh phn Qt Creator
174
Lp trnh nhng ARM-Linux
Cc iu khin (widgets) c bn
QLabel
QPushButton
QLineEdit
QTextEdit
QSpinBox
QComboBox
Qslider
V.v

175
Lp trnh nhng ARM-Linux
176
Chng trnh HelloQt
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}
To project HelloQt
Trong file main.c b sung on m~:
Bin dch, chy chng trnh:
Lp trnh nhng ARM-Linux
177
Chng trnh HelloQt
Gii thch ?
Sa on m~ vi HTML style
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//QLabel *label = new QLabel("Hello Qt!");
QLabel *label = new QLabel("<h2><i>Hello</i> "
"<font color=red>Qt!</font></h2>");
label->show();
return app.exec();
}
Lp trnh nhng ARM-Linux
C ch event handler
X l c|c s kin (s kin tng t|c ngi dng,
s kin ca h thng)
Cho php to c|c kt ni (connections) gia s
kin (signals) vi h{m x l (slot)
C 2 c|ch to:
To t ng (wizard)
To bng tay (manual, hand-code)

178
C ch signals - slot
Lp trnh nhng ARM-Linux
To bng code (dng phng thc Qobject::connect)
179
Minh ha c ch signals/slot
Lp trnh nhng ARM-Linux
Minh ha c ch Signals/Slot
To bng code
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
Trong : sender, receiver l{ con tr Qobjects,
signal v{ slot l{ c|c tn h{m khng c tham s.
Cc macro SIGNAL() v SLOT() bin i tham s
thnh string.
VD: ng b gia 2 iu khin slider v{ spinBox


180
Lp trnh nhng ARM-Linux
Minh ha c ch Signals/Slot
181
To t ng (wizard): chut phi v{o i tng mun
x l s kin, chn Go to slot, tm slot l{ h{m x l s
kin tng ng mun dng.
V d x l s kin nt bm (QPushButton)


Lp trnh nhng ARM-Linux
Qun l layout trong ng dng Qt
K thut lay out: Cho php sp xp c|c iu khin
(widgets) trn mt form. Kch thc v{ v tr s
thay i linh hot khi form thay i kch thc.
C c|c kiu lay out:
Horizontal lay out
Vertical lay out
Grid lay out
Form lay out
182
Lp trnh nhng ARM-Linux
Chng trnh TextFinder
X}y dng ng dng TextFinder
183
Lp trnh nhng ARM-Linux
Qt Documentations
Documentation in Qt Assistant (or QtCreator)
Qts examples
Qt developer network:
http://developer.qt.nokia.com/
Qt Center Forum:
http://www.qtcentre.org


184
Lp trnh nhng ARM-Linux
6.4. Ci t Qt Everywhere
Bc 1: Ci t QT Embedded (QT Everywhere)
(Xem hng dn chi tit km theo)
Bc 2: Copy cc file th vin cn thit xung KIT
3 th vin quan trng (VD: copy xung th mc
/opt/qte/lib)
libQtCore.so.4
libQtGui.so.4
libQtNetwork.so.4
Copy cc fonts vo th mc /opt/qte/lib/fonts
Bc 3: Chnh file cu hnh /etc/init.d/rcS, tt Qtopia
trnh tranh chp

185
Lp trnh nhng ARM-Linux
Cu hnh trnh dch Qmake cho Kit
Bc 4: To cu hnh bin dch cho Mini2440, tr
ti Qmake ~ bin dch c trn
186
Lp trnh nhng ARM-Linux
Cu hnh trnh dch Qmake cho Kit
Bc 5: Dch chng trnh QT cho KIT
Chn ng b bin dch Qmake cho QT Embedded
187
Lp trnh nhng ARM-Linux
Tho lun
188
Lp trnh nhng ARM-Linux
Bi s 7


Lp trnh mng trn Linux
nhng
189
Lp trnh nhng ARM-Linux
Mc tiu bi hc s 7
Sau khi kt thc b{i hc n{y, hc vin c th
X}y dng ng dng giao din, s dng c|c iu
khin (widgets)
Vn dng k thut qun l layout sp xp c|c
iu khin trn form
Vn dng c ch x l s kin (signal/slot)
Lp trnh socket trn nn Linux nhng
Lp trnh mng vi Qt

190
Lp trnh nhng ARM-Linux
Ni dung bi hc
7.1. Lp trnh socket trn Linux nhng
7.2. Th vin lp trnh mng trn Qt
7.3. Lp trnh ng dng ChatRoom
7.4. Lp trnh ng dng gi/nhn nh qua socket

191
Lp trnh nhng ARM-Linux
7.1. Lp trnh Socket trn Linux
Gii thiu lp trnh socket
M hnh lp trnh
Minh ha
192
Lp trnh nhng ARM-Linux
Gii thiu lp trnh socket
Socket: Kt ni u cui gia 2 tin trnh/2 m|y
qua mng (m hnh client/server)
Tin trnh client kt ni n tin trnh server yu
cu trao i d liu
Client cn bit v a ch v{ s tn ti ca server,
trong khi server khng cn bit v client cho n
khi n c kt ni n.
Mi khi thit lp kt ni, c 2 bn c th gi v{
nhn d liu
Lin h nh kt ni trong mt cuc gi in thoi

193
Lp trnh nhng ARM-Linux
Gii thiu lp trnh socket
C|c h thng (Windows, Linux, ) u cung cp c|c
h{m h thng lp trnh socket
C 2 loi socket s dng rng r~i:
Stream socket
Datagram socket
Stream sockets: Da trn giao thc TCP (Tranmission
Control Protocol), l{ giao thc hng lung (stream
oriented).
Datagram sockets: Da trn giao thc UDP (User
Datagram Protocol), l{ giao thc hng thng ip
(message oriented)
194
Lp trnh nhng ARM-Linux
M hnh lp trnh socket
M hnh lp trnh socket TCP gia 2 tin trnh
client/server
195
Lp trnh nhng ARM-Linux
Chng trnh minh ha
2 tin trnh (M~ ngun tham kho):
server.c
client.c
Bin dch v{ chy 2 chng trnh n{y (trn cng
mt m|y local host, hoc 2 m|y ring bit kt ni
mng)

196
Lp trnh nhng ARM-Linux
Demo
Lp trnh giao tip socket gia KIT micro 2440 v{
PC
197
Demo
Lp trnh nhng ARM-Linux
7.2. Th vin lp trnh mng trn QT
QtNetwork
QTcpSocket
QUdpSocket
QTcpServer
QFtp: l{m vic vi giao thc truyn file FTP
QHttp: l{m vic vi giao thc Http
(Xem Qt documentation)


198
Lp trnh nhng ARM-Linux
7.3. Chng trnh ChatRoom

199
Lp trnh nhng ARM-Linux
7.4. Chng trnh gi/nhn nh
Lp trnh socket client/server
S dng lp QImage
200
Lp trnh nhng ARM-Linux
Tho lun
201
Lp trnh nhng ARM-Linux
Chng 8


Lp trnh x l nh trn nn
nhng
202
Lp trnh nhng ARM-Linux
Ni dung
8.1. Tng quan v x l nh
8.2. Gii thiu OpenCV
8.3. C|c php bin i nh c bn
203
Lp trnh nhng ARM-Linux
8.1. Tng quan x l nh
Khi nim x l nh
N}ng cao cht lng hnh nh theo mt tiu ch
n{o (Cm nhn ca con ngi)
Ph}n tch nh thu c c|c thng tin c trng
gip cho vic ph}n loi nh (image classification),
nhn dng nh (image recognition).
Hiu nh u v{o c nhng m t v nh mc
cao hn, s}u hn.

Lp trnh nhng ARM-Linux
M hnh h thng x l nh
Camera
Sensor
Thu nhn
nh
S ha
Phn tch
nh
i snh
Nhn dng
H
quyt nh
Lu tr
Lu tr
Lp trnh nhng ARM-Linux
Cc bi ton x l nh
Image
Acquisition
Image
Enhancement
Image
Restoration
Image
Compression
Image
Segmentation
Representation
& Description
Recognition &
Interpretation
Knowledge Base
Cc k thut tin x l-mc thp
Image
Coding
Morphological
Image Processing
Wavelet
Analysis
X l mc cao
Lp trnh nhng ARM-Linux
Cc bi ton x l nh
Thu nhn nh, s ha nh (image aquisition)
H thng chp nh, tn hiu nh
H thng s ha nh: C|c phng ph|p ly mu,
lng t ha
Ci thin nh, khi phc nh, lc nhiu (tin x
l image pre-processing)
C|c php x l im nh
C|c php x l trn min khng gian
C|c php x l trn min tn s
2
0
7
Lp trnh nhng ARM-Linux
Cc bi ton x l nh
Phn tch nh
Trch chn c trng (feature extraction)
Biu din, m t nh (image representation, image
description)
Ph}n lp nh (image classification)
Nhn dng nh (image recognition)

M ha, nn nh
C|c phng ph|p nn nh, c|c chun nn nh
Truyn thng nh: c|c k thut streaming
2
0
8
Lp trnh nhng ARM-Linux
ng dng x l nh
Lp trnh nhng ARM-Linux
ng dng tng cng cht lng
Lp trnh nhng ARM-Linux
Hiu ng panorama
Lp trnh nhng ARM-Linux
ng dng nhn dng khun mt
Lp trnh nhng ARM-Linux
Nhn dng ngi chuyn ng
Lp trnh nhng ARM-Linux
Nhn dng i tng chuyn ng
Lp trnh nhng ARM-Linux
Nhn dng ch vit tay
Lp trnh nhng ARM-Linux
Nhn dng vn tay
Lp trnh nhng ARM-Linux
Nhn dng mng mt (iris)
Lp trnh nhng ARM-Linux
M hnh ha 3D & AR (Augmented
Reality)
KINECT
Lp trnh nhng ARM-Linux
8.2. Gii thiu OpenCV
OpenCV: Open Computer Vision Library
Tp hp c|c h{m C v{ mt s lp C++ gii quyt c|c
b{i to|n, thut to|n c bn trong x l nh
a nn tng, ~ porting c trn rt nhiu nn
tng kh|c nhau: Windows, Linux, Embedded Linux,
iOS, Android

http://opencvlibrary.sourceforge.net
Lp trnh nhng ARM-Linux
Th vin OpenCV
Lp trnh nhng ARM-Linux
Kin trc th vin OpenCV
Lp trnh nhng ARM-Linux
Kin trc th vin OpenCV
CV: cha c|c h{m c bn v{ n}ng cao thc thi c|c
b{i to|n th gi|c m|y (computer vision)
ML (Machine Learning): th vin hc m|y vi c|c
cng c ph}n lp (classifier) v{ ph}n cm
(clustering).
HighGUI: c|c h{m v{o ra v{ c|c h{m lu tr, np
v{ hin th nh v{ video
CXCore: cha c|c kiu d liu c bn, mt s thut
to|n c bn v{ c|c h{m v, c h tr XML

Lp trnh nhng ARM-Linux
Ci t th vin OpenCV
Bc 1: C{i t th vin OpenCV trn m|y host
(Linux Desktop)
Bc 2: Bin dch cho, c{i t th vin OpenCV
bin dch cho c|c ng dng trn KIT
Chi tit: Xem t{i liu hng dn c{i t

Lp trnh nhng ARM-Linux
Tch hp OpenCV v QT
Khai b|o trong file .pro ca d |n QT: thm c|c
dng lnh sau v{o cui file .pro
Lp trnh nhng ARM-Linux
Tch hp OpenCV v QT
Khai b|o c|c th vin s c s dng: ng
dng linh hot, to file global.h cha include ti c|c
th vin ca OpenCV
Lp trnh nhng ARM-Linux
226
c nh v hin th
Cc kiu d liu c bn trong OpenCV
cvArr
cvMat
IplImage
CvCapture
Lp trnh nhng ARM-Linux
c nh v hin th
Hm c nh: cvLoadImage

Tham s u v{o: ng dn ti file nh
Tham s u ra: d liu nh lu theo kiu d liu
con tr ca IplImage
V d:
IplImage* img = cvLoadImage("/home/oto.jpeg" );

Lp trnh nhng ARM-Linux
Kt ni Camera
H{m m webcam:
CvCapture* capture=cvCreateCameraCapture(0)
Hm m file video:
Lp trnh nhng ARM-Linux
229
Kt ni Camera
Bc 1: m kt ni vi Camera mc nh
CvCapture* camera = cvCreateCameraCapture(0);
Bc 2: ly v tng Frame nh ca camera
IplImage* preImage=cvQueryFrame(camera);
Bc 3: gii phng i tng camera
cvReleaseCapture(&camera);

Lp trnh nhng ARM-Linux
230
8.3. Cc php bin i c bn
8.3.1. Tm hiu cch thc biu din nh
8.3.2. Bin i nh mu sang nh a mc xm
8.3.3. Xy dng phn b Histogram ca nh
8.3.4. Lp trnh dn tng phn
8.3.5. Lp trnh cn bng tng phn
8.3.6. Bin i nh a mc xm sang nh nh phn
Lp trnh nhng ARM-Linux
8.3.1. Cch thc biu din nh
Khi nim nh s: l{ nh thu c t nh lin tc
bng php ly mu v{ lng t ha

pixel
Gray level
Original picture
Digital image
f(x, y)
I[i, j] or I[x, y]
x
y
Lp trnh nhng ARM-Linux
nh s
Mt nh s thng c biu din nh mt ma
trn c|c im nh
Trong mi im nh c th c biu din bng
1 bit (nh nh ph}n)
8 bit (nh a mc x|m)
16, 24 bit (nh m{u)

Lp trnh nhng ARM-Linux
Cch thc biu din nh
nh mu (Color image)
Cha thng tin mu ca nh
Khng gian mu thng s dng: RGB, CMYK
nh RGB 3 knh mu, mi knh s dng 8 bit
nh a mc xm (Grayscale image)
nh a mc xm l nh c s chuyn dn mc xm t
trng sang en.
S dng 8 bit biu din mc xm
nh nh phn (Binary image)
Ch c hai mu en, trng (tng ng gi tr 1,0)
233
Lp trnh nhng ARM-Linux
8.3.2. Chuyn nh mu -> a mc
xm
S dng cng thc:

Gray scale= 0.2989*R+ 0.5870*G + 0.1140*B;
234
Lp trnh nhng ARM-Linux
Chuyn nh mu -> a mc xm
Hm chuyn nh mu sang nh a mc xm:
Bc 1: To 1 nh trng (cha c d liu) nh dng nh
a mc xm
IplImage *grayimage = cvCreateImage( cvSize( colorimg-
>width, colorimg->height ), IPL_DEPTH_8U, 1 );
Bc 2: Chuyn i nh mu sang a mc xm
cvCvtColor( img, grayimage, CV_RGB2GRAY );
235
Lp trnh nhng ARM-Linux
Demo chuyn sang nh a mc xm
Lp trnh nhng ARM-Linux
8.3.3. Histogram
Biu ny n gin cho chng ta bit s im
nh (pixel) trong mt nh a mc xm c mt
gi tr mc xm tng ng.
Thng s: s bins (=256 vi nh a mc xm)
237
Lp trnh nhng ARM-Linux
Histogram
nh ti
238
Lp trnh nhng ARM-Linux
Histogram
nh sng
239
Lp trnh nhng ARM-Linux
Hm tnh Histogram
Cu trc CvHistogram: lu c|c thng tin v ph}n
b Histogram ca nh

Lp trnh nhng ARM-Linux
Hm tnh Histogram
Bc 1: S dng h{m cvCreateHist khi to cu
trc CvHistogram chun b cha kt qu
Dims: s chiu ca Histogram
Sizes: s lng bins
Type: nh dng d liu (thng s dng
CV_HIST_ARRAY)
Ranges: Di c|c khong gi| tr tnh Histogram
Lp trnh nhng ARM-Linux
Hm tnh Histogram
Bc 2: Tnh Histogram s dng h{m cvCalcHist
Image: nh cn tnh Histogram
Hist: lu kt qu tnh Histogram
Accumulate: ty chn tch ly, cho php tnh
Histogram t nhiu nh
Mask: x|c nh phm vi c|c pixel s c s dng
tnh Histogram, mc nh tnh to{n nh
Lp trnh nhng ARM-Linux
Hm tnh Histogram
Bc 3: V ph}n b Histogram
Bc 4: Gii phng b nh s dng h{m
cvClearHist
Lp trnh nhng ARM-Linux
Demo tnh Histogram ca nh
Lp trnh nhng ARM-Linux
8.3.4. Dn tng phn
y l mt k thut tng cng cht lng nh
thng dng, n c tc dng lm tng tng phn
ca nh bng cch gin di ga tr mc xm ca
nh. Cc bc thc hin
Tm ra gii hn mc xm nh nht (a) v ln nht (b)
ca nh. Vi nh a mc xm thng a=0 v b=255.
Tm gi tr mc xm nh nht (c) v ln nht (d) trong
cc im nh
Xc nh gi tr mc xm mi theo cng thc


245
Lp trnh nhng ARM-Linux
Dn tng phn
246
nh trc v sau khi tin hnh dn tng phn
Lp trnh nhng ARM-Linux
8.3.5. Cn bng Histogram
Cn bng histogram l mt phng php thay i
tng phn ca nh bng cch thay i lc
phn b mc xm ca chng.
Mc ch lm thay i biu phn b mc xm t
phn b ban u sang s phn b hng ti u.
Tc dng nhm pht hin nhng i tng bi che
khut trong nh ban u. Php bin i ny rt c
ngha i vi nhng bc nh chp trong bng m,
i tng thng b m, hay b che khut bi bng
ti, p dng cn bng histogram c th lm ni r
i tng hn.


247
Lp trnh nhng ARM-Linux
Cn bng Histogram
Cng thc thc hin:
b
k
= (b
max
b
min
)
Trong b
min
, b
max
l nhng gi tr c chn, p
i
l
xc sut xut hin gi tr mc xm i trong nh ban
u, vi i [a
min
, a
max
]

248
Lp trnh nhng ARM-Linux
Hm cn bng Histogram
S dng h{m cvEqualizeHist
Src: ma trn nh gc
Dst: ma trn nh sau khi ~ c}n bng Histogram
Lp trnh nhng ARM-Linux
Demo cn bng Histogram
Lp trnh nhng ARM-Linux
8.3.6. Chuyn sang nh nh phn
Chuyn i da trn phn ngng
Phn ngng c nh (fixed threshold): s dng
khi Histogram phn b r rng hai vng sng, ti
vi hai nh r rt

251
Lp trnh nhng ARM-Linux
Chuyn sang nh nh phn
Phn ngng thch nghi (adaptive threshold)
Trong trng hp lc mc xm ca nh c ti >=3
nh chp, v d trong nh di y tng ng vi s
im nh c gi tr mc xm tng ng l 50, 110 v 180.
252
Lp trnh nhng ARM-Linux
Chuyn sang nh nh phn
Phn ngng thch nghi:
S dng ngng ng cho cc im nh khc
nhau
K thut ny cho php chng ta c th iu tit,
thch nghi vi s thay i v iu kin sng ca
nh v d nh nh c s dng cc hiu ng ri
sng (illumination) hay bng(shadow).

253
Lp trnh nhng ARM-Linux
Chuyn sang nh nh phn
254
Kt qu
(S dng ngng cng)
Kt qu
(S dng ngng thch nghi)
Lp trnh nhng ARM-Linux
Hm chuyn sang nh nh phn
Phn ngng cng
Src: nh ban u, dst: nh kt qu
Threshold: ngng c chn
maxValue: gi| tr ln nht
thresholdType: kiu ph}n ngng
Lp trnh nhng ARM-Linux
Hm chuyn sang nh nh phn
Phn ngng thch nghi
Src: nh ban u, dst: nh kt qu
maxValue: gi| tr ln nht
adaptiveMethod: phng ph|p tnh ngng thch
nghi (CV_ADAPTIVE_THRESH_MEAN_C hay
CV_ADAPTIVE_THRESH_GAUSSIAN_C)

Lp trnh nhng ARM-Linux
Demo chuyn sang nh nh phn
Lp trnh nhng ARM-Linux
Ph lc A Cc lnh Linux
Lnh hin th thng tin c|c file trong th mc
ls al //hin th danh s|ch vi y thng tin
Lnh thay i quyn cho mt file hay th mc
chmod
vd: chmod +x Filename //Cp thm quyn thc thi
Lnh xem danh s|ch c|c file thit b
ls al /dev
Lnh xem tt c c|c tin trnh ang chy
ps
258
Lp trnh nhng ARM-Linux
Ph lc A Cc lnh Linux
Lnh c{i t mt phn mm t kho cha ca Linux
sudo apt-get install Tn_gi_phn_mm
Xem danh s|ch c|c major id tng ng vi c|c
device driver ang active
cat /proc/devices
Tm kim file cha mt dng text bt k
grep vd: grep r Hello .
//Tm tt c c|c file v{ hin th ra c|c dng cha t kha
//Hello trong th mc hin ti v{ c|c th mc con
259
Lp trnh nhng ARM-Linux
Ph lc B Website quan trng
http://www.friendlyarm.net //download
http://www.thaieasyelec.com/FriendlyARM
//mua KIT, download t{i liu
http://dientuvietnam.net //forum chia s
http://eetimes.com //Tin tc cng ngh
http://www.kernel.org //download m kernel
http://qt.nokia.com //H tr QT SDK
qtforum.org
qtcenter.org

260

You might also like