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

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

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/
Lp trnh nhng ARM-Linux

Chng 1

Gii thiu Lp trnh h nhng

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

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.
Lp trnh nhng ARM-Linux
6

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,
Lp trnh nhng ARM-Linux
7

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,
Lp trnh nhng ARM-Linux
8

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

Lp trnh nhng ARM-Linux

1.2. Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

10

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

11

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

12

Gii thiu KIT nhng micro2440


Thng s k thut

Lp trnh nhng ARM-Linux

13

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

14

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

Lp trnh nhng ARM-Linux

15

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.

Lp trnh nhng ARM-Linux

16

S phn cp h thng

Lp trnh nhng ARM-Linux

17

Kin trc h iu hnh Linux

Lp trnh nhng ARM-Linux

18

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)
Lp trnh nhng ARM-Linux
19

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)

Lp trnh nhng ARM-Linux

20

H iu hnh thi gian thc

Lp trnh nhng ARM-Linux

21

Cu trc nhn h iu hnh

Lp trnh nhng ARM-Linux

22

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

Lp trnh nhng ARM-Linux

23

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
Lp trnh nhng ARM-Linux
24

Qu trnh boot h thng Linux trn PC

Lp trnh nhng ARM-Linux

25

Qu trnh boot h thng Linux nhng

Lp trnh nhng ARM-Linux

26

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

Lp trnh nhng ARM-Linux

27

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)

Lp trnh nhng ARM-Linux

28

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
Lp trnh nhng ARM-Linux
29

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

Lp trnh nhng ARM-Linux

30

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>
Lp trnh nhng ARM-Linux
31

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)
Lp trnh nhng ARM-Linux

32

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
Lp trnh nhng ARM-Linux
33

Bin dch nhn Linux

Demo
<Xem hng dn chi tit trong ti liu hng dn ci t v s dng KIT micro2440>
Lp trnh nhng ARM-Linux
34

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

Lp trnh nhng ARM-Linux

35

1.4.1. Mi trng pht trin ng dng nhng


M hnh lp trnh h thng nhng
Mi trng lp trnh KIT micro 2440

Lp trnh nhng ARM-Linux

36

M hnh lp trnh h thng nhng

Host: h thng cha mi trng pht trin


Target: h nhng cn pht trin ng dng
Lp trnh nhng ARM-Linux
37

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)

Lp trnh nhng ARM-Linux

38

Mi trng lp trnh theo nhm

Mi trng pht trin ng dng theo nhm


Lp trnh nhng ARM-Linux
39

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)

Lp trnh nhng ARM-Linux

40

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-gcc4.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
Lp trnh nhng ARM-Linux
41

Kim tra trnh bin dch cho

Lp trnh nhng ARM-Linux

42

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
Lp trnh nhng ARM-Linux
43

Kt ni s dng gFTP

Lp trnh nhng ARM-Linux

44

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)
Lp trnh nhng ARM-Linux
45

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

Lp trnh nhng ARM-Linux

46

Cu trc chng trnh


Tu}n th cu trc chng trnh ANSII C

Lp trnh nhng ARM-Linux

47

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; }

Lp trnh nhng ARM-Linux

48

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
Lp trnh nhng ARM-Linux
49

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)
Lp trnh nhng ARM-Linux
50

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

Lp trnh nhng ARM-Linux

51

VD 2: Makefile lin kt
Hello.c
include

Display.c

void display(int index, char* str) include

Display.h
void display(int index, char* str)

Lp trnh nhng ARM-Linux

52

VD2: Makefile lin kt


Hello.c Display.c

Compiler

Compiler

Hello.o Linker

Display.o

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

Lp trnh nhng ARM-Linux

54

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
Lp trnh nhng ARM-Linux

55

Tho lun

Lp trnh nhng ARM-Linux

56

Chng 2

Lp trnh vo ra c bn

Lp trnh nhng ARM-Linux

57

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)

Lp trnh nhng ARM-Linux

58

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

Lp trnh nhng ARM-Linux

59

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

Lp trnh nhng ARM-Linux

60

M hnh giao tip ng dng thit b


Phn mm ng dng User Space Cc hm giao tip chun: Device files
open close read write ioctl

Device Drivers

Kernel Space Phn cng


(Ton quyn truy xut trc tip ti nguyn phn cng ca h thng)

Lp trnh nhng ARM-Linux

61

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
Lp trnh nhng ARM-Linux
62

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

Lp trnh nhng ARM-Linux

63

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
Lp trnh nhng ARM-Linux
64

Kim tra danh sch thit b


Kim tra danh s|ch c|c nhm thit b
G lnh cat /proc/devices

