Đại Học Quốc Gia Tp. Hồ Chí Minh
TRƯỜNG ĐẠI HỌC BÁCH KHOA
-----------------------
NGUYỄN VĂN THANH
XÂY DỰNG
“ARM-BASED APPLICATION BUILDER”
TRÊN KIT AT91SAM7S EVALUATION
BOARD
Chuyên ngành: KỸ THUẬT ĐIỆN TỬ
LUẬN VĂN THẠC SĨ
TP. HỒ CHÍ MINH , tháng 12 năm 2009
CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI
TRƯỜNG ĐẠI HỌC BÁCH KHOA
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Cán bộ hướng dẫn khoa học: 1. TS. PHAN HỒNG PHƯƠNG
2. GVC. Th.S HỒ TRUNG MỸ
Cán bộ chấm nhận xét 1:
PGS. TS LÊ TIẾN THƯỜNG
Cán bộ chấm nhận xét 2:
TS LƯU THANH TRÀ
Luận văn thạc sĩ được bảo vệ tại HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC
SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày 30 tháng 12 năm 2009.
TRƯỜNG ĐẠI HỌC BÁCH KHOA
PHÒNG ĐÀO TẠO SĐH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
ĐỘC LẬP - TỰ DO - HẠNH PHÚC
Tp.HCM, ngày
tháng
năm 2009
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ và tên học viên: NGUYỄN VĂN THANH
Phái: Nam
Ngày, tháng, năm sinh: 25 / 02 / 1971
Nơi sinh: Bến Tre
Chuyên ngành: Kỹ thuật Điện tử
MSHV: 01407729
I - TÊN ĐỀ TÀI: XÂY DỰNG “ARM-BASED APPLICATION BUILDER”
TRÊN KIT AT91SAM7S EVALUATION BOARD
II - NHIỆM VỤ VÀ NỘI DUNG:
1. Tìm hiểu kỹ thuật lập trình tự động sinh mã cho hệ thống nhúng thời gian thực.
2. Tìm hiểu phương pháp thiết kế một chương trình biên dịch.
3. Tìm hiểu hệ vi điều khiển họ AT91SAM7S và kỹ thuật lập trình nhúng ARM.
4. Xây dựng chương trình biên dịch từ file dạng text sang file C.
5. Xây dựng trình tạo ứng dụng cho vi điều khiển Atmel AT91SAM7S256
_“ARM_based application builder”_ trên kit AT91SAM7S Evaluation Board.
6. Thực nghiệm chương trình trên kit AT91SAM7S Evaluation Board.
III - NGÀY GIAO NHIỆM VỤ:
02/02/2009
IV - NGÀY HOÀN THÀNH NHIỆM VỤ:
14/12/2009
V - CÁN BỘ HƯỚNG DẪN:
TS. PHAN HỒNG PHƯƠNG
GVC. Th.S HỒ TRUNG MỸ
Nội dung và đề cương Luận văn thạc sĩ đã được Hội Đồng Chuyên Ngành thông qua.
CÁN BỘ HƯỚNG DẪN
CHỦ NHIỆM BỘ MÔN
QUẢN LÝ CHUYÊN NGÀNH
KHOA QL CHUYÊN NGÀNH
ABSTRACT
Embedded real-time systems is a real-world application domain where
advanced software developing processes are already generative. Therefore, it is a
source of experience and also of additional technological requirements that are
mostly concerned at the moment.
This thesis focuses on the design and implementation of an ARM_based
application builder over PNLab AT91SAM7S Evaluation Board kit. The design
develops a new generative programming technique for real-time embedded system
using Atmel AT91SAM7S256 microchips. This program involves a set of
automatically generated code, aiming to create a target code from some source code
after programmer’s domain specific languages (DSL) implementation. As deploying
the construction of PNLab AT91SAM7S Evaluation Board, a domain-specific
language is used to describe an application system in a netlist form. As a result, an
automatic code transforms this abstract system description into final executable
code. After the validation process, an application file in binary form is generated.
TÓM TẮT
Hệ thống nhúng thời gian thực là một lĩnh vực ứng dụng thế giới thực, nơi quy
trình phát triển các phần mềm tiên tiến đã được tự sinh ra. Vì thế, nó vừa là mã
nguồn thí nghiệm và cũng là nhu cầu công nghệ bổ sung đang được quan tâm phổ
biến hiện nay.
Luận văn này tập trung thiết kế và thực thi một chương trình tạo ứng dụng cho
vi điều khiển ARM được phát triển trên kít PNLab AT91SAM7S Evaluation Board.
Thiết kế này đã phát triển một kỹ thuật lập trình tự động sinh mã mới cho hệ thống
nhúng sử dụng vi điều khiển AT91SAM7S256 của hãng Atmel. Chương trình bao
gồm một bộ tạo mã tự động nhằm tạo ra mã đích từ mã nguồn được người lập trình
viết ở cấp cao hơn bằng một ngôn ngữ đặc biệt. Khi lập trình ứng dụng trên kít phát
triển PNLab AT91SAM7S Evaluation Board, một ngôn ngữ đặc biệt được dùng để
mô tả hệ thống ứng dụng dưới dạng netlist, một bộ tạo mã tự động sẽ biến đổi sự
mô tả hệ thống trừu tượng đó thành mã thực thi sau cùng. Sau khi quá trình xử lý
thành công, một file dạng mã nhị phân của chương trình ứng dụng sẽ được sinh ra.
ii
MỤC LỤC
Trang
LỜI CẢM ƠN .............................................................................................................. i
MỤC LỤC................................................................................................................... ii
DANH MỤC CÁC HÌNH VẼ VÀ BẢNG BIỂU ..................................................... vii
CHƯƠNG I: GIỚI THIỆU......................................................................................... 1
CHƯƠNG II: VI ĐIỀU KHIỂN AT91SAM7S256 VÀ KIT PHÁT TRIỂN
PNLab AT91SAM7S_EB ......................................................................................... 8
2.1 Sự vượt trội của công nghệ ARM ........................................................................ 8
2.1.1 Những lợi thế khi sử dụng ARM ................................................................ 8
2.1.2 Những ưu điểm kỹ thuật hiện nay của ARM ............................................. 9
2.1.3 Lợi ích các sản phẩm ARM của Atmel ...................................................... 9
2.2 Vi điều khiển ARM AT91SAM7S256................................................................. 11
2.2.1 Các tính năng chủ yếu của AT91SAM7S256 ............................................. 11
2.2.2 Mô tả về vi điều khiển AT91SAM7S256 ................................................... 12
2.2.3 Mô tả tín hiệu trong vi điều khiển AT91SAM7S256 ................................. 15
2.2.4 Các đường điều khiển vào/ra trong vi điều khiển AT91SAM7S256.......... 18
2.2.5 Bộ nhớ của vi điều khiển AT91SAM7S256 ............................................... 20
2.2.5.1 Phân vùng bộ nhớ trong AT91SAM7S256....................................... 20
2.2.5.2 Flash nhúng trong AT91SAM7S256 ................................................ 20
2.2.5.3 Giao diện lập trình Flash nhanh trong AT91SAM7S256 ................. 22
2.2.6 Các thiết bị ngoại vi của AT91SAM7S256 ................................................ 23
2.2.6.1 Các đường PIO để điều khiển thiết bị ngoại vi................................ 23
2.2.6.2 Định danh của thiết bị ngoại vi ........................................................ 23
2.3 Kit phát triển PNLab AT91SAM7S Evaluation Board........................................ 26
iii
2.3.1 Mô tả kit phát triển PNLab AT91SAM7S Evaluation Board ..................... 26
2.3.2 Đặc tả phần cứng ......................................................................................... 27
2.3.3 Các Jumper và thiết lập ................................................................................ 27
2.3.4 Hướng dẫn sử dụng phần mềm SAM-BA.................................................... 28
CHƯƠNG III: KỸ THUẬT LẬP TRÌNH NHÚNG ARM ....................................... 30
3.1 Môi trường phát triển hệ thống nhúng sử dụng ARM ........................................ 30
3.1.1 Môi trường phát triển chéo .......................................................................... 30
3.1.1.1 JTAG Based ICD ............................................................................... 30
3.1.1.2 Phần mềm gỡ rối .................................................................................. 30
3.1.1.3 Thiết bị mô phỏng CPU ICE ( In Circuit Emulator )............................ 31
3.1.2 Bộ mô phỏng phần mềm ............................................................................. 31
3.1.3 Board phát triển ........................................................................................... 31
3.1.4 Hệ điều hành nhúng ..................................................................................... 31
3.2 Phần mềm hệ thống nhúng................................................................................... 32
3.2.1 Các thành phần của một phần mềm nhúng .................................................. 32
3.2.2 Mã khởi tạo (Boot)....................................................................................... 32
3.2.3 Hệ điều hành nhúng ..................................................................................... 32
3.2.4 Ứng dụng phần mềm nhúng......................................................................... 34
3.3 Lập trình ứng dụng với vi điều khiển AT91SAM7S256 ..................................... 34
3.3.1 Các thiết bị ngoại vi của AT91SAM7S256 ................................................ 34
3.3.2 Các phần mềm bổ sung ............................................................................... 35
3.3.2.1 Phần mềm C-Startup ............................................................................ 35
3.3.2.2 Sử dụng thiết bị ngoại vi ...................................................................... 40
3.3.2.3 Sử dụng bộ điều khiển ngắt AIC......................................................... 40
3.3.2.4 Sử dụng bộ Timer Counter.................................................................. 42
3.4 Công cụ phát triển ARM ..................................................................................... 43
3.4.1 Chương trình biên dịch ARM C.................................................................. 43
iv
3.4.2 Chương trình dịch hợp ngữ_ARM assembler.............................................. 44
3.4.3 Chương trình liên kết ( linker) ..................................................................... 45
3.4.4 Phần mềm ARMsd ....................................................................................... 45
3.5 Công cụ AT91 ISP/SAM-BA .............................................................................. 46
3.5.1 Lĩnh vực sử dụng SAM-BA......................................................................... 46
3.5.2 Đặc tính của phần mềm SAM-BA ............................................................... 46
3.5.3 Lập trình Flash dùng SAM-BA.................................................................... 47
CHƯƠNG IV: KỸ THUẬT LẬP TRÌNH TỰ ĐỘNG SINH MÃ
TRONG HỆ THỐNG NHÚNG THỜI GIAN THỰC ............................................... 48
4.1 Giới thiệu về kỹ thuật lập trình sinh mã tự động ................................................. 48
4.2 Phát triển phần mềm tự sinh mã cho hệ thống nhúng.......................................... 51
4.3. Bài học kinh nghiệm, ứng dụng và hướng phát triển kỹ thuật
lập trình tự sinh mã..................................................................................................... 54
4.4. Phương án thiết kế bộ sinh mã tự động mới cho AT91SAM7S256 ................... 56
CHƯƠNG V: XÂY DỰNG CHƯƠNG TRÌNH TẠO ỨNG DỤNG
“ARM_BASED APPLICATION BUILDER” .......................................................... 57
5.1 Tổng quan về quá trình thiết kế chương trình...................................................... 57
5.1.1 Các bước xây dựng chương trình................................................................. 57
5.1.2 Xây dựng giao diện lập trình ....................................................................... 59
5.1.3 Định dạng Mã nguồn ................................................................................... 60
5.1.4 Xây dựng chương trình biên dịch ............................................................... 63
5.2 Giải thuật và chương trình ................................................................................... 64
5.2.1 Bộ phân tích từ vựng từ mã nguồn .............................................................. 64
5.2.2 Bộ phân tích cú pháp.................................................................................... 66
5.2.2.1 Giải thuật xây dựng bộ phân tích cú pháp ........................................... 66
5.2.2.2. Giải thuật kiểm tra các entity .............................................................. 71
5.2.2.3. Giải thuật kiểm tra các Funct .............................................................. 74
v
5.2.3 Giải thuật xây dựng bộ tạo mã C ................................................................ 76
5.2.4 Giải thuật xây dựng trình liên kết sinh mã BIN.......................................... 79
5.2.4.1 Tạo file arm_out.axf và arm_out.tex .................................................. 79
5.2.4.2 Hiển thị file arm_out.tex ..................................................................... 80
5.2.4.3 Biên dịch file arm_out.axf thành file arm_out.bin............................... 81
5.3 Nạp chương trình vào vi điều khiển .................................................................... 82
5.4 Chương trình xóa file arm_out.c ........................................................................ 83
5.5 Biên soạn chương trình ........................................................................................ 84
CHƯƠNG VI: KẾT QUẢ THỰC NGHIỆM ........................................................... 85
6.1. Giới thiệu về chương trình .................................................................................. 85
6.1.1. Nhập chương trình ứng dụng từ người lập trình ......................................... 85
6.1.2. Thực hiện một chương trình ứng dụng ....................................................... 87
6.1.2.1 Thông báo lỗi cú pháp của file nguồn....................................................... 87
6.1.2.2. Thông báo file arm_out.c đã được tạo ..................................................... 92
6.1.2.3. Thông báo file arm_out.bin đã được tạo.................................................. 92
6.2 Phương pháp mô tả các sub-circuit ...................................................................... 93
6.2.1 AND, NAND, OR, NOR, XNOR, XOR...................................................... 93
6.2.2 NOT............................................................................................................. 94
6.2.3 DFF ( Flip_Flop D) ...................................................................................... 94
6.2.4 JKFF (Flip_Flop JK).................................................................................... 95
6.2.5 COUNTER (Bộ đếm lên/xuống 10 bit ) ...................................................... 95
6.2.6 CONTSTEPMOTOR (Bộ điều khiển động cơ bước đơn cực) ................... 96
6.2.7 ADC (Bộ biến đổi Analog-to-Digital 10 bit ) .............................................. 97
6.2.8 DELAY1 (Bộ trì hoãn 1 giây)..................................................................... 98
6.2.9 DELAY60 (Bộ trì hoãn 60 giây)................................................................. 98
6.2.10 TIMER (Bộ định thời) .............................................................................. 98
6.3 Chuẩn bị phần mềm ............................................................................................. 99
vi
6.4 Chuẩn bị phần cứng ............................................................................................. 99
6.5 Các bước thực thi một chương trình ứng dụng .................................................... 99
6.6 Ví dụ: Lập trình điều khiển việc đóng/ mở cửa của một garage.......................... 104
6.6.1 Mô tả ứng dụng ............................................................................................ 104
6.6.2 Xây dựng chương trình điều khiển cửa garage ............................................ 105
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ................................................................. 109
TÀI LIỆU THAM KHẢO.......................................................................................... 111
PHỤ LỤC .................................................................................................................. 113
Phụ lục A: Chương trình tạo dự án ARM trên MFC AppWizard(exe) ................ 113
Phụ lục B: Chương trình tạo dự án ARM2CC ...................................................... 113
Phụ lục C: File logic.h.......................................................................................... 114
Phụ lục D: File init_extint .................................................................................... 127
Phụ lục E: File IRQ1.s ........................................................................................ 128
Phụ lục F: File init_timer.c .................................................................................. 128
Phụ lục G: File Board.h ....................................................................................... 129
vii
DANH MỤC CÁC HÌNH VẼ VÀ BẢNG BIỂU
Trang
DANH MỤC HÌNH VẼ:
Hình 1.1: Sơ đồ khối của một hệ thống nhúng giản lượt ........................................... 1
Hình 1.2: Kit phát triển PNLab AT91SAM7S256 Evaluation Board ....................... 42-4
Hình 1.3: Sơ đồ khối của bộ tạo “ARM_based application builder” ........................ 5
Hình 2.1: Bảng đồ phát triển về bộ nhớ của dòng ARM AT91SAM7 ...................... 10
Hình 2.2: Đóng gói nhỏ gọn LQFP64_ 64 chân của AT91SAM7S256 .................... 11
Hình 2.3 : Sơ đồ khối của AT91SAM7S256 ............................................................ 13
Hình 2.4: Phân vùng bộ nhớ bên trong AT91SAM7S256 ........................................ 20
Hình 2.5: Chi tiết phần cứng và Jumper của Kit phát triển
NPLab AT91SAM7S EVALUATION BOARD ....................................................... 26
Hình 2.6: Thiết lập các Jumper trên AT91SAM7S_EB............................................. 28
Hình 3.1: Thực thi các lớp trừu tượng phần mềm trong phần cứng ......................... 32
Hình 3.2: Cấu trúc của bộ công cụ phát triển ARM .................................................. 44
Hình 3.3: Cách thức lên lạc giữa SAM_BA với AT91SAM-based Target ............... 46
Hình 3.4: Giao tiếp SAM_GUI .................................................................................. 47
Hình 4.1 : Đầu vào và đầu ra của bộ tạo mã tự động................................................. 48
Hình 4.2 : Luồng thiết kế của vMAGIC .................................................................... 49
Hình 4.3: Cửa sổ LabVIEW_ Bảng mặt trước và sơ đồ khối ................................... 50
Hình 4.4: Cấu trúc của hệ thống µGP tạo chương trình chạy thử tự động ............... 54
Hình 4.5: Sơ đồ khối của dự án sinh mã tự động của thiết kế .................................. 56
Hình 5.1: Sơ đồ các bước xử lý trong chương trình chính......................................... 58
Hình 5.2: Giao diện chính của thiết kế....................................................................... 59
Hình 5.3: Sơ đồ mạch cộng nhị phân toàn phần ....................................................... 62
Hình 5.4: Sơ đồ thiết kế chương trình biên dịch ....................................................... 63
Hình 5.5: Sơ đồ tạo ra bộ phân tích từ vựng bằng Lex .............................................. 65
viii
Hình 5.6: Sơ đồ thuật toán phân tích cú pháp chương trình nguồn ........................... 70
Hình 5.7: Sơ đồ thuật toán tạo mã C .......................................................................... 76
Hình 5.8: Kết quả sinh mã C từ file nguồn FULL_ADDER.arm .............................. 77
Hình 5.9: Sơ đồ khối các bước thực hiện sinh mã BIN
Hình 5.10: Dự án tạo file arm_out.axf sử dụng trình biên dịch Keil µvision3 IDE 80
Hình 5.11: Màn hình hiển thị nội dung của file arm_out.tex..................................... 81
Hình 5.12: Chọn giao thức kết nối giữa USB và board sử dụng trong SAM_BA .... 82
Hình 5.13: Tải file arm_out.bin vào board dùng SAM_BA ...................................... 82
Hình 5.13: Trình tự thực hiện chương trình của thiết kế ........................................... 84
Hình 6.1: Giao diện lập trình giữa PC với người lập trình ........................................ 85
Hình 6.2: Tùy chọn phương thức nhập file nguồn
thông qua giao diện người dùng của thiết kế ............................................................. 86
Hình 6.3: Nội dung file nguồn FULL_ADDER.arm trong giao diện ....................... 86
Hình 6.4: Thông báo lỗi do nhập thiếu “entity” hoặc “ end.”................................... 87
Hình 6.5: Thông báo lỗi do nhập thiếu tên của entity............................................... 88
Hình 6.6: Thông báo lỗi do nhập thiếu dấu “(” ........................................................ 88
Hình 6.7: Thông báo lỗi do nhập sai biến số ............................................................ 89
Hình 6.8: Thông báo lỗi do nhập thiếu “in” hoặc “out” .......................................... 89
Hình 6.9: Thông báo lỗi do nhập thiếu “begin”hoặc “end” ...................................... 90
Hình 6.10: Thông báo lỗi do nhập sai tên sub-circuit............................................... 90
Hình 6.11: Thông báo lỗi do nhập sai biến số của entity “main” ............................ 91
Hình 6.12: Thông báo lỗi do nhập sai tên biến của entity “ main” .......................... 91
Hình 6.13: Thông báo file arm_out.c đã được tạo .................................................... 92
Hình 6.14: Thông báo file arm_out.bin đã được tạo.................................................. 93
Hình 6.15: Mô hình sub-circuit OR nhiều ngõ vào.................................................... 93
Hình 6.16: Mô hình sub-circuit NOT......................................................................... 94
Hình 6.17: Mô hình sub-circuit DFF và trạng thái hoạt động của DFF.................... 94
viiii
Hình 6.18: Mô hình sub-circuit JKFF và trạng thái hoạt động của JKFF ................. 95
Hình 6.19: Mô hình sub-circuit COUNTER và trạng thái hoạt động ...................... 95
Hình 6.20: Mô hình sub-circuit CONTSTEPMOTOR và trạng thái hoạt động ...... 97
Hình 6.21: Mô hình sub-circuit ADC và trạng thái hoạt động ................................. 97
Hình 6.22: Mô hình sub-circuit DELAY 1giây và trạng thái hoạt động.................... 98
Hình 6.23: Mô hình sub-circuit DELAY 60 giây và trạng thái hoạt động ................ 98
Hình 6.24: Mô hình sub-circuit TIMER và trạng thái hoạt động .............................. 98
Hình 6.25: Sơ đồ nguyên lý bộ dồn kênh 4 đầu vào .................................................. 100
Hình 6.26: Chọn giao thức kết nối USB với board AT91SAM7S_ EB ................... 101
Hình 6.27: Tải file arm_out.bin vào board AT91SAM7S_ EB ................................ 102
Hình 6.28: Kiểm tra việc thực thi ứng dụng dùng test board..................................... 103
Hình 6.29: Cổng điều khiển vào/ ra của ứng dụng điều khiển cửa garage ................ 104
Hình 6.30: Sơ đồ trạng thái đóng/ mở cửa garage .................................................... 105
Hình 6.31: Sơ đồ mô tả hệ thống điều khiển đóng/ mở cửa garage........................... 107
DANH MỤC BẢNG BIỂU:
Bảng 2.1: Bảng mô tả chức năng các chân ra của AT91SAM7S256 ....................... 14
Bảng 2.2: Bảng mô tả tín hiệu trong vi điều khiển AT91SAM7S256....................... 18
Bảng 2.3: Bảng tổng hợp các đường điều khiển PIO kênh A.................................... 24
Bảng 2.4: Định danh các thiết bị ngoại vi của AT91SAM7S256.............................. 25
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
CHƯƠNG I
GIỚI THIỆU
Hệ thống nhúng được thiết kế để thực hiện một chức năng chuyên biệt. Một
hệ thống nhúng chỉ thực hiện một hoặc một vài chức năng nhất định, thường đi kèm
với những yêu cầu cụ thể, bao gồm một số thiết bị ngoại vi và phần cứng chuyên
dụng. Một số hệ thống nhúng đòi hỏi sự ràng buộc về tính hoạt động thời gian thực
nhằm đảm bảo độ an toàn và tính ứng dụng của nó. Phần mềm được viết cho các hệ
thống nhúng được lưu trữ trong các bộ nhớ ROM hoặc RAM. Phần mềm thường
chạy với số tài nguyên phần cứng hữu hạn.
Từ những ứng dụng đầu tiên vào những năm 1960, các hệ thống nhúng đã
được phát triển mạnh mẽ về khả năng xử lý. Vào giữa thập niên 80, kỹ thuật mạch
tích hợp đã đạt đến trình độ cao, dẫn đến nhiều thành phần có thể được đưa vào một
chip xử lý. Một số bộ vi xử lý được gọi là các vi điều khiển và được ứng dụng rộng
rãi cho đến nay.
Hệ thống nhúng là sự kết hợp hài hòa giữa phần cứng và phần mềm, tạo
thành bộ phận xử lý trong một vài hệ thống rộng lớn và thông thường được thiết kế
để thực hiện một vài nhiệm vụ cụ thể nào đó. Một hệ thống nhúng bao gồm một vi
xử lý được thiết kế đặc biệt, khả lập trình ROM hoặc Flash và hệ mạch điện khác.
Bộ nhớ
Ngõ vào
Ngõ ra
Giao tiếp
I/O
Bộ xử lý
Hình 1.1: Sơ đồ khối của một hệ thống nhúng giản lượt
Luận văn Thạc sĩ
1
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
Hình 1.1 minh họa một cách chung nhất của một hệ thống nhúng. Phần lớn
các hệ thống nhúng có những ứng dụng riêng biệt, được thiết kế để đáp ứng cho
những yêu cầu ứng dụng riêng. Có một sự khác biệt lớn giữa hệ thống phần cứng và
phần mềm khi dùng trong những ứng dụng khác nhau. Vì thế, hầu hết phầm mềm
được thiết kế cho một hệ thống nhúng không thể chạy trong một hệ thống khác mà
không có sự sửa đổi đáng kể nào.
Sự phát triển một hệ nhúng là sự kết hợp nhuần nhuyễn giữa phần cứng và
phần mềm, nên công nghệ gắn liền với nó cũng chính là sự phối hợp giữa các giải
pháp cho phần cứng và mềm. Vì tính chuyên biệt của thiết bị và hệ nhúng, các nền
phần cứng cũng được chế tạo để ưu tiên đáp ứng cho chức năng hay nhiệm vụ cụ
thể của yêu cầu thiết kế đặt ra, từ đơn giản đến phức tạp. Đó cũng là sự kết hợp đa
dạng và sự ra đời của các hệ nhúng nhằm thỏa mãn các ứng dụng đa dạng đó.
Với mỗi một nền phần cứng thường có những đặc thù riêng kèm theo một
giải pháp phát triển phần mềm tối ưu tương ứng. Không có một giải pháp nào chung
và chuẩn tắc cho việc thiết kế cụ thể của tất cả các hệ nhúng. Thông thường, các nhà
phát triển và cung cấp phần cứng cũng là nhà cung cấp giải pháp phần mềm hoặc
công cụ phát triển phần mềm kèm theo. Rất phổ biến hiện nay, các chíp vi điều
khiển cũng như nhiều các chíp xử lý nhúng khác đều có các hệ phát triển (Starter
Kit hay Emulator) hỗ trợ cho người ứng dụng và xây dựng hệ nhúng với hiểu biết
hạn chế về phần cứng.
Ngôn ngữ mã hoá cho phần mềm nhúng hiện nay thường dùng là ngôn ngữ C
(hoặc gần như C) thay vì phải viết hoàn toàn bằng ngôn ngữ Assembly. Điều này
cho phép các nhà thiết kế tối ưu và đơn giản hóa rất nhiều các bước phát triển và
xây dựng hệ nhúng. Trong xu thế phát triển không ngừng và nhằm thoả mãn được
nhu cầu phát triển nhanh và hiệu quả, có rất nhiều công nghệ cho phép thực thi các
giải pháp hiệu quả cho hệ nhúng. Đứng sau sự phổ cập rộng rãi của các nền phần
cứng ứng dụng chíp vi điều khiển là các kỹ thuật phát triển phần mềm kèm theo.
Hiện nay có rất nhiều loại kiến trúc CPU được sử dụng trong thiết kế hệ
nhúng như ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR,
Luận văn Thạc sĩ
2
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … . Các hệ thống nhúng này thường
có các hệ điều hành nhúng riêng. Các hệ điều hành dùng trong các hệ thống nhúng
nổi trội hiện nay bao gồm Embedded Linux, VxWorks, Win CE, Lynyos, BSD,
Green Hills, QNX và DOS. Hệ thống nhúng giao tiếp với bên ngoài thông qua các
thiết bị ngoại vi. Phần mềm của hệ thống nhúng cũng được phát triển nhờ việc sử
dụng các chương trình biên dịch (compiler), chương trình dịch hợp ngữ (assembler)
hoặc các công cụ gỡ rối (debugger). Các công cụ phần mềm có thể được tạo ra bởi
các công ty phần mềm chuyên về hệ thống nhúng hoặc được chuyển hóa từ các
công cụ phát triển phần mềm GNU. Ứng dụng của hệ thống nhúng hiện nay ngày
càng trở nên phức tạp, đòi hỏi các nhân điều khiển cần có cấu hình mạnh hơn, đáp
ứng thời gian thực tốt hơn .
ARM là nhà cung cấp hàng đầu của các bộ xử lý nhúng 32-bit với tập lệnh
đơn giản hoá (RISC), chiếm lĩnh hơn 75% thị phần trên thế giới và có hơn 10 tỷ
thiết bị sử dụng ARM đã được bán ra cho tới nay. Bộ xử lý của ARM được nhiều
nhà sản xuất vi xử lý lớn như Analog Devices, Atmel, Luminary Micro, NXP,
Freescale Semiconductor, Intel, Texas Instruments… sử dụng. Tại Việt Nam, nhiều
người cũng đã sử dụng bộ xử lý ARM để thiết kế hệ thống nhúng trong nhiều ứng
dụng khác nhau. PNLab AT91SAM7S256 Evaluation Board (AT91SAM7S_EB) là
một mạch phát triển cơ bản để học tập các ứng dụng trên nền ARM7-TDMI, với các
cấu hình từ cơ bản đến nâng cao RS232, USB, SD/MMC, Keypad, LED, ADC… .
AT91SAM7S256 là một vi điều khiển hiệu năng cao thuộc dòng ARM7TDMI được phát triển bởi Atmel – một trong các nhà sản xuất bán dẫn hàng đầu thế
giới. AT91SAM7S256 chạy ở tốc độ tối đa 60MHz, với 256kByte bộ nhớ Flash,
64kByte bộ nhớ RAM, và đầy đủ các ngoại vi cần thiết. AT91SAM7S_EB là một
hệ phát triển cho phép các kỹ sư dễ dàng tiếp cận và làm việc một cánh nhanh
chóng với ARM AT91SAM7S256. Đặc biệt, board có hỗ trợ chế độ lập trình
BOOT ASSISTANT của Atmel, có khả năng nạp chương trình trực tiếp qua cổng
USB hoặc RS232 mà không cần đến mạch nạp JTAG.Page
Luận văn Thạc sĩ
3
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
Hình 1.2: Kit phát triển PNLab AT91SAM7S256 Evaluation Board 2
Để lập trình nhúng cho một vi điều khiển ARM, chúng ta thường gặp một số
khó khăn trong xử lý lỗi và thực thi chương trình, tiêu tốn nhiều thời gian và thường
sinh ra nhiều lỗi. Người lập trình vẫn còn do dự trong việc chọn lựa những giải
pháp lập trình cho vi điều khiển nhằm đạt hiệu quả cao về tính tích hợp và độ linh
hoạt nhằm gia tăng tính năng ứng dụng. Những khó khăn mà người lập trình thường
gặp trong việc phát triển ứng dụng cho những dòng vi điều khiển thế hệ mới là việc
nghiên cứu, viết mã, gỡ rối thông qua các công cụ khá phức tạp. Để việc học tập,
nghiên cứu, thiết kế ứng dụng vi điều khiển ARM đạt hiệu quả, yêu cầu cần có
nhiều công cụ hỗ trợ hơn. Trong đó, việc thiết kế phần mềm hổ trợ, tiện ích đối với
người sử dụng các loại kit vi điều khiển phát triển hiện nay là rất cần thiết.
Với sự phát triển nhanh của công nghệ, các công cụ phát triển phần mềm
ngày càng trở nên hiện đại, nhưng việc lập trình ứng dụng vẫn còn là một công việc
vô cùng chi tiết, tỉ mỉ và đòi hỏi nhiều thời gian, công sức của người lập trình.
Chính điều này đã thúc đẩy sự phát triển của một kỹ thuật lập trình sinh mã tự động
Luận văn Thạc sĩ
4
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
nhằm tạo ra mã chương trình một cách tự động hóa, giảm bớt gánh nặng cho các lập
trình viên và làm cho công việc lập trình trở nên đơn giản hơn.
Lập trình sinh mã tự động cho hệ nhúng thời gian thực là một kỹ thuật đang
được ứng dụng mạnh mẽ. Sử dụng kỹ thuật này, các nhà thiết kế công cụ phần mềm
sẽ dể dàng hướng đến việc thiết kế một giao diện thân thiện hơn đến người dùng,
mở rộng phạm vi sử dụng cho nhiều đối tượng, đa dạng hóa về hình thức lập trình,
tối ưu hóa thời gian thực thi dự án. Chẳn hạn như bộ công cụ môđun nhúng
LabVIEW của hãng National Instruments, dùng cho bộ vi điều khiển ARM. Đây là
một sự mở rộng của phần mềm thiết kế bằng đồ họa (ngôn ngữ lập trình đồ họa).
LabVIEW hướng vào các dòng vi điều khiển ARM 7™, ARM 9™ và Cortex™M3. Sử dụng các môđun LabVIEW, lập trình viên có thể ứng dụng khả năng lập
trình lưu đồ đồ họa của LabVIEW cho tất cả các thành phần của bộ vi điều khiển
ARM, bao gồm cả nhập/xuất tín hiệu analog và digital (I/O), đạt hiệu quả cao hơn
và tiết kiệm nhiều thời gian hơn .
Trong luận văn này, để xây dựng trình tạo ứng dụng “ARM_based
application builder” nhằm hổ trợ lập trình ứng dụng trên kit phát triển
AT91SAM7S_EB, chúng tôi xây dựng một chương trình tự động sinh mã mới dựa
trên kỹ thuật lập trình sinh mã tự động và sử dụng thư viện MFC sẵn có trong phần
mềm Visual C++ 6.0.
Mã nguồn
(ngôn ngữ mô tả )
Mã đích
(file BIN)
Bộ sinh
mã C
Trình nạp
SAM_BA
Trình liên
kết
Mã C
(file C)
Kết nối
USB
Mã đích
(file BIN)
Board
AT91SAM7S_EB
Hình 1.3: Sơ đồ khối của bộ tạo “ARM_based application builder”
Chương trình này sẽ thực hiện ba nhiệm vụ chính:
Luận văn Thạc sĩ
5
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
- Tự động tạo ra mã C từ mã nguồn (source code) ở đầu vào, mã nguồn được
người dùng mô tả theo cấu trúc hệ thống.
- Tự động tạo ra mã đích (target code) từ mã C được sinh ra, mã đích được
định dạng là mã nhị phân (BIN).
- Nạp mã đích vào bộ nhớ Flash của AT91SAM7S256 để thực thi ứng dụng.
Trong đó, bộ sinh mã C thực hiện nhiệm vụ thu nhận dữ liệu từ mã nguồn
(suorce code) và tự động sinh ra mã C ở đầu ra. Mã nguồn được người dùng lập
trình theo định dạng cho trước. Định dạng mã nguồn trong ứng dụng này dựa theo
kiến trúc mô tả phần cứng dưới dạng cấu trúc (structure). Các trình tạo ứng dụng
(application builder) cũng sẽ được thực hiện thông qua thủ tục gọi hàm từ mã C
này. Các trình tạo ứng dụng đã được lập trình trước đó và được lưu trữ trong một
header file.
Một chương trình liên kết thực hiện nhiệm vụ liên kết các thành phần có liên
quan để tự động sinh mã đích (target code). Trong quá trình này, công cụ biên dịch
Keil µvision3 IDE cũng được sử dụng, kết hợp với một số lệnh liên kết (makefile)
khác để tạo ở ra mã thực thi dưới dạng file .bin ở đầu ra.
Chương trình liên kết các quá trình sinh mã trên được thực hiện trong ứng
dụng MFC của bộ Visual C++ 6.0, nó sẽ thực hiện sự liên kết các thành phần cần
thiết giúp bộ sinh mã thực hiện việc tạo mã một cách tự động.
Mã đích được sinh ra có phần đuôi mở rộng là .bin và được đặt trong một thư
mục được quyết định bởi bộ tạo mã đích. Người lập trình có thể sử dụng file BIN
này bất cứ lúc nào. Để chạy ứng dụng trên kit AT91SAM7S_EB, người lập trình
nạp mã đích (target code) vào AT91SAM7S_EB bất cứ lúc nào bằng phần mềm
SAM Boot Assistant (SAM-BA™) sẵn có.
Công cụ tự sinh mã mới này có thể được điều chỉnh để sử dụng cho các loại
vi điều khiển ARM khác, mã đích được sinh ra cũng có thể được điều chỉnh ở dạng
mã Hexa hoặc mã Assambly.
Nội dung luận văn gồm các chương như sau :
Chương 1 giới thiệu tổng quan về việc xây dựng trình tạo ứng dụng cho ARM.
Luận văn Thạc sĩ
6
Nguyễn Văn Thanh
Chương 1: Giới Thiệu
CBHD: T.S Phan Hồng Phương
Th.S. Hồ Trung Mỹ
Chương 2 trình bày về sự vượt trội của công nghệ ARM; đặc tả và các tính
năng của vi điều khiển Atmel AT91SAM7S256; kit phát triển PNLab AT91SAM7S
Evaluation Board và các tính năng chủ yếu của nó.
Chương 3 trình bày về môi trường phát triển hệ thống nhúng sử dụng ARM;
các phần mềm cần thiết cho một hệ thống nhúng; kỹ thuật lập trình ứng dụng với vi
điều khiển Atmel AT91SAM7S256; công cụ phát triển ARM; công cụ AT91
ISP/SAM-BA.
Chương 4 giới thiệu về kỹ thuật lập trình sinh mã tự động cho hệ thống nhúng
thời gian thực; phát triển phần mềm tự sinh mã cho hệ thống nhúng; bài học kinh
nghiệm, ứng dụng và hướng phát triển của kỹ thuật lập trình tự sinh mã; phương án
thiết kế bộ sinh mã tự động mới cho AT91SAM7S256 .
Chương 5 xây dựng chương trình tạo ứng dụng “ARM_Based application
builder” trên kit phát triển PNLab AT91SAM7S Evaluation Board.
Chương 6 trình bày kết quả thực nghiệm.
Kết luận và hướng phát triển đề tài.
Luận văn Thạc sĩ
7
Nguyễn Văn Thanh
- Xem thêm -