Khóa học
LẬP TRÌNH NHÚNG ARM-LINUX GV: Phạm Ngọc Hưng, Phạm Văn Thuận
Bộ môn Kỹ thuật Máy tính Viện CNTT&TT- ĐH BKHN email:
[email protected] Website: https://sites.google.com/site/embedded247/
Mục tiêu khóa học
Sau khi kết thúc khóa học n{y, học viên có thể • Nắm được được kiến kiến trúc một hệ thống nhúng nền tảng tảng ARM + hệ điều h{nh nhúng Linux. • Tùy biến, biến, biên biên dịch, c{i đặt đặt hệ điều h{nh h{nh nhúng Linux trên trên KIT FriendlyArm 2440.
• Lập trình trình giao giao tiếp tiếp v{o ra GPIO GPIO cơ cơ bản trên trên hệ nhúng nhúng Arm Linux (giao tiếp gpio) • Lập trình trình giao giao tiếp tiếp c|c chuẩn chuẩn v{o ra RS232, RS232, USB, USB, ADC ADC • Sử dụng driver, driver, v{ cơ chế chế viết viết driver trên hệ nhúng Linux. Linux. • Nắm được được c|c kỹ thuật thuật lập trình giao giao tiếp tiếp giữa c|c c|c tiến trình trên linux, kỹ thuật lập l ập trình đa luồng, lập trình socket • Lập trìn trình h giao giao diện diện đồ họa Qt Qt trên trên Linux Linux • B{ B{ii tập tập,, Cas Casee Study. Study. Lập trình nhúng ARM-Linux
2
1
Nội dung khóa học Bài 1. Giới thiệu lập trình nhúng Arm Linux Bài 2. Biên dịch, c{i đặt hệ điều hành nhúng Linux Bài 3. Môi trường lập trình nhúng Arm Linux Bài 4. Lập trình vào ra GPIO cơ bản Bài 5. Lập trình vào ra nâng cao Bài 6. C|c kỹ thuật lập thuật lập trình nâng cao Bài 7. Lập trình Qt cơ bản Bài 8. Lập trình Qt n}ng cao
Lập trình nhúng ARM-Linux
3
Nội dung khóa học
CASE STUDY • Lập trình trình ứng ứng dụng dụng Qt giao giao tiếp tiếp rs232 rs232 • Lập trình trình usb device device driv driver er (giao (giao tiếp usb giữa KIT KIT micro2440 và Keil Arm7 Board)
• Lậ Lập p trì trình nh mạ mạng ng Qt Qt
Lập trình nhúng ARM-Linux
4
2
Nội dung khóa học Bài 1. Giới thiệu lập trình nhúng Arm Linux Bài 2. Biên dịch, c{i đặt hệ điều hành nhúng Linux Bài 3. Môi trường lập trình nhúng Arm Linux Bài 4. Lập trình vào ra GPIO cơ bản Bài 5. Lập trình vào ra nâng cao Bài 6. C|c kỹ thuật lập thuật lập trình nâng cao Bài 7. Lập trình Qt cơ bản Bài 8. Lập trình Qt n}ng cao
Lập trình nhúng ARM-Linux
3
Nội dung khóa học
CASE STUDY • Lập trình trình ứng ứng dụng dụng Qt giao giao tiếp tiếp rs232 rs232 • Lập trình trình usb device device driv driver er (giao (giao tiếp usb giữa KIT KIT micro2440 và Keil Arm7 Board)
• Lậ Lập p trì trình nh mạ mạng ng Qt Qt
Lập trình nhúng ARM-Linux
4
2
Tài liệu tham khảo
Tài liệu tham khảo chính: • • • • • • •
Micro2440 User U ser Manual
S3C244 S3C 2440 0 Micro MicroCon Contro trolle llerr User’s User’s Man Manual ual Beginning Linux Programming Advanced Linux Programming Linux Device Driver C++ GUI programming with QT Website: https://sites.google.com/site/embedded247/ Lập trình nhúng ARM-Linux
5
Bài số 1
Giới thiệu Lập trình nhúng Arm Linux
Lập trình nhúng ARM-Linux
6
3
Mục tiêu bài học số 1
Sau khi kết thúc b{i học n{y, học viên có thể • Nắm được tổng quan về lập trình nhúng • Trình b{y tổng quan về kiến trúc ARM, c|c dòng vi xử lý ARM • Trình b{y được cấu trúc phần cứng v{ c|c chức năng của hệ nhúng KIT FriendlyArm micro2440
Lập trình nhúng ARM-Linux
7
Nội dung bài học 1.1. Giới thiệu về lập trình nhúng 1.2. Tổng quan về kiến trúc ARM 1.3. Giới thiệu KIT FriendlyArm micro2440 1.3. Môi trường ph|t triển ứng dụng trên KIT FriendlyArm
Lập trình nhúng ARM-Linux
8
4
1.1. Giới thiệu lập trình nhúng
Lập trình ứng dụng trên hệ nhúng phụ thuộc vào nền tảng (platform) phần cứng, phần mềm của hệ nhúng đó.
Hệ nhúng không có hệ điều hành: • Thường sử dụng c|c vi điều khiển hiệu năng tương đối thấp (8051, ATMega, PIC, ARM7, …) • Lập trình bằng C, ASM • Môi trường, công cụ lập trình tùy theo từng dòng vi điều khiển (CodeVision, AVR Studio, Keil…) • Phù hợp c|c ứng dụng điều khiển v{o/ra cơ bản, c|c giao tiếp ngoại vi cơ bản. Lập trình nhúng ARM-Linux
9
Giới thiệu lập trình nhúng
Hệ nhúng có hệ điều hành: • Dựa trên c|c vi điều khiển, vi xử lý (CPU) có hiệu năng cao (Ví dụ: AVR 32, ARM 9, ARM 11, …) • Nhiều nền tảng hệ điều h{nh nhúng : uCLinux, Embedded Linux, Windows CE, … • Môi trường, công cụ lập trình tùy thuộc nền tảng hệ điều h{nh: C/C++, QT SDK (Nokia), .Net Compact FrameWork (Microsoft), … • Ứng dụng nhiều b{i to|n phức tạp: GPS Tracking/Navigator, Xử lý ảnh, ứng dụng Client/Server, … Lập trình nhúng ARM-Linux
10
5
Giới thiệu lập trình nhúng
Các thiết bị di động thông minh: • Xu hướng công nghệ hiện nay • Nhiều nền tảng: iOS, Android, Windows Phone, Symbian OS/Maemo,
• Môi trường, công cụ: iOS: Xcode + iOS SDK (ngôn ngữ Object -C) Android: C, Java +
Android SDK, Eclipse/Netbean
Windows Phone: SDK + Visual Studio (C#)
• C|c ứng dụng phong phú: Google Play Store, Apple Store, Windows Market Place, … Lập trình nhúng ARM-Linux
11
Giới thiệu lập trình nhúng
Khóa học n{y hướng tới:
• Lập trình hệ nhúng nền tảng ARM + Linux • Minh họa trên KIT FriendlyArm micro 2440 • Lập trình C/C++, lập trình giao diện đồ họa QT Lý do: • ARM ? > 90% thị phần thiết bị nhúng, l{ dòng vi xử lý hiệu năng cao. • Embedded Linux ? M~ nguồn mở, khả năng can thiệp, hiểu s}u hệ thống. Nhiều OS kh|c (iOS, Android) dựa trên Linux kernel
Lập trình nhúng ARM-Linux
12
6
1.2. Giới thiệu kiến trúc ARM
ARM: • Advanced RISC Machine • Acorn RISC Machine
ARM l{ kiến trúc tập lệnh RISC 32 bit (Instruction Set Architecture – ISA) ph|t triển bởi Arm Holdings (1983).
Phổ biến nhất trong c|c kiến trúc tập lệnh 32 bit.
Được sử dụng rộng r~i trong c|c hệ thống nhúng: mobile phones, PDAs, tablets, digital media, music
players, calculators, routers, …
98% of 1 billion mobile phones (in 2005); Lập trình nhúng ARM-Linux
13
Kiến trúc ARM
Kế thừa các đặc điểm của kiến trúc tập lệnh RISC • Số lượng thanh ghi lớn v{ có kích thước bằng nhau (32bit) • Kiến trúc tập lệnh RISC, độ d{i từ lệnh 32 bit, khuôn dạng lệnh 3 địa chỉ to|n hạng. • Chế độ địa chỉ đơn giản (ít chế độ địa chỉ hơn kiến trúc CISC)
Phát triển các đặc trưng mới của ARM • C|c lệnh có kết hợp với lệnh dịch hoặc c|c lệnh logic • Chế độ địa chỉ tự động tăng-giảm để tối ưu hóa c|c vòng lặp • Nạp v{ lưu (load/store) nhiều lệnh cùng lúc cho phép n}ng cao thông lượng
Lập trình nhúng ARM-Linux
14
7
Các dòng ARM Architecture
Family
ARMv1
ARM1
ARMv2
ARM2, ARM3
ARMv3
ARM6, ARM7
ARMv4
StrongARM, ARM7TDMI, ARM9TDMI
ARMv5
ARM7EJ, ARM9E, ARM10E, XScale
ARMv6
ARM11, ARM Cortex-M
ARMv7
ARM Cortex-A, ARM Cortex-M, ARM Cortex-R
ARMv8
Support 64-bit data and addressing
Lập trình nhúng ARM-Linux
15
Các dòng ARM (tiếp)
Kiến trúc các dòng ARM Lập trình nhúng ARM-Linux
16
8
Một số công nghệ trong ARM
Thumb Instruction Set: tập lệnh 16 bit cho phép tăng mật độ lệnh Jazelle: công nghệ cho phép tăng tốc c|c ứng dụng viết bằng Java SIMD, NEON: công nghệ n}ng cao hiệu năng cho c|c ứng dụng Video/Audio TrustZone: công nghệ n}ng cao tính bảo mật
Lập trình nhúng ARM-Linux
17
So sánh các dòng ARM
Phân nhóm theo hiệu năng và tính hữu dụng Lập trình nhúng ARM-Linux
18
9
Kiến trúc ARM và lịch sử phát triển
ARM được rất nhiều h~ng ph|t triển v{ sản xuất, ở Việt Nam phổ biến chip ARM của c|c h~ng • • • • •
ATMEL: AT91SAM7, AT91SAM9… NXP: LPC2138, LPC2148, LPC2300… TI (Texas Instrument): TMS470, TMS570… SAMSUNG: S3C2440
…
Lập trình nhúng ARM-Linux
19
Kiến trúc vi điều khiển S3C2440
Đặc điểm của chip (microprocessor) S3C2440 • Core: ARM920T core , 16 Kbytes Data Cache, 16 Kbytes
Instruction cache Xung nhịp 400MHz (thường dùng), 533 MHz (max)
• Memories Giao diện bus AMBA (Advanced Microcontroller
Bus Architecture) 4 KByte SRAM nội
Lập trình nhúng ARM-Linux
20
10
Lõi vi xử lý ARM920T
Lập trình nhúng ARM-Linux
21
Ngoại vi S3C2440
Lập trình nhúng ARM-Linux
22
11
Kiến trúc vi điều khiển S3C2440
Đặc điểm của chip S3C2440 (tiếp) • Ngoại vi (Peripherals) USB Host/Device 10/100 Mbps Ethernet MAC Controller SPI, I2C… 32 bit Timer/Counter 3 USARTs Multimedia Card Interface ADC 10 bit 8 kênh Giao tiếp cảm
biến ảnh (Image Sensor) Điều khiển LCD Điều khiển AC97 audio codec Lập trình nhúng ARM-Linux
23
Kiến trúc vi điều khiển S3C2440
Đặc điểm của chip S3C2440 (tiếp) • Hệ thống 4 kênh DMA (Direct Memory Access) Boot hệ thống từ NOR Flash, NAND Flash, SDCard,
Ethernet Bộ điều khiển ngắt n}ng cao
AIC (Advanced
Interrupt Controller)
• Vào ra 130 ch}n v{o ra lập trình được
Lập trình nhúng ARM-Linux
24
12
Tập thanh ghi và chế độ hoạt động R0->R12:
thanh ghi
công dụng chung R13:
Stack Pointer
R14: Link Register R15:
Program Counter
CPSR: Current
Program Status Register SPSR_SVC:
Saved Program Status Register
Lập trình nhúng ARM-Linux
25
Thanh ghi trạng thái chương trình
Các cờ kết quả hoạt động của ALU
Điều
khiển cho phép/cấm ngắt Thiết lập chế độ hoạt động
Lập trình nhúng ARM-Linux
26
13
Tập lệnh của S3C2440
Tập lệnh ARM chia th{nh c|c nhóm lệnh • Lệnh rẽ nh|nh (Branch) • Lệnh xử lý dữ liệu (Data Processing) • Trao đổi thanh ghi trạng th|i (Status Register Transfer)
• Nạp v{ lưu (Load and Store) • Ph|t sinh ngoại lệ (Exception-Generating)
Lập trình nhúng ARM-Linux
27
Bản đồ bộ nhớ
Bus địa chỉ 32 bit • Địa chỉ bắt đầu: 0x00000000 • Địa chỉ kết thúc: 0x40000000 • Chia th{nh nhiều bank nhớ, mỗi bank 128 MB, tổng không gian bộ nhớ 1GB 6 bank nhớ cho ROM, SRAM (viết tắt
SROM) 2 bank nhớ cho ROM, SRAM, SDRAM, ….
Hỗ trợ cả hai kiểu lưu trữ: little endian, big endian
Lập trình nhúng ARM-Linux
28
14
Lập trình nhúng ARM-Linux
29
Bản đồ bộ nhớ Hỗ trợ hai chế độ khởi động chính Với chế độ khởi động từ Nand Flash, 4 Kbytes BootSram được |nh xạ v{o vùng nhớ chọn bởi nGCS0.
Với chế độ khởi động từ Nor Flash, Nor Flash được |nh xạ v{o vùng nhớ chọn bởi nGCS0. Vùng nhớ cho SDRAM bắt đầu tại địa chỉ 0x30000000 v{ kết thúc ở địa chỉ 0x34000000. (NOR Flash chứa sẵn BIOS firmware) Lập trình nhúng ARM-Linux
30
15
1.3. Giới thiệu KIT nhúng micro2440
Lập trình nhúng ARM-Linux
31
Giới thiệu KIT nhúng micro2440
Lập trình nhúng ARM-Linux
32
16
Giới thiệu KIT nhúng micro2440
Lập trình nhúng ARM-Linux
33
Giới thiệu KIT nhúng micro2440
Thông số kỹ thuật
Lập trình nhúng ARM-Linux
34
17
Giới thiệu KIT nhúng micro2440
Lập trình nhúng ARM-Linux
35
1.4. Môi trường phát triển ứng dụng
Mô hình sử dụng ph|t triển ứng dụng trên KIT FriendlyArm mini/macro 2440
Lập trình nhúng ARM-Linux
36
18
Môi trường phát triển ứng dụng
Phần mềm • M|y tính Linux (Ubuntu 9.04 hoặc mới hơn) • Trình biên dịch chéo (C/C++ cross compiler): Cross toolchains (arm linux gcc 4.4.3)
• • • •
gFTP (Công cụ truyền nhận file theo giao thức FTP) minicom (phần mềm giao tiếp cổng Com trên Linux) USB push (Công cụ truyền file qua USB trên Linux) QT SDK, QT Embedded (Môi trường IDE để ph|t triển ứng dụng giao diện đồ họa trên nền tảng Qt Framework, dựa trên C/C++)
Lập trình nhúng ARM-Linux
37
Môi trường phát triển ứng dụng
Môi trường phát triển ứng dụng theo nhóm Lập trình nhúng ARM-Linux
38
19
Thảo luận
Lập trình nhúng ARM-Linux
39
Bài số 2
Biên dịch, cài đặt Hệ điều hành nhúng Linux
Lập trình nhúng ARM-Linux
40
20
Mục tiêu bài học số 2
Sau khi kết thúc b{i học n{y, học viên có thể • Nắm được tổng quan về hệ điều h{nh nhúng Linux (Embedded Linux OS)
• Nắm được c|c kh|i niệm cơ bản về Bootloader, kernel, root file system
• Biết c|ch nạp hệ điều h{nh nhúng Linux xuống KIT FriendlyArm Micro2440
• Biết c|ch tùy biến, biên dịch nh}n hệ điều h{nh
Lập trình nhúng ARM-Linux
41
Nội dung bài học 2.1. Tổng quan về hệ điều h{nh nhúng Linux 2.2. Quy trình c{i đặt hệ điều h{nh nhúng Linux 2.3. Biên dịch nh}n hệ điều h{nh nhúng Linux
Lập trình nhúng ARM-Linux
42
21
2.1. Tổng quan Embedded Linux OS
Hệ điều h{nh (OS) ? • Hệ điều h{nh bản chất l{ phần mềm hệ thống Quản lý t{i nguyên phần cứng m|y tính Cung cấp c|c h{m dịch vụ cho phép c|c ứng dụng
tương t|c với t{i nguyên hệ thống
Lập trình nhúng ARM-Linux
43
Tổng quan Embedded Linux OS
Đặc trưng cơ bản của hệ điều h{nh Quản lý t{i nguyên hệ thống (phần cứng, phần mềm) Trung gian giữa phần cứng v{ phần mềm, giúp phần
cứng l{m việc trong suốt với phần mềm ứng dụng Cung cấp giao diện h{m chuẩn cho phần mềm ứng dụng
Lợi ích của hệ điều h{nh • Tăng tính ổn định, tin cậy của hệ thống • Tăng tính khả chuyển (portability)
Lập trình nhúng ARM-Linux
44
22
Sơ đồ phân cấp hệ thống
Lập trình nhúng ARM-Linux
45
Kiến trúc hệ điều hành Unix
Lập trình nhúng ARM-Linux
46
23
Kiến trúc hệ điều hành nhúng
Hệ điều h{nh nhúng (embedded os) ? • L{ hệ điều h{nh c{i đặt cho c|c hệ thống nhúng (embedded system)
• Được thiết kế: compact, efficient, reliable.
Lập trình nhúng ARM-Linux
47
Kiến trúc hệ điều hành nhúng
Đặc trưng của hệ điều h{nh nhúng • Tăng tính tin cậy (reliability) • Tăng tính khả chuyển (portability) • Khả năng tương thích mềm: dễ d{ng n}ng cấp hay thu gọn để tương thích với nền tảng hệ thống • Thu gọn, đòi hỏi ít bộ nhớ hơn. Có thể hỗ trợ khởi động từ bộ nhớ ROM, Flash (hệ thống không có ổ cứng) • Cung cấp c|c cơ chế lập lịch (scheduler) hỗ trợ thời gian thực (Realtime OS – RTOS) Lập trình nhúng ARM-Linux
48
24
Hệ điều hành thời gian thực
Hệ thống thời gian thực (Realtime): c|c phần mềm, phần cứng hoạt động thỏa m~n c|c r{ng buộc về thời gian Ph}n loại: • Hard Realtime: không đ|p ứng deadline -> lỗi hệ thống • Soft Realtime: không đ|p ứng deadline -> giảm chất lượng dịch vụ (QoS)
Lập trình nhúng ARM-Linux
49
Hệ điều hành thời gian thực
Lập trình nhúng ARM-Linux
50
25
Cấu trúc nhân hệ điều hành
Lập trình nhúng ARM-Linux
51
Hệ thống file trong Linux
Một số thư mục quan trọng • • • • • • •
/home: thư mục người dùng /dev: chứa c|c file thiết bị /bin: chứa c|c file thực thi của hệ thống /etc: chứa c|c file cấu hình /var: chứa c|c file log /opt: chứa c|c gói chương trình c{i đặt thêm /proc: chứa thông tin về c|c tiến trình, c|c th{nh phần phần cứng, phần mềm đang chạy trong hệ thống • /usr: chứa c|c file thực thi, t{i liệu liên quan tới người dùng
Lập trình nhúng ARM-Linux
52
26
Embedded Linux
Hỗ trợ rất nhiều kiến trúc vi xử lý (cả 32 bit v{ 64 bit) • Intel X86, ARM, PowerPC, MIPS, AVR32, …
Không hỗ trợ c|c vi điều khiển hiệu năng thấp Hỗ trợ cả kiến trúc có v{ không có khối quản lý bộ nhớ (MMU) C|c hệ thống có thể dùng chung toolchains, bootloader v{ kernel, c|c th{nh phần kh|c phải riêng biệt v{ tương thích với từng hệ thống Lập trình nhúng ARM-Linux
53
Quá trình boot hệ thống Linux trên PC
Lập trình nhúng ARM-Linux
54
27
Quá trình boot hệ thống Linux nhúng
Lập trình nhúng ARM-Linux
55
Quá trình boot hệ thống Linux nhúng
Boot loader: chương trình mồi, thực hiện kiểm tra
phần cứng hệ thống v{ nạp nh}n (kernel) của hệ điều h{nh Kernel: nh}n hệ điều h{nh, chứa c|c th{nh phần cơ bản nhất Root file system: hệ thống file, chứa c|c modules bổ sung v{ c|c phần mềm ứng dụng
Lập trình nhúng ARM-Linux
56
28
2.2. Quy trình cài đặt Embedded Linux
Bước 1: C{i đặt bootloader (VD: U -Boot, Supervivi)
Bước 2: C{i đặt kernel Bước 3: C{i đặt hệ thống file (root file system)
Lập trình nhúng ARM-Linux
57
Cài đặt trên môi trường Windows
Công cụ • Phần mềm HyperTerminal: kết nối với KIT micro2440 qua cổng COM • Phần mềm DNW: kết nối với KIT micro2440 qua cổng USB
C|ch thức • Phần mềm HyperTerminal (giao tiếp với BIOS trên Nor Flash qua cổng rs232) truyền c|c lệnh điều khiển • Phần mềm DNW trao đổi file Lập trình nhúng ARM-Linux
58
29
Cài đặt trên môi trường Linux
Công cụ: • Phần mềm minicom: kết nối với KIT micro2440 qua cổng COM • Phần mềm usbpush: kết nối với KIT micro2440 qua cổng USB
C|ch thức • Phần mềm minicom cho phép giao tiếp serial, truyền c|c lệnh điều khiển • Phần mềm usbpush nạp file xuống KIT
Lập trình nhúng ARM-Linux
59
Cài đặt hệ điều hành nhúng Linux
Demo
Lập trình nhúng ARM-Linux
60
30
2.3. Biên dịch nhân Linux
Khi n{o cần biên dịch lại nh}n?
• Khi n}ng cấp hệ thống lên c|c phiên bản mới hơn • Khi cần sửa lỗi, cấu hình, tùy chỉnh c|c module Qu| trình biên dịch nh}n • Download nh}n tại địa chỉ: kernel.org (Hoặc trong CD đi kèm KIT) • File nén linux-2.6.32.2.tar (tùy phiên bản); • Giải nén được thư mục to{n bộ m~ nguồn của nh}n (ví dụ thư mục linux-2.6.32.2) Lập trình nhúng ARM-Linux
61
Biên dịch nhân Linux
Qu| trình biên dịch nh}n (tiếp): • V{o thư mục chứa m~ nguồn nh}n (linux-2.6.32.2) • Cấu hình trước khi biên dịch bằng lệnh: make menuconfig
• Xuất hiện giao diện cấu hình, tùy chỉnh phù hợp với hệ thống. • Thực hiện biên dịch bằng lệnh: make zImage • Biên dịch th{nh công kết quả sẽ l{ file zImage (trong thư mục linux-2.6.32.2/arch/arm/mach-s3c2440) , sẽ được nạp (porting) xuống KIT Lập trình nhúng ARM-Linux
62
31
Biên dịch nhân Linux
Demo Lập trình nhúng ARM-Linux
63
Thảo luận
Lập trình nhúng ARM-Linux
64
32
Bài số 3
Môi trường Lập trình nhúng Arm Linux
Lập trình nhúng ARM-Linux
65
Mục tiêu bài học số 3
Sau khi kết thúc b{i học n{y, sinh viên có thể • Trình b{y c|c th{nh phần cần thiết cho việc ph|t triển ứng dụng nhúng trên Linux • Biết c|ch c{i đặt c|c công cụ, môi trường ph|t triển • Trình b{y được cấu trúc một chương trình cơ bản, viết v{ biên dịch chương trình C đầu tiên “Hello” chạy trên KIT micro2440
Lập trình nhúng ARM-Linux
66
33
Nội dung bài học 3.1. Môi trường ph|t triển ứng dụng nhúng Linux 3.2. C{i đặt môi trường ph|t triển 3.3. Lập trình ứng dụng HelloWorld
Lập trình nhúng ARM-Linux
67
3.1. Môi trường phát triển
Mô hình lập trình hệ thống nhúng C|c th{nh phần cần thiết để ph|t triển ứng dụng nhúng trên Linux
Lập trình nhúng ARM-Linux
68
34
Mô hình lập trình hệ thống nhúng
• Host: hệ thống chứa môi trường phát triển •Target: hệ nhúng cần phát triển ứng dụng Lập trình nhúng ARM-Linux
69
Môi trường lập trình KIT micro 2440 • M|y host c{i hệ điều h{nh Linux (Ubuntu) • Trình biên dịch chéo Cross toolchains (arm-linux-gcc 4.4.3): biên dịch ứng dụng (viết bằng C/C++) • Công cụ viết m~ nguồn chương trình C (dùng gedit, eclipse) • gFTP: truyền nhận file Host<->KIT qua giao thức TFTP • Telnet: kết nối KIT qua Ethernet (sử dụng cross cable)
Lập trình nhúng ARM-Linux
70
35
3.2. Cài đặt môi trường phát triển
Cấu hình mạng LAN (host + KIT) qua c|p chéo v{ sử dụng IP cùng dải: • Linux host: 192.168.1.30 • Linux target: 192.168.1.230 (default)
Lập trình nhúng ARM-Linux
71
Cài đặt trình biên dịch chéo
Bước 1: Giải nén arm-linux-gcc-4.4.3.tar.gz tar – zxvf arm-linux-gcc-4.4.3.tar.gz
Bước 2: Cập nhật biến môi trường PATH
• Thêm đường dẫn tới thư mục bin của arm-linux-gcc4.4.3 (Cập nhật biến môi trường PATH trong file .bashrc trong đường dẫn chỉ ra bởi biến $HOME )
Bước 3: Kiểm tra trình biên dịch
• Mở cử sổ console, gõ lệnh: arm-linux-gcc --version • Thông b|o về phiên bản của arm-linux-gcc hiện ra => qu| trình c{i đặt th{nh công Lập trình nhúng ARM-Linux
72
36
Kiểm tra trình biên dịch chéo
Lập trình nhúng ARM-Linux
73
Cài đặt phần mềm gFTP
Bước 1: Cài đặt phần mềm gFTP
• Gõ lệnh: sudo apt-get install gftp Bước 2: Kiểm tra kết nối giữa Host và Target • Mở phần mềm gFTP: Applications->Internet>gFTP
• Thiết lập các tham số Địa
chỉ IP của KIT: 192.168.1.230
Username: root Password: ktmt (có thể đổi bằng lệnh passwd)
• Mở kết nối Lập trình nhúng ARM-Linux
74
37
Kết nối sử dụng gFTP
Lập trình nhúng ARM-Linux
75
Cài đặt phần mềm debug GDB
Bước 1: download m~ nguồn gdb (version 7.0) • Cách 1: apt-get source gdb • Cách 2: http://ftp.gnu.org/gnu/gdb/
Bước 2: Biên dịch v{ c{i đặt gdb client trên m|y HOST
Bước 3: Biên dịch v{ c{i đặt gdb server trên m|y TARGET
(Chi tiết xem trong tài liệu hướng dẫn cài đặt môi trường phát triển ứng dụng) Lập trình nhúng ARM-Linux
76
38
3.3. Xây dựng ứng dụng HelloWorld
Cấu trúc chương trình đơn giản C|ch thức biên dịch chương trình Nạp file thực thi xuống KIT v{ chạy ứng dụng
Lập trình nhúng ARM-Linux
77
Cấu trúc chương trình
Tu}n thủ cấu trúc chương trình ANSII C
Lập trình nhúng ARM-Linux
78
39
Chương trình Hello World
Soạn thảo m~ nguồn chương trình C bằng gedit (file Hello.c)
#include int main (int argc, char* argv[]) {
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; }
Lập trình nhúng ARM-Linux
79
Cách thức biên dịch chương trình
Cách 1: Sử dụng lệnh của cross compiler
• VD: arm-linux-gcc –g –o Hello Hello.c • Kết quả: biên dịch ra một file thực thi có tên l{ Hello từ một file m~ nguồn l{ Hello.c, file n{y có hỗ trợ khả năng debug Cách 2: Tạo v{ sử dụng Makefile • make l{ một tool cho phép quản lý qu| trình biên dịch, liên kết … của một dự |n với nhiều file m~ nguồn. • Tạo Makefile lưu c|c lệnh biên dịch theo định dạng của Makefile
• Sử dụng lệnh make để chạy Makefile v{ biên dịch chương trình Cách 3: Sử dụng automake và autoconf • Tạo makefile tự động Lập trình nhúng ARM-Linux
80
40
Cấu trúc Makefile
Makefile cấu th{nh từ c|c target, variables v{ comments
Target có cấu trúc như sau: target: dependencies [tab] system command
target: make target
Dependencies: c|c th{nh phần phụ thuộc (file m~ nguồn, c|c file object…) System command: c|c c}u lệnh (lệnh biên dịch, lệnh
linux) Lập trình nhúng ARM-Linux
81
VD 1: Makefile đơn giản CC=arm-linux-gcc all: Hello.c $(CC) –g –o Hello Hello.c clear: rm Hello Biên
dịch chương trình: make all Xóa file sinh ra trước đó: make clear
Lập trình nhúng ARM-Linux
82
41
VD 2: Makefile liên kết include
Hello.c
Display.c
void display(int index, char* str) include
Display.h void display(int index, char* str)
Lập trình nhúng ARM-Linux
83
VD2: Makefile liên kết Hello.c
Display.c
Compiler
Compiler
Hello.o
Display.o Linker
Hello
File thực thi
Lập trình nhúng ARM-Linux
84
42
VD 2: Makefile liên kết 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
Lập trình nhúng ARM-Linux
85
Nạp file thực thi xuống KIT
Bước 1: sử dụng phần mềm gFTP chuyển file Hello (đ~ được biên dịch trước đó) xuống KIT, ví dụ xuống thư mục: /ktmt Bước 2: telnet xuống KIT, chuyển tới thư mục /ktmt, thực thi chương trình • Gõ lệnh: ./Hello • Nếu chương trình chưa có quyền thực thi, thực hiện cấp quyền: sudo chmod +x Hello
Bước 3: quan s|t kết quả Lập trình nhúng ARM-Linux
86
43
Thảo luận
Lập trình nhúng ARM-Linux
87
Bài số 4
Lập trình vào ra GPIO cơ bản
Lập trình nhúng ARM-Linux
88
44
Mục tiêu bài học số 4
Sau khi kết thúc b{i học n{y, sinh viên có thể • Nắm được nguyên tắc lập trình giao tiếp v{o ra cơ bản trên hệ điều h{nh Linux nhúng • Lập trình giao tiếp thiết bị (ghép nối GPIO) với driver đ~ có (led, button) • Biết c|ch lập trình giao tiếp GPIO mở rộng dựa trên giao diện sysfs (gpiolib)
Lập trình nhúng ARM-Linux
89
Nội dung bài học 4.1. Cơ chế lập trình giao tiếp thiết bị 4.2. Lập trình điều khiển led đơn 4.3. Lập trình giao tiếp nút bấm 4.4. Lập trình giao tiếp GPIO mở rộng
Lập trình nhúng ARM-Linux
90
45
4.1. Cơ chế lập trình giao tiếp thiết bị
Device files, Device number
Kiểm tra danh s|ch device driver, thiết bị Cơ chế giao tiếp
Lập trình nhúng ARM-Linux
91
Mô hình giao tiếp ứng dụng – thiết bị Phần mềm ứng dụng
User Space
Các hàm giao tiếp chuẩn: Device files
Device Drivers
Phần cứng
•open •close •read •write •ioctl •…
Kernel Space (Toàn quyền truy xuất trực tiếp tài nguyên phần cứng của hệ thống)
Lập trình nhúng ARM-Linux
92
46
Device files, Device number
Device files: ls –l /dev • Device file không phải l{ file thông thường, không phải l{ một vùng dữ liệu trên hệ thống file • Qu| trình đọc ghi device file Giao tiếp với device driver Đọc, ghi phần cứng của thiết bị
Ph}n loại device files • Character device: thiết bị phần cứng đọc, ghi một chuỗi c|c byte dữ liệu • Block device: thiết bị phần cứng đọc, ghi một khối dữ liệu Lập trình nhúng ARM-Linux
93
Device files, Device number
Device number: mỗi thiết bị được x|c định bởi hai gi| trị • Major device number: x|c định thiết bị n{y sử dụng drvier nào
• Minor device number: ph}n biệt giữa c|c thiết bị kh|c nhau cùng sử dụng chung một device driver
Lập trình nhúng ARM-Linux
94
47
Kiểm tra danh sách thiết bị
Kiểm tra danh s|ch c|c thiết bị • Gõ lệnh ls –al /dev
Giải thích thông tin Loại
thiết bị: char device hay block device Tài khoản người dùng Tên thiết bị Major
và minor number
Mount
ponint Lập trình nhúng ARM-Linux
95
Kiểm tra danh sách thiết bị
Kiểm tra danh s|ch c|c nhóm thiết bị • Gõ lệnh cat /proc/devices
Lập trình nhúng ARM-Linux
96
48
Cơ chế lập trình giao tiếp thiết bị
Cơ chế lập trình • Sử dụng c|c h{m v{o ra file open close read write
• Sử dụng h{m điều khiển v{o ra: ioctl
Lập trình nhúng ARM-Linux
97
4.2. Lập trình điều khiển led đơn
Sử dụng led driver đ~ có 4 led đơn, ghép nối qua GPB5,6,7,8 Điều khiển led on/off, tạo hiệu ứng: nhấp nh|y, chạy đuổi, … Cần sử dụng h{m trễ (delay): sleep, usleep (thư viện sys/time.h)
Lập trình nhúng ARM-Linux
98
49
Mô hình giao tiếp điều khiển led Phần mềm ứng dụng
Device files
Device Drivers
Phần cứng
leds.c
/dev/leds
Hàm giao tiếp: •open •close •ioctl
Mini2440_leds.c
GPIO Port
Lập trình nhúng ARM-Linux
99
Lập trình điều khiển 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 • Điều khiển bật/tắt led đơn có số hiệu led_no
Driver cho led đơn: linux-2.6.32.2/drivers/char/mini2440_leds.c Lập trình nhúng ARM-Linux
100
50
Mã nguồn minh họa
Lập trình nhúng ARM-Linux
101
4.3. Lập trình giao tiếp nút bấm
Giao tiếp qua driver đ~ có
Lập trình nhúng ARM-Linux
102
51
Mô hình giao tiếp điều khiển nút bấm Phần mềm ứng dụng
Device files
Device Drivers
Phần cứng
Buttons.c
Hàm giao tiếp: •open •close •read
/dev/buttons
Mini2440_buttons.c
GPIO Port
Lập trình nhúng ARM-Linux
103
Lập trình ghép nối nút bấm
buttons_fd=open(“/dev/buttons”,0) • buttons_fd: file id • /dev/buttons: device file
read(buttons_fd,current_buttons,sizeof(curren t_buttons)
• Đọc trạng th|i c|c nút bấm
close(buttons_fd): đóng file
M~ nguồn driver cho nút bấm linux2.6.32.2/drivers/char/mini2440_buttons.c Lập trình nhúng ARM-Linux
104
52
Mã nguồn chương trình đọc nút bấm
Lập trình nhúng ARM-Linux
105
4.4. Lập trình giao tiếp GPIO mở rộng
2 c|ch sử dụng giao tiếp gpio (từ Linux user space) • Cách 1: Viết gpio driver (trên không gian nh}n hệ điều h{nh, kernel space), giao tiếp qua driver n{y. (Ví dụ với led, button đ~ l{m) • Cách 2: giao tiếp c|c ch}n gpio trực tiếp từ không gian người dùng (user space) dựa trên API thư viện gpiolib cung cấp. Linux cung cấp giao diện GPIO sysfs cho phép thao t|c với bất kỳ ch}n GPIO từ userspace.
Lập trình nhúng ARM-Linux
106
53
Lập trình giao tiếp GPIO mở rộng
Tất cả c|c giao diện điều khiển GPIO thông qua sysfs nằm trong thư mục /sys/class/gpio Kiểm tra bằng lệnh: ls /sys/class/gpio
Lập trình nhúng ARM-Linux
107
Lập trình giao tiếp GPIO mở rộng
Giao diện n{y cung cấp c|c files điều khiển sau đ}y:
Lập trình nhúng ARM-Linux
108
54
Lập trình giao tiếp GPIO mở rộng
Ví dụ minh họa
Cấu hình chân GPF5 (micro2440) output, và xuất giá trị 0 ra chân này echo 165 > /sys/class/gpio/export echo “out” > /sys/class/gpio/gpio165/direction echo 0 > /sys/class/gpio/gpio165/value
Chi tiết xem b{i viết: https://sites.google.com/site/embedded247/ddcour se/giao-tiep-gpio-tu-userspace-1 Lập trình nhúng ARM-Linux
109
Lập trình giao tiếp gpio sysfs
Demo: Ứng dụng giao tiếp Board mở rộng, điều khiển led đơn, 7 seg, buttons. (Xem b{i thực h{nh)
Lập trình nhúng ARM-Linux
110
55
Thảo luận
Lập trình nhúng ARM-Linux
111
Bài số 5
Lập trình vào ra nâng cao
Lập trình nhúng ARM-Linux
112
56
Mục tiêu bài học số 5
Sau khi kết thúc b{i học n{y, sinh viên có thể • Lập trình giao tiếp chuẩn RS232 trên kit nhúng Micro2440
• Lập trình ghép nối USB Joystick qua cổng USB • Trình b{y cơ chế x}y dựng Device Driver
Lập trình nhúng ARM-Linux
113
Nội dung bài học 5.1. Giới thiệu chuẩn RS232 5.2. Lập trình giao tiếp chuẩn RS232 5.3. Giới thiệu chuẩn USB 5.4. Lập trình giao tiếp USB Joystick 5.5. Lập trình ghép nối ADC 5.6. Giới thiệu cơ chế lập trình Device Driver
Lập trình nhúng ARM-Linux
114
57
5.1. Giới thiệu chuẩn RS232
Mức điện |p đường truyền Chuẩn đầu nối trên m|y tính PC Khuôn dạng khung truyền Tốc độ truyền Kịch bản truyền
Lập trình nhúng ARM-Linux
115
Chuẩn RS232
Mức điện áp đường truyền (Chuẩn RS-232C)
116
Lập trình nhúng ARM-Linux
58
Chuẩn RS232
Chuẩn đấu nối trên PC
UART
UART
UART (Universal Asynchronous receiver/transmitter) 117
Lập trình nhúng ARM-Linux
Chuẩn RS232
Chuẩn đầu nối trên PC • Chân 1 (DCD-Data Carrier Detect): phát hiện tín hiệu mang dữ liệu • Chân 2 (RxD-Receive Data): nhận dữ liệu • Chân 3 (TxD-Transmit Data): truyền dữ liệu • Chân 4 (DTR-Data Terminal Ready): đầu cuối dữ liệu sẵn sàng • Chân 5 (Signal Ground): đất của tín hiệu • Chân 6 (DSR-Data Set Ready): dữ liệu sẵn sàng • Chân 7 (RTS-Request To Send): yêu cầu gửi • Chân 8 (CTS-Clear To Send): Xóa để gửi • Chân 9 (RI-Ring Indicate): báo chuông
118
Lập trình nhúng ARM-Linux
59
Chuẩn RS232
Khuôn dạng khung truyền • PC truyền nhận dữ liệu qua cổng nối tiếp RS-232 thực hiện theo kiểu không đồng bộ (Asynchronous) • Khung truyền gồm 4 thành phần 1
Start bit (Mức logic 0): bắt đầu một gói tin, đồng bộ xung nhịp clock giữa DTE và DCE Data (5,6,7,8 bit): dữ liệu cần truyền 1 parity bit (chẵn (even), lẻ (odd), mark, space): bit cho phép kiểm tra lỗi Stop bit (1 hoặc 2 bit): kết thúc một gói tin
119
Lập trình nhúng ARM-Linux
Chuẩn RS232
Kịch bản truyền • Không có bắt tay (none-handshaking): máy thu có khả năng đọc các ký tự thu trước khi máy phát truyền ký tự tiếp theo
Kết nối không cần bắt tay giữa hai thiết bị (cùng mức điện áp) 120
Lập trình nhúng ARM-Linux
60
Chuẩn RS232
Kịch bản truyền
Ghép nối không bắt tay giữa hai thiết bị (Khác nhau về mức điện áp)
121
Lập trình nhúng ARM-Linux
5.2. Lập trình giao tiếp chuẩn RS232
Các bước cơ bản gồm: • • • • •
Khởi tạo: Khai b|o thư viện Bước 1: Mở cổng Bước 2: Thiết lập tham số cấu hình cổng COM Bước 3: Đọc, ghi cổng (gửi/nhận dữ liệu) Bước 4: Đóng cổng
Lập trình nhúng ARM-Linux
122
61
Khai báo thư viện
#include #include #include #include // UNIX standard function #include // File control definitions #include // Error number definitions #include // POSIX terminal control #include // time calls
Lập trình nhúng ARM-Linux
123
Bước 1: Mở cổng
Sử dụng lệnh mở file
int fd = open ("/dev/ttySAC0", O_RDWR);
fd >0 nếu mở file th{nh công fd<0 nếu mở file thất bại
Lập trình nhúng ARM-Linux
124
62
Bước 2: Thiết lập tham số
Sử dụng cấu trúc termios
struct termios port_settings;
Thiết lập 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); Lập trình nhúng ARM-Linux
125
Bước 3: Đọc, ghi cổng
Đọc cổng: sử dụng lệnh đọc file n=read(fd,&result,sizeof(result));
N: số ký tự đọc được Result: chứa kết quả
Ghi cổng: sử dụng lệnh 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 công)
Lập trình nhúng ARM-Linux
126
63
Bước 4: Đóng cổng
Đóng cổng: sử dụng lệnh đóng file close (fd);
Fd: file ID (có được từ thao t|c mở file th{nh công)
Lập trình nhúng ARM-Linux
127
Demo Lập trình nhúng ARM-Linux
128
64
5.3. Giới thiệu chuẩn USB
Năm 1995: USB 1.0 • Tốc độ Low-Speed: 1.5 Mbps • Tốc độ tối đa (Full-Speed): 12 Mbps
Năm 1998: USB 1.1 (Sửa lỗi của USB 1.0) • Tốc độ tối đa (Full-Speed): 12 Mbps
Năm 2001: USB 2.0 • Tốc độ tối đa (High-Speed): 480 Mbps
Năm 2008: USB 3.0 • Tốc độ tối đa (Super-Speed): 4.8 Gbps
Lập trình nhúng ARM-Linux
129
Tín hiệu chuẩn USB
Tín hiệu
• Truyền kiểu nối tiếp • Tín hiệu trên hai đường D+ và D- là tín hiệu vi sai
Lập trình nhúng ARM-Linux
130
65
Mô hình bus USB
Lập trình nhúng ARM-Linux
131
Vai trò của các thành phần
Vai trò của USB host: • Trao đổi dữ liệu với c|c thiết bị ngoại vi • Điều khiển bus: Quản lý được c|c thiết bị kết nối v{o
đường bus v{ khả năng của mỗi thiết bị đó: sử dụng cơ chế điểm danh (Enumeration)
Ph}n xử, quản lý luồng dữ liệu trên bus, đảm
bảo c|c
thiết bị đều có cơ hội trao đổi dữ liệu
• Kiểm tra lỗi: thêm c|c m~ kiểm tra lỗi v{o gói tin cho phép ph|t hiện lỗi v{ yêu cầu truyền lại gói tin • Cung cấp nguồn điện cho tất cả c|c thiết bị Lập trình nhúng ARM-Linux
132
66
Vai trò của các thành phần
Vai trò của thiết bị ngoại vi • Trao đổi dữ liệu với host • Ph|t hiện c|c gói tin hay yêu cầu (request) được gửi tới thiết bị để xử lý phù hợp • Kiểm tra lỗi: tương tự như Host, c|c thiết bị ngoại vi cũng phải chèn thêm c|c bit kiểm tra lỗi v{o gói tin gửi đi • Quản lý nguồn điện: c|c thiết bị có thể sử dụng nguồn điện ngo{i hay nguồn từ bus. Nếu sử dụng nguồn từ bus, thường có chế độ tiết kiệm điện năng. Lập trình nhúng ARM-Linux
133
Endpoint & pipes Mỗi qu| trình truyền nhận dữ liệu bao gồm một hay nhiều giao dịch (transactions), mỗi giao dịch gồm một hay nhiều packets -> Để hiểu được c|c giao dịch, c|c packet v{ nội dung của chúng -> cần tìm hiểu hai kh|i niệm Endpoint
và Pipes
Lập trình nhúng ARM-Linux
134
67
Endpoint
Endpoint của thiết bị: • L{ “điểm cuối” trong kênh giao tiếp giữa host v{ usb device.
• Endpoint l{ bộ đệm (gửi, nhận) nằm trên thiết bị. • C|c Endpoint được đ|nh địa chỉ v{ x|c định hướng In Endpoint: bộ đệm gửi (host lấy dữ liệu về) Out Endpoint: bộ đệm nhận (host gửi dữ liệu v{o)
• Tất cả c|c thiết bị đều phải có Endpoint 0, đ}y l{ endpoint mặc định để gửi c|c thông tin điều khiển
Lập trình nhúng ARM-Linux
135
Endpoint
Lập trình nhúng ARM-Linux
136
68
Pipes
Pipes: kết nối Endpoint của thiết bị tới Host • Phải thiết lập pipe trước khi muốn trao đổi dữ liệu • Host thiết lập pipe trong qu| trình điểm danh (Enumeration)
• C|c Pipe sẽ được hủy khi thiết bị ngắt kết nối khỏi bus
• Tất cả c|c thiết bị đều có một đường ống điều khiển (control pipe) mặc định sử dụng Endpoint 0
Lập trình nhúng ARM-Linux
137
Device Classes
C|c thiết bị ngoại vi chuẩn (chuột, m|y in, ổ nhớ flash…) có đặc tính truyền nhận dữ liệu chung -> Hệ điều h{nh có thể cung cấp driver chung cho c|c nhóm, c|c nh{ sản xuất thiết bị không cần viết driver riêng. C|c thiết bị đặc thù riêng: cần có driver từng loại C|c nhóm thiết bị đ~ được định nghĩa • • • • • • •
Audio Communication devices Human interface (HID) IrDA Bridge Mass Storage Cameras and scanners Video Lập trình nhúng ARM-Linux
138
69
Quá trình trao đổi dữ liệu
C|c thiết bị USB có thể trao đổi dữ liệu với Host theo 4 kiểu ho{n to{n kh|c nhau, cụ thể: • Truyền điều khiển (control transfer) • Truyền ngắt (interrupt transfer) • Truyền theo khối (bulk transfer) • Truyền đẳng thời (isochronous transfer)
Lập trình nhúng ARM-Linux
139
Các kiểu truyền
Truyền điều khiển: để điều khiển phần cứng, c|c yêu cầu điều khiển được truyền. Chúng l{m việc với mức ưu tiên cao v{ với khả năng kiểm so|t lỗi tự động. Tốc độ truyền lớn vì có đến 64 byte trong một yêu cầu (request) có thể được truyền. Truyền ngắt: c|c thiết bị, cung cấp một lượng dữ liệu nhỏ, tuần ho{n chẳng hạn như chuột, b{n phím đều sử dụng kiểu truyền n{y. Hệ thống sẽ hỏi theo chu kỳ, chẳng hạn 10ms một lần xem có c|c dữ liệu mới gửi đến. Lập trình nhúng ARM-Linux
140
70
Các kiểu truyền
Truyền theo khối: khi có lượng dữ liệu lớn cần truyền v{ cần kiểm so|t lỗi truyền nhưng lại không có yêu cầu thúc ép về thời gian truyền thì dữ liệu thường được truyền theo khối. VD: m|y in, m|y quét
Truyền đẳng thời: khi có khối lượng dữ liệu lớn với tốc độ dữ liệu đ~ được quy định, ví dụ như card }m thanh. Theo c|ch truyền n{y một gi| trị tốc độ x|c định được duy trì. Việc hiệu chỉnh lỗi không được thực hiện vì những lỗi truyền lẻ tẻ cũng không g}y ảnh hưởng đ|ng kể. Lập trình nhúng ARM-Linux
141
5.4. Lập trình giao tiếp USB Joystick
Lập trình nhúng ARM-Linux
142
71
Cấu trúc JOYINFO trên Windows
Windows định nghĩa cấu trúc JOYINFO để lưu c|c thông tin về tình trạng c|c nút bấm trên Joystick Nút trái, phải Nút lên, xuống Các nút chức năng: 1, 2, 3, 4, L1, L2, R1, R2, Select, Start
Lập trình nhúng ARM-Linux
143
Cấu trúc JOYINFO
wXpos • wXpos=0 -> nút sang tr|i được bấm • wXpos=65535 -> nút sang phải được bấm wYpos • wYpos=0 -> nút lên được bấm • wYpos=65535 -> nút xuống được bấm
wButtons: mỗi bit biểu diễn trạng th|i của một nút chức năng • VD: Button 1 -> bit 0, Button 2 -> bit 1… Lập trình nhúng ARM-Linux
144
72
Cấu trúc js_event trên Linux
Linux định nghĩa cấu trúc js_event để lưu c|c thông tin khi có ph|t sinh sự kiện (khởi tạo thiết bị, người dùng bấm nút chức năng, nút chỉnh hướng) Định nghĩa trong include/linux/joystick.h
Lập trình nhúng ARM-Linux
145
Cấu trúc js_event
Nội dung c|c trường dữ liệu • Time: nh~n thời gian ph|t sinh sự kiện • Value: gi| trị, phụ thuộc v{o nút chức năng hay nút chỉnh hướng Nếu l{ nút chức năng: 0/1 (1: pressed, 0: released) Nếu l{ nút chỉnh hướng: -32768 -> 32767 (Ph}n biệt hướng x, y phụ thuộc v{o gi| trị number=0/1) • Type: loại sự kiện Khởi tạo thiết bị: 0x80 Nút chỉnh hướng: 0x02 Nút chức năng: 0x01 • Number: x|c định nút được nhấn (trường hợp type =1 hoặc x|c định nút chỉnh hướng x, y trong trường hợp type =2) Lập trình nhúng ARM-Linux
146
73
Lập trình kết nối joystick
Mở file thiết bị: joystick_fd = open(JOYSTICK_DEVNAME, O_RDONLY | O_NONBLOCK);
JOYSTICK_DEVNAME: tên của file thiết bị, thường là /dev/input/js0
O_RDONLY O_NONBLOCK: mở file chỉ đọc ở chế độ NONBLOCK
Lập trình nhúng ARM-Linux
147
Lập trình kết nối joystick
Đọc dữ liệu từ thiết bị (khi có phát sinh sự kiện) bytes = read(joystick_fd, jse, sizeof(*jse));
joystick_fd: con trỏ file có được khi mở file jse: biến cấu trúc js_event bytes: Tổng số file đọc được, nếu số n{y bằng kích thước của cấu trúc js_event thì qu| trình đọc th{nh công
Lập trình nhúng ARM-Linux
148
74
Demo Lập trình nhúng ARM-Linux
149
Kết quả demo
C|c sự kiện khi khởi tạo thiết bị
Lập trình nhúng ARM-Linux
150
75
Kết quả demo
C|c sự kiện khi người dùng nhấn c|c nút
Lập trình nhúng ARM-Linux
151
QT Joystick Demo
Lập trình nhúng ARM-Linux
152
76
5.6. Lập trình ghép nối ADC
Giới thiệu ADC Minh họa lập trình ADC
Lập trình nhúng ARM-Linux
153
Giới thiệu ADC
ADC: Analog to Digital Converter • Thông số quan trọng của ADC • Dải điện |p chuyển đổi • ADC 8 bit, 10 bit, 12 bit… • Bao nhiêu kênh? • Độ ph}n ly
Lập trình nhúng ARM-Linux
154
77
Minh họa lập trình ADC
Khai b|o thư viện #include #include #include #include #include #include #include #include #include #include
Lập trình nhúng ARM-Linux
155
Minh họa lập trình 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); }
Lập trình nhúng ARM-Linux
156
78
5.6. Lập trình Device Driver
Giới thiệu về Kernel Module Cơ chế x}y dựng Device Driver
Lập trình nhúng ARM-Linux
157
Kernel Module
Hoạt động trên Kernel Space, có thể truy xuất tới c|c t{i nguyên của hệ thống Kernel Module cho phép thêm mới c|c module một c|ch linh hoạt, tr|nh việc phải biên dịch lại nh}n hệ điều h{nh Kernel Module l{ cơ chế hữu hiệu để ph|t triển c|c device driver
Xem danh s|ch c|c module đang chạy: lsmod
Lập trình nhúng ARM-Linux
158
79
Kernel Module
C|c bước để thêm một kernel module v{o hệ thống • Viết m~ nguồn: chỉ sử dụng c|c thư viện được cung cấp bởi kernel, không sử dụng được c|c thư viện bên ngoài
• Biên dịch m~ nguồn module • C{i đặt module: dùng lệnh insmod Tên_Module.ko
• Gỡ module: dùng lệnh rmmod Tên_Module • Xem c|c thông tin log: sử dụng System Log Viewer Lập trình nhúng ARM-Linux
159
Mã nguồn kernel Module
Lập trình nhúng ARM-Linux
160
80
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
Lập trình nhúng ARM-Linux
161
Device Driver
Thêm c|c device driver theo cơ chế sử dụng Kernel Module
C|c thao t|c thêm driver v{o hệ thống • Viết m~ nguồn (cấu trúc tương tự kernel Module). Đăng ký Major ID • Biên dịch m~ nguồn • C{i đặt sử dụng lệnh insmod • Sử dụng lệnh mknod để tạo device file trong /dev mknod [options] NAME Type [Major Minor ]
Lập trình nhúng ARM-Linux
162
81
Ví dụ: Hello Driver
Lập trình nhúng ARM-Linux
163
Demo Lập trình nhúng ARM-Linux
164
82
Case Study
Lập trình giao tiếp giữa 2 KIT truyền nhận dữ liệu qua USB: • KIT FriendlyArm: là usb host có usb driver • KIT AT91SAM7: là usb device có usb core
Tham khảo: Video, M~ nguồn.
Demo Lập trình nhúng ARM-Linux
165
Thảo luận
Lập trình nhúng ARM-Linux
166
83
Bài số 6
Các kỹ thuật lập trình nâng cao
Lập trình nhúng ARM-Linux
167
Mục tiêu bài học số 6
Sau khi kết thúc b{i học n{y, sinh viên có thể • Nắm được được kh|i kh|i niệm niệm tiến trình trình (process (process), ), cơ chế liên lạc giữa c|c tiến trình, lập trình gửi, nhận tín hiệu giữa 2 tiến trình • Hiểu kh|i niệm luồng (thre (thread) ad) • Lập trình trình ứng ứng dụng dụng đa luồng luồng (multithre (multithread) ad) • Lập trìn trình h socket socket trên trên Linux Linux
Lập trình nhúng ARM-Linux
168
84
Nội dung bài học 6.1. Tiến trình (process ) 6.2. Cơ chế liên lạc giữa gi ữa c|c tiến trình 6.3. Luồng (thread) 6.4. Lập trình ứng dụng đa luồng 6.5. Lập trình socket trên Linux
Lập trình nhúng ARM-Linux
169
6.1. Tiến trình (Process)
Tiến trình (process) được tạo ra khi ta thực thi một chương trình (program (program)) Kỹ thuật lập trình n}ng cao thường sử dụng nhiều tiến trình kết hợp trong một ứng dụng để xử lý nhiều công việc. Ví dụ: Mở nhiều chương trình Word (mỗi cửa sổ soạn thảo nội dung một file kh|c nhau), mỗi thể hiện (instance) l{ một tiến trình (process)
Lập trình nhúng ARM-Linux
170
85
Số hiệu tiến trình
Làm thế nào để phân biệt các tiến trình ?
Mỗi tiến trình được x|c định bởi số hiệu (định danh): • PID (Proce (Process ss ID): ID): số hiệu hiệu tiến tiến trình trình • PPID (Pare (Parent nt Process ID): số số hiệu tiến tiến trình trình cha • Có ki kiểu ểu dữ liệ liệu u pid_t (thư viện sys/types.h)
Lập trình nhúng ARM-Linux
171
PID, PPID Lập trình C/C++ cung cấp hàm hệ thống để: Lấy về PID: sử dụng hàm getpid() Lấy về PPID: sử dụng hàm getppid() Hàm getpid() và getppid() trả giá trị kiểu pid_t (bản chất là kiểu int)
Lập trình nhúng ARM-Linux
172
86
Xem tiến trình đang chạy
Lệnh Linux: ps Xem nhiều thông tin hơn:
ps -e -o pid,ppid,command Trong đó: -e để xem tất cả tiến trình -o pid,ppid,command để xem c|c thông tin tương ứng: pid, ppid v{ command (lệnh để thực thi tiến trình)
Lập trình nhúng ARM-Linux
173
Dừng tiến trình
Có thể dừng một tiến trình đang chạy bằng lệnh kill với tham số l{ số hiệu tiến trình muốn dừng. Lệnh kill mặc định gửi tới tiến trình tiến hiệu SIGTERM để yêu cầu kết thúc.
kill PID Có thể sử dụng tổ hợp phím tắt Ctrl+C để dừng tiến trình (bản chất cũng gửi tín hiệu terminate)
Lập trình nhúng ARM-Linux
174
87
Tạo tiến trình mới
Cách 1: sử dụng h{m system
H{m system() trong C cung cấp c|ch để thực thi một c}u lệnh hệ thống trong chương trình C (như l{ được thực thi từ dòng lệnh). H{m trả về trạng th|i kết thúc của lệnh.
Lập trình nhúng ARM-Linux
175
Tạo tiến trình mới
Cách 2: sử dụng h{m fork v{ exec (trên linux, thư
viện unistd.h)
Lập trình nhúng ARM-Linux
176
88
6.2. Cơ chế liên lạc giữa các tiến trình
Làm thế nào để các tiến trình có thể liên lạc (giao tiếp) với nhau ?
Signal l{ cơ chế cho phép giao tiếp giữa c|c tiến trình
Signal l{ cơ chế không đồng bộ Khi tiến trình nhận được signal, tiến trình phải xử lý signal ngay lập tức Linux hỗ trợ 32 SIGNAL
Lập trình nhúng ARM-Linux
177
Danh sách signal thường dùng Kiểu SIGNAL
Lý do gửi SIGNAL
SIGHUP
Báo cho chương trình khi thoát khỏi terminal
SIGINT
Khi người dùng nhấn Ctrl + C để tắt chương trình
SIGILL
Khi chương trình chạy lệnh không hợp lệ
SIGABRT
Khi chương trình nhận được lệnh abort
SIGKILL
Khi chương trình nhận được lệnh kill (đóng chương trình)
SIGUSR1
Tùy biến theo ứng dụng
SIGUSR2
Tùy biến theo chương trình
Lập trình nhúng ARM-Linux
178
89
Gửi SIGNAL tới process
Cách 1: sử dụng shell command kill [-SIGNAL_TYPE] PID
Cách 2: sử dụng h{m kill trong chương trình C, cho
phép process n{y gửi signal tới process kh|c kill(PID, SIGNAL_TYPE)
Vấn đề: Cơ chế xử lý signal gửi đến tiến trình ? (Sử dụng cấu trúc sigaction) Lập trình nhúng ARM-Linux
179
6.3. Giới thiệu về luồng (thread)
Luồng (thread) cơ chế cho phép chương trình thực hiện nhiều công việc song song Luồng phải nằm trong một tiến trình (process) Có thể liên hệ process l{ con đường (từ A ->B), còn luồng l{ c|c l{n đường kh|c nhau. Một chương trình có thể được lập trình sử dụng kỹ thuật đa luồng (multithread) để cho phép l{m được nhiều công việc đồng thời.
Lập trình nhúng ARM-Linux
180
90
6.3. Giới thiệu về luồng (thread)
Một chương trình mặc định chạy một luồng -> luồng chính Luồng chính có thể tạo ra c|c luồng kh|c, c|c luồng sẽ chạy đồng thời -> tăng tốc chương trình C|c luồng chia sẻ không gian nhớ, truy xuất file v{ các tài nguyên khác. Tham số của một luồng: thread ID: số hiệu luồng (kiểu dữ liệu pthread_t)
Lập trình nhúng ARM-Linux
181
6.4. Lập trình xử lý đa luồng
Tạo luồng Truyền tham số cho luồng Nhận gi| trị trả về từ luồng Tắt luồng
Lập trình nhúng ARM-Linux
182
91
Tạo luồng
Khai b|o thư viện: pthread.h
H{m tạo luồng: pthread_create
thread: attr:
thread id
các thuộc tính của luồng, mặc định để NULL
start_routine: arg:
hàm thực thi trong luồng
các tham số truyền cho luồng
Biên dịch chương trình: gcc –o multithread multithread.c -pthread Lập trình nhúng ARM-Linux
183
Mã nguồn tạo luồng
Lập trình nhúng ARM-Linux
184
92
Truyền tham số cho luồng
Khai báo cấu trúc dữ liệu chứa dữ liệu cần truyền cho luồng. Ví dụ: struct arg { //Ky tu can in char character; //So lan can in int count; };
Truyền dữ liệu cho luồng khi tạo luồng qua tham số arg
Chương trình con thực thi luồng nhận tham số về và xử lý Lập trình nhúng ARM-Linux
185
Mã nguồn truyền tham số cho luồng
Lập trình nhúng ARM-Linux
186
93
Tắt luồng
Sử dụng h{m pthread_cancel:
thread: nhận tham số thread id của luồng
muốn tắt
Lập trình nhúng ARM-Linux
187
Mã nguồn tắt luồng
Lập trình nhúng ARM-Linux
188
94
Case study
B{i 1: Lập trình chương trình đa luồng tạo c|c hiệu ứng led + đọc trạng th|i nút bấm để thay đổi hiệu ứng, tăng tốc. B{i 2: Lập trình chương trình đa luồng giao tiếp RS232
Lập trình nhúng ARM-Linux
189
6.5. Lập trình Socket trên Linux
Giới thiệu lập trình socket Mô hình lập trình Minh họa
Lập trình nhúng ARM-Linux
190
95
Giới thiệu lập trình socket
Socket: Kết nối đầu cuối giữa 2 tiến trình/2 m|y qua mạng (mô hình client/server) Tiến trình client kết nối đến tiến trình server yêu cầu trao đổi dữ liệu Client cần biết về địa chỉ v{ sự tồn tại của server, trong khi server không cần biết về client cho đến khi nó được kết nối đến. Mỗi khi thiết lập kết nối, cả 2 bên có thể gửi v{ nhận dữ liệu Liên hệ như kết nối trong một cuộc gọi điện thoại Lập trình nhúng ARM-Linux
191
Giới thiệu lập trình socket
C|c hệ thống (Windows, Linux, …) đều cung cấp c|c h{m hệ thống lập trình socket Có 2 loại socket sử dụng rộng r~i: • Stream socket • Datagram socket
Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), l{ giao thức hướng luồng (stream oriented).
Datagram sockets: Dựa trên giao thức UDP (User Datagram Protocol), l{ giao thức hướng thông điệp (message oriented) Lập trình nhúng ARM-Linux
192
96
Mô hình lập trình socket
Mô hình lập trình socket TCP giữa 2 tiến trình client/server
Lập trình nhúng ARM-Linux
193
Chương trình minh họa
2 tiến trình (M~ nguồn tham khảo): • server.c • client.c
Biên dịch v{ chạy 2 chương trình n{y (trên cùng một m|y local host, hoặc 2 m|y riêng biệt kết nối mạng)
Lập trình nhúng ARM-Linux
194
97
Demo
Lập trình giao tiếp socket giữa KIT micro 2440 v{ PC
Demo Lập trình nhúng ARM-Linux
195
Thảo luận
Lập trình nhúng ARM-Linux
196
98
Bài số 7
Lập trình nền tảng QT
Lập trình nhúng ARM-Linux
197
Mục tiêu bài học số 7
Sau khi kết thúc b{i học n{y, sinh viên có thể • Nắm được c|c vấn đề cơ bản, đặc trưng của nền tảng Qt • C{i đặt Qt Creator (Qt SDK) trên m|y ph|t triển (Ubuntu)
• L{m quen với lập trình ứng dụng giao diện đồ họa sử dụng nền tảng Qt • C{i đặt Qt Everywhere để ph|t triển ứng dụng cho nền tảng Arm Embedded Linux
Lập trình nhúng ARM-Linux
198
99
Nội dung bài học 7.1. Giới thiệu QT 7.2. C{i đặt môi trường ph|t triển Qt 7.3. L{m quen với lập trình QT 7.4. C{i đặt Qt Everywhere (Qt Embedded)
Lập trình nhúng ARM-Linux
199
7.1. Giới thiệu Qt
Qt Development Frameworks được s|ng lập năm 1994 bởi TrollTech 2008: TrollTech s|p nhập v{o Nokia Qt l{ một Framework ph|t triển ứng dụng đa nền tảng (desktop, mobile, embedded).
Hỗ trợ c|c nền tảng: Windows, Linux, Embedded Linux, Win CE, Symbian, Maemo…
Lập trình nhúng ARM-Linux
200
100
Giới thiệu QT
Qt cho phép viết ứng dụng một lần v{ biên dịch chéo trên nhiều nền tảng hệ điều h{nh khác nhau mà không
phải viết lại m~. Tuy nhiên, m~ nguồn cần được biên dịch trên nền tảng m{ muốn ứng dụng được thực thi. Lập trình Qt theo chuẩn C++.
Lập trình nhúng ARM-Linux
201
Giới thiệu QT
Qt Framework bao gồm:
• a cross-platform class library (Thư viện c|c lớp hướng đối tượng) • integrated development tools (C|c công cụ ph|t triển tích hợp) • a cross-platform IDE. (Môi trường ph|t triển ứng dụng) Tham khảo: qt.nokia.com; qtcentre.org
Lập trình nhúng ARM-Linux
202
101
QT được sử dụng rộng rãi
Lập trình nhúng ARM-Linux
203
Kiến trúc Qt
Lập trình nhúng ARM-Linux
204
102
7.2. Cài đặt Qt SDK
C{i đặt Qt SDK trên m|y ph|t triển ( Linux, Windows, MacOS)
File c{i đặt
qt-sdk-linux-x86-opensource-2010.05.1.bin (http://qt.nokia.com/downloads)
Thực thi file c{i đặt:
$ ./qt-sdk-linux-x86-opensource-2010.05.1.bin
Đợi qu| trình c{i đặt diễn ra th{nh công, mặc định thư mục c{i đặt chứa tại $HOME/qtsdk-2010.01/qt/bin Lập trình nhúng ARM-Linux
205
Cài đặt Qt SDK
Sau khi c{i đặt xong Qt SDK, công cụ Qt Creator cho phép ph|t triển ứng dụng với lựa chọn mặc định biên dịch trên m|y tính Linux. Để biên dịch chéo ứng dụng thực thi trên KIT FriendlyArm (Embedded Linux) cần c{i đặt Qt Everywhere
Lập trình nhúng ARM-Linux
206
103
7.3. Làm quen với lập trình QT
Sử dụng môi trường ph|t triển Qt Creator (IDE) Chương trình HelloQt Cơ chế Signals/Slot
Lập trình nhúng ARM-Linux
207
Môi trường phát triển Qt Creator IDE
Lập trình nhúng ARM-Linux
208
104
Các thành phần Qt Creator
Lập trình nhúng ARM-Linux
209
Các điều khiển (widgets) cơ bản
QLabel QPushButton QLineEdit QTextEdit QSpinBox QComboBox Qslider
V.v…
Lập trình nhúng ARM-Linux
210
105
Chương trình HelloQt
Tạo project HelloQt Trong file main.c bổ sung đoạn m~: Biên dịch, chạy chương trình:
#include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); return app.exec(); }
Lập trình nhúng ARM-Linux
211
Chương trình HelloQt
Giải thích ? Sửa đoạn m~ với HTML style
#include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); //QLabel *label = new QLabel("Hello Qt!"); QLabel *label = new QLabel("Hello " "Qt!
"); label->show(); return app.exec(); }
Lập trình nhúng ARM-Linux
212
106
Cơ chế signals - slot
Cơ chế event – handler Xử lý c|c sự kiện (sự kiện tương t|c người dùng, sự kiện của hệ thống) Cho phép tạo c|c kết nối (connections) giữa sự kiện (signals) với h{m xử lý (slot) Có 2 c|ch tạo: • Tạo tự động (wizard) • Tạo bằng tay (manual, hand-code)
Lập trình nhúng ARM-Linux
213
Minh họa cơ chế signals/slot
Tạo bằng code (dùng phương thức Qobject::connect)
Lập trình nhúng ARM-Linux
214
107
Minh họa cơ chế Signals/Slot
Tạo bằng code
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
Trong đó: sender, receiver l{ con trỏ Qobjects, signal v{ slot l{ c|c tên h{m không có tham số. • Các macro SIGNAL() và SLOT() biến đổi tham số thành string.
VD: đồng bộ giữa 2 điều khiển slider v{ spinBox
Lập trình nhúng ARM-Linux
215
Minh họa cơ chế Signals/Slot
Tạo tự động (wizard): chuột phải v{o đối tượng muốn xử lý sự kiện, chọn Go to slot, tìm slot l{ h{m xử lý sự kiện tương ứng muốn dùng. Ví dụ xử lý sự kiện nút bấm (QPushButton)
Lập trình nhúng ARM-Linux
216
108
Qt Documentations
Documentation in Qt Assistant (or QtCreator)
Qt’s examples
Qt developer network: • http://developer.qt.nokia.com/ Qt Center Forum: • http://www.qtcentre.org
Lập trình nhúng ARM-Linux
217
Lập trình hướng đối tượng C++
Đối tượng (Objects) v{ Lớp (Class): • Khai b|o lớp, đối tượng, kế thừa, gọi c|c phương thức, … • Sử dụng đối tượng kiểu stack/heap.
Tính đa hình (Polymorphism): virtual methods Tính cộng t|c (Colloborations)
Lập trình nhúng ARM-Linux
218
109
7.4. Cài đặt Qt Everywhere Bước 1: Cài đặt QT Embedded (QT Everywhere) (Xem hướng dẫn chi tiết kèm theo) Bước 2: Copy các file thư viện cần thiết xuống KIT
• 3 thư viện quan trọng (VD: copy xuống thư mục /opt/qte/lib) libQtCore.so.4 libQtGui.so.4 libQtNetwork.so.4
• Copy các fonts vào thư mục /opt/qte/lib/fonts Bước 3: Chỉnh file cấu hình /etc/init.d/rcS, tắt Qtopia để tránh tranh chấp Lập trình nhúng ARM-Linux
219
Cấu hình trình dịch Qmake cho Kit
Bước 4: Tạo cấu hình biên dịch cho Mini2440, trỏ tới Qmake đ~ biên dịch được ở trên
Lập trình nhúng ARM-Linux
220
110
Cấu hình trình dịch Qmake cho Kit
Bước 5: Dịch chương trình QT cho KIT • Chọn đúng bộ biên dịch Qmake cho QT Embedded
Lập trình nhúng ARM-Linux
221
Thảo luận
Lập trình nhúng ARM-Linux
222
111
Bài số 8
Lập trình Qt nâng cao
Lập trình nhúng ARM-Linux
223
Mục tiêu bài học số 8
Sau khi kết thúc b{i học n{y, học viên có thể • X}y dựng ứng dụng giao diện, sử dụng c|c điều khiển (widgets) • Sử dụng kỹ thuật quản lý layout để sắp xếp c|c điều khiển trên form • Cơ chế xử lý sự kiện (signal/slot) • Lập trình mạng với Qt
Lập trình nhúng ARM-Linux
224
112
Nội dung bài học 8.1. Quản lý layout trong ứng dụng Qt 8.2. Thư viện lập trình mạng trên Qt 8.3. Lập trình ứng dụng ChatRoom 8.4. Lập trình ứng dụng gửi/nhận ảnh qua socket
Lập trình nhúng ARM-Linux
225
8.1. Quản lý layout trong ứng dụng Qt
Kỹ thuật layout : Cho phép sắp xếp c|c điều khiển (widgets) trên một form. Kích thước v{ vị trí sẽ thay đổi linh hoạt khi form thay đổi kích thước. Có c|c kiểu lay out: • • • •
Horizontal lay out Vertical lay out Grid lay out Form lay out
Lập trình nhúng ARM-Linux
226
113
Chương trình TextFin TextFinder der
X}y dựng ứng dụng TextFinder
Lập trình nhúng ARM-Linux
227
8.2. Thư viện lập trình mạng trên Qt
QtNetwork • QTcpSocket • QUdpSocket • QTcpServer • QFtp: l{m l{m việc việc với giao thức thức truyền truyền file FTP FTP • QHttp QHttp:: l{m l{m việc việc với với giao thức Http (Xem Qt documentation)
Lập trình nhúng ARM-Linux
228
114
8.3. Chương trình ChatRoom
Lập trình nhúng ARM-Linux
229
8.4. Chương trình gửi/nhận ảnh
Lập trình socket client/server Sử dụng lớp QImage
Lập trình nhúng ARM-Linux
230
115
Thảo luận
Lập trình nhúng ARM-Linux
231
Phụ lục A – Các lệnh Linux Lệnh hiển thị thông tin c|c file trong thư mục ls –al //hiển thị danh s|ch với đầy đủ thông tin Lệnh thay đổi quyền cho một file hay thư mục
chmod
vd: chmod +x Filename //Cấp thêm quyền thực thi
Lệnh để xem danh s|ch c|c file thiết bị ls –al /dev Lệnh để xem tất cả c|c tiến trình đang chạy ps Lập trình nhúng ARM-Linux
232
116