Lp trnh nhng ARM-Linux

65

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

Lp trnh nhng ARM-Linux

66

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)

Lp trnh nhng ARM-Linux

67

M hnh giao tip iu khin led


Phn mm ng dng leds.c Hm giao tip: open close ioctl

Device files

/dev/leds

Device Drivers

Mini2440_leds.c

Phn cng

GPIO Port
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


Lp trnh nhng ARM-Linux
69

M ngun minh ha iu khin led n

Lp trnh nhng ARM-Linux

70

2.3. Lp trnh giao tip nt bm


Giao tip qua driver ~ c

Lp trnh nhng ARM-Linux

71

M hnh giao tip iu khin nt bm


Phn mm ng dng Buttons.c Hm giao tip: open close read

Device files

/dev/buttons

Device Drivers

Mini2440_buttons.c

Phn cng

GPIO Port
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 linux2.6.32.2/drivers/char/mini2440_buttons.c


Lp trnh nhng ARM-Linux
73

M ngun chng trnh c nt bm

Lp trnh nhng ARM-Linux

74

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.

Lp trnh nhng ARM-Linux

75

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

Lp trnh nhng ARM-Linux

76

Lp trnh giao tip GPIO m rng


Giao din n{y cung cp c|c files iu khin sau }y:

Lp trnh nhng ARM-Linux

77

Lp trnh giao tip GPIO m rng


V d minh ha
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

Chi tit xem b{i vit: https://sites.google.com/site/embedded247/ddcour se/giao-tiep-gpio-tu-userspace-1


Lp trnh nhng ARM-Linux
78

Tho lun

Lp trnh nhng ARM-Linux

79

Chng 3

Lp trnh vo ra nng cao

Lp trnh nhng ARM-Linux

80

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

Lp trnh nhng ARM-Linux

81

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

Lp trnh nhng ARM-Linux

82

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

Lp trnh nhng ARM-Linux

83

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

Lp trnh nhng ARM-Linux

90

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

Lp trnh nhng ARM-Linux

91

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

Lp trnh nhng ARM-Linux

92

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);
Lp trnh nhng ARM-Linux
93

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)

Lp trnh nhng ARM-Linux

94

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)

Lp trnh nhng ARM-Linux

95

Demo
Lp trnh nhng ARM-Linux
96

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

Lp trnh nhng ARM-Linux

97

Tn hiu chun USB


Tn hiu
Truyn kiu ni tip Tn hiu trn hai ng D+ v D- l tn hiu vi sai

Lp trnh nhng ARM-Linux

98

M hnh bus USB

Lp trnh nhng ARM-Linux

99

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
Lp trnh nhng ARM-Linux
100

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.
Lp trnh nhng ARM-Linux
101

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

Lp trnh nhng ARM-Linux

102

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

Lp trnh nhng ARM-Linux

103

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

Lp trnh nhng ARM-Linux

104

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
Lp trnh nhng ARM-Linux
105

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)

Lp trnh nhng ARM-Linux

106

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.
Lp trnh nhng ARM-Linux
107

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.
Lp trnh nhng ARM-Linux
108

3.4. Lp trnh giao tip USB Joystick

Lp trnh nhng ARM-Linux

109

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

Lp trnh nhng ARM-Linux

110

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
Lp trnh nhng ARM-Linux
111

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

Lp trnh nhng ARM-Linux

112

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


Lp trnh nhng ARM-Linux
113

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

Lp trnh nhng ARM-Linux

114

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

Lp trnh nhng ARM-Linux

115

Demo
Lp trnh nhng ARM-Linux
116

Kt qu demo
C|c s kin khi khi to thit b

Lp trnh nhng ARM-Linux

117

Kt qu demo
C|c s kin khi ngi dng nhn c|c nt

Lp trnh nhng ARM-Linux

118

QT Joystick Demo

Lp trnh nhng ARM-Linux

119

3.5. Lp trnh giao tip ADC


Gii thiu ADC Minh ha lp trnh ADC

Lp trnh nhng ARM-Linux

120

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

Lp trnh nhng ARM-Linux

121

Minh ha lp trnh ADC


Khai b|o th vin
#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

122

Minh ha lp trnh ADC


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

123

Chng 4

K thut lp trnh nng cao

Lp trnh nhng ARM-Linux

124

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

Lp trnh nhng ARM-Linux

125

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

Lp trnh nhng ARM-Linux

126

4.1. Tin trnh (Process)


Kh|i nim tin trnh Lp trnh a tin trnh

Lp trnh nhng ARM-Linux

127

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
Lp trnh nhng ARM-Linux
128

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)

Lp trnh nhng ARM-Linux

129

Dng tin trnh


C|ch 1: S dng t hp phm Ctrl + C C|ch 2: S dng shell command

kill PID

Lp trnh nhng ARM-Linux

130

To tin trnh mi
Cch 1: s dng h{m system

Lp trnh nhng ARM-Linux

131

To tin trnh mi
Cch 2: s dng h{m fork v{ exec

Lp trnh nhng ARM-Linux

132

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

Lp trnh nhng ARM-Linux

133

Danh sch signal thng dng


Kiu SIGNAL
SIGHUP SIGINT SIGILL SIGABRT SIGKILL

L do gi SIGNAL
Bo cho chng trnh khi thot khi terminal Khi ngi dng nhn Ctrl + C tt chng trnh Khi chng trnh chy lnh khng hp l Khi chng trnh nhn c lnh abort Khi chng trnh nhn c lnh kill (ng chng trnh)

SIGUSR1
SIGUSR2

Ty bin theo ng dng


Ty bin theo chng trnh

Lp trnh nhng ARM-Linux

134

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)

Lp trnh nhng ARM-Linux

135

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

Lp trnh nhng ARM-Linux

136

V d
Bt v{ x l signal c gi ti mt tin trnh (SIGTERM v SIGINT)

Lp trnh nhng ARM-Linux

137

killsignal.c

Lp trnh nhng ARM-Linux

138

V d: killsignal.c (tip)

Lp trnh nhng ARM-Linux

139

Demo
Lp trnh nhng ARM-Linux
140

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)

Lp trnh nhng ARM-Linux

141

4.5. Lp trnh x l a lung


To lung Truyn tham s cho lung Nhn gi| tr tr v t lung Tt lung

Lp trnh nhng ARM-Linux

142

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
Lp trnh nhng ARM-Linux
143

M ngun to lung

Lp trnh nhng ARM-Linux

144

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
Lp trnh nhng ARM-Linux
145

M ngun truyn tham s cho lung

Lp trnh nhng ARM-Linux

146

Tt lung
S dng h{m pthread_cancel:

thread: nhn tham s thread id ca lung mun tt

Lp trnh nhng ARM-Linux

147

M ngun tt lung

Lp trnh nhng ARM-Linux

148

Tho lun

Lp trnh nhng ARM-Linux

149

Chng 5

Lp trnh device driver

Lp trnh nhng ARM-Linux

150

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

Lp trnh nhng ARM-Linux

151

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

Lp trnh nhng ARM-Linux

152

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

Lp trnh nhng ARM-Linux

153

M ngun kernel Module

Lp trnh nhng ARM-Linux

154

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

Lp trnh nhng ARM-Linux

155

Lin kt Kernel Module

Lp trnh nhng ARM-Linux

156

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]
Lp trnh nhng ARM-Linux

157

V d: Hello Driver

Lp trnh nhng ARM-Linux

158

Demo
Lp trnh nhng ARM-Linux
159

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

Lp trnh nhng ARM-Linux

160

Tho lun

Lp trnh nhng ARM-Linux

161

Bi s 6

Lp trnh nn tng QT

Lp trnh nhng ARM-Linux

162

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

Lp trnh nhng ARM-Linux

163

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)

Lp trnh nhng ARM-Linux

164

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

Lp trnh nhng ARM-Linux

165

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++.

Lp trnh nhng ARM-Linux

166

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

Lp trnh nhng ARM-Linux

167

QT c s dng rng ri

Lp trnh nhng ARM-Linux

168

Kin trc Qt

Lp trnh nhng ARM-Linux

169

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
Lp trnh nhng ARM-Linux
170

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

Lp trnh nhng ARM-Linux

171

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

Lp trnh nhng ARM-Linux

172

Mi trng pht trin Qt Creator IDE

Lp trnh nhng ARM-Linux

173

Cc thnh phn Qt Creator

Lp trnh nhng ARM-Linux

174

Cc iu khin (widgets) c bn
QLabel QPushButton QLineEdit QTextEdit QSpinBox QComboBox Qslider V.v

Lp trnh nhng ARM-Linux

175

Chng trnh HelloQt


To project HelloQt Trong file main.c b sung on m~: Bin dch, chy chng trnh:
#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(); }

Lp trnh nhng ARM-Linux

176

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

177

C ch signals - slot
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)

Lp trnh nhng ARM-Linux

178

Minh ha c ch signals/slot
To bng code (dng phng thc Qobject::connect)

Lp trnh nhng ARM-Linux

179

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

Lp trnh nhng ARM-Linux

180

Minh ha c ch Signals/Slot
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

181

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

Lp trnh nhng ARM-Linux

182

Chng trnh TextFinder


X}y dng ng dng TextFinder

Lp trnh nhng ARM-Linux

183

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

Lp trnh nhng ARM-Linux

184

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


Lp trnh nhng ARM-Linux
185

Cu hnh trnh dch Qmake cho Kit


Bc 4: To cu hnh bin dch cho Mini2440, tr ti Qmake ~ bin dch c trn

Lp trnh nhng ARM-Linux

186

Cu hnh trnh dch Qmake cho Kit


Bc 5: Dch chng trnh QT cho KIT
Chn ng b bin dch Qmake cho QT Embedded

Lp trnh nhng ARM-Linux

187

Tho lun

Lp trnh nhng ARM-Linux

188

Bi s 7

Lp trnh mng trn Linux nhng

Lp trnh nhng ARM-Linux

189

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

Lp trnh nhng ARM-Linux

190

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

Lp trnh nhng ARM-Linux

191

7.1. Lp trnh Socket trn Linux


Gii thiu lp trnh socket M hnh lp trnh Minh ha

Lp trnh nhng ARM-Linux

192

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
Lp trnh nhng ARM-Linux
193

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)
Lp trnh nhng ARM-Linux
194

M hnh lp trnh socket


M hnh lp trnh socket TCP gia 2 tin trnh client/server

Lp trnh nhng ARM-Linux

195

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)

Lp trnh nhng ARM-Linux

196

Demo
Lp trnh giao tip socket gia KIT micro 2440 v{ PC

Demo
Lp trnh nhng ARM-Linux
197

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)

Lp trnh nhng ARM-Linux

198

7.3. Chng trnh ChatRoom

Lp trnh nhng ARM-Linux

199

7.4. Chng trnh gi/nhn nh


Lp trnh socket client/server S dng lp QImage

Lp trnh nhng ARM-Linux

200

Tho lun

Lp trnh nhng ARM-Linux

201

Chng 8

Lp trnh x l nh trn nn nhng

Lp trnh nhng ARM-Linux

202

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

Lp trnh nhng ARM-Linux

203

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

Lu tr Camera Thu nhn nh Sensor Lu tr Phn tch nh i snh Nhn dng

S ha

H quyt nh

Lp trnh nhng ARM-Linux

Cc bi ton x l nh
Cc k thut tin x l-mc thp
Image Enhancement Image Restoration

X l mc cao
Image Segmentation

Image Acquisition

Image Compression

Image Coding

Representation & Description

Morphological Image Processing

Wavelet Analysis

Recognition & Interpretation

Knowledge Base
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

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

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

c nh v hin th
Cc kiu d liu c bn trong OpenCV cvArr cvMat IplImage CvCapture

Lp trnh nhng ARM-Linux

226

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
Hm m file video: H{m m webcam: CvCapture* capture=cvCreateCameraCapture(0)

Lp trnh nhng ARM-Linux

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

229

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

230

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
y Gray level

x
pixel Original picture f(x, y)

Digital image I[i, j] or I[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)

Lp trnh nhng ARM-Linux

233

8.3.2. Chuyn nh mu -> a mc xm


S dng cng thc: Gray scale= 0.2989*R+ 0.5870*G + 0.1140*B;

Lp trnh nhng ARM-Linux

234

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 );

Lp trnh nhng ARM-Linux

235

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)

Lp trnh nhng ARM-Linux

237

Histogram
nh ti

Lp trnh nhng ARM-Linux

238

Histogram
nh sng

Lp trnh nhng ARM-Linux

239

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

Lp trnh nhng ARM-Linux

245

Dn tng phn

nh trc v sau khi tin hnh dn tng phn

Lp trnh nhng ARM-Linux

246

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.
Lp trnh nhng ARM-Linux
247

Cn bng Histogram
Cng thc thc hin: bk = (bmax bmin) Trong bmin, bmax l nhng gi tr c chn, pi l xc sut xut hin gi tr mc xm i trong nh ban u, vi i [amin, amax]

Lp trnh nhng ARM-Linux

248

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

Lp trnh nhng ARM-Linux

251

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.

Lp trnh nhng ARM-Linux

252

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).

Lp trnh nhng ARM-Linux

253

Chuyn sang nh nh phn

Kt qu (S dng ngng cng)

Kt qu (S dng ngng thch nghi)

Lp trnh nhng ARM-Linux

254

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
Lp trnh nhng ARM-Linux
258

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

Lp trnh nhng ARM-Linux

259

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
Lp trnh nhng ARM-Linux
260

You might also like