Luận văn được trình bày trong ba chương với nội dung mỗi chương như sau: Chương 1 Trình bày các nội dung tìm hiểu về hệ thống nhúng, hệ thống thời gian thực, phần mềm nhúng, các vấn đề
Trang 1LUẬN VĂN THẠC SĨ KHOA HỌC
NGÀNH: CÔNG NGHỆ THÔNG TIN
NGHIÊN CỨU, TRIỂN KHAI MÔI TRƯỜNG
PHÁT TRIỂN HỆ THỐNG NHÚNG TRONG BÀI TOÁN
ĐIỀU KHIỂN NHÀ KÍNH
TRỊNH THỊ PHÚ
Người hướng dẫn khoa học: TS CAO TUẤN DŨNG
HÀ NỘI 2010
Trang 2LỜI CAM ĐOAN
Tôi xin cam đoan luận văn “Nghiên cứu, triển khai môi trường phát triển hệ thống nhúng” là do tôi thực hiện dưới sự hướng dẫn của TS Cao Tuấn Dũng – Khoa Công nghệ thông tin, trường Đại học Bách khoa Hà Nội Mọi trích dẫn và tài liệu tham khảo được sử dụng trong luận văn đều được tôi chỉ rõ nguồn gốc Tôi xin hoàn toàn chịu trách nhiệm về lời cam đoan trên
Hà Nội, ngày 2 tháng 4 năm 2010
Tác giả luận văn
Trang 3MỤC LỤC
LỜI CAM ĐOAN 1
MỤC LỤC 2
DANH MỤC CÁC TỪ VIẾT TẮT 4
DANH MỤC BẢNG BIỂU 5
DANH MỤC HÌNH VẼ 6
MỞ ĐẦU 8
CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG 10
1.1 Hệ thống nhúng (Embedded System) 10
1.1.1 Khái niệm 10
1.1.2 Các ví dụ 11
1.1.3 Đặc điểm của hệ nhúng 12
1.1.4 Tổng quan về kiến trúc phần mềm 16
1.2 Hệ thống thời gian thực (Real-Time Systems) 18
1.2.1 Khái niệm 18
1.2.2 Các đặc điểm của hệ thống thời gian thực 19
1.2.3 Các dạng của hệ thống thời gian thực 20
1.2.4 Xử lý thời gian thực 22
1.2.5 Ứng dụng 23
1.3 Thiết kế và phát triển ứng dụng cho hệ thống nhúng 24
1.3.1 Thiết kế hệ thống nhúng 24
1.3.2 Phần mềm nhúng 27
1.3.3 Các công cụ phát triển phần mềm nhúng 33
1.3.4 Các kỹ thuật gỡ rối 33
1.4 Xu hướng phát triển của các hệ nhúng 34
1.5 Những thách thức và các vấn đề tồn tại của các hệ nhúng 34
1.5 Kết chương 35
CHƯƠNG 2: VI ĐIỀU KHIỂN AVR 37
2.1 Vi điều khiển 37
2.2 Kiến trúc của vi điều khiển AVR 38
2.2.1 Tổ chức của AVR 40
2.2.2 Hoạt động của AVR 44
2.2.3 Thanh ghi trạng thái – SREG (STATUS REGISTER) 46
2.3 Bộ truyền nhận dữ liệu nối tiếp USART 47
2.3.1 Truyền thông nối tiếp 48
2.3.2 Truyền thông nối tiếp không đồng bộ với AVR (UART) 51
Trang 42.4 Chuyển đổi ADC trên AVR 59
2.4.1 Chuyển đổi dữ liệu tương tự (analog) sang dữ liệu số (digital) 59
2.4.2 Chuyển đổi ADC trên AVR 60
2.5 Quy trình thiết kế một mạch ứng dụng dùng vi điều khiển 66
2.6 Các công cụ dùng với AVR 68
2.6.1 Trình biên dịch: 68
2.6.2 Chương trình nạp (Chip Programmer) 69
2.6.3 Mạch nạp 70
2.6.4 Phần mềm mô phỏng 70
2.6.4 Giao tiếp với máy tính 72
2.7 Kết chương 73
CHƯƠNG 3: ĐIỀU KHIỂN MÔI TRƯỜNG CHO 75
NHÀ KÍNH 75
3.1 Tổng quan về môi trường nhà kính 75
3.1.1 Vai trò của nhà kính trong sản xuất nông nghiệp 75
3.1.2 Công nghệ nhà kính trong thực tế 75
3.1.3 Nhiệt độ nhà kính 76
3.2 Điều khiển môi trường cho nhà kính 78
3.2.1 Mô tả bài toán 78
3.2.2 Kiến trúc hệ thống điều khiển nhà kính 78
3.2.2 Ghép nối các thiết bị cảm biến trong hệ thống với vi điều khiển 80
3.2.3 Ghép nối với các thiết bị điều khiển 83
3.3 Điều khiển nhiệt độ môi trường nhà kính 84
3.3.1 Các khối chức năng trong vi điều khiển 88
3.3.3 Giao tiếp giữa PC và vi điều khiển 91
3.4 Kết chương 95
KẾT LUẬN 97
TÀI LIỆU THAM KHẢO 99
Trang 5DANH MỤC CÁC TỪ VIẾT TẮT
STT Từ viết tắt Thuật ngữ Tiếng Anh Thuật ngữ Tiếng Việt
1 ADC Analog to Digital
Converter Bộ chuyển đổi tương tự - số
2 BCD Binary Coded Decimal Thập phân được mã hóa nhị phân
3 CPU Central Processing Unit Đơn vị xử lý trung tâm
4 DAC Digital to Analog
Converter Bộ biến đổi số sang tương tự
5 EEPROM
Electrically Erase and Programmable Read Only Memory
Bộ nhớ ROM có thể lập trình và xóa
6 EPROM
Electrically Programmable Read Only Memory
Bộ nhớ ROM có thể lập trình
8 ISR Interrupt SubRoutine Đoạn chương trình xử lý ngắt
9 RAM Random Access Memory Bộ nhớ dùng để đọc
10 RS232
Một tiêu chuẩn quy định giao thức truyền dữ liệu nối tiệp, không đồng bộ
11 UART
Universal Asynchrounous Receiver Transmitter
Bộ truyền nhận không đồng bộ
14
Trang 6DANH MỤC BẢNG BIỂU
Bảng 2.1: Chọn kiểm tra parity 55
Bảng 2.2: Độ dài dữ liệu truyền 56
Bảng 2.3: Tính tốc độ baud 57
Bảng 2.4: Một số tốc độ baud mẫu 58
Bảng 2.5: Chọn điện áp tham chiếu 62
Bảng 2.4: Hệ số chia xung nhịp cho ADC 65
Bảng 2.5: Nguồn kích ADC trong chế độ Auto Trigger 66
Trang 7DANH MỤC HÌNH VẼ
Hình 1.1: Cấu trúc của các hệ thống thời gian thực 18
Hình 2.1: Cấu trúc bộ nhớ của AVR 40
Hình 2.2: Thanh ghi 8 bits .41
Hình 2.3: Register file 43
Hình 2.4 Cấu trúc bên trong AVR 45
Hình 2.5 Thanh ghi trạng thái 46
Hình 2.6 Truyền 8 bit theo phương pháp song song và nối tiếp 49
Hình 2.7: Thanh ghi UDR 52
Hình 2.8: Thanh ghi UCSRA 53
Hình 2.9: Thanh ghi UCSRB 53
Hình 2.10: Thanh ghi UCSRC 55
Hình 2.11: Tạo nguồn AVCC từ VCC 61
Hình 2.12: Thanh ghi ADMUX 62
Hình 2.13: Thanh ghi ADCSRA 64
Hình 2.14: Một hệ thống phát triển dựa trên vi điều khiển 68
Hình 2.15: Giao diện chương trình CodevisionAVR 69
Hình 2.16: Giao diện phần mềm mô phỏng Proteus 71
Hình 2.17: Giao diện phần mềm Virtual Serial Port Driver .71
Hình 2.18: Giao diện của phần mềm LabVIEW 73
Hình 3.1 Mô tả hệ thống nhà kính 79
Hình 3.2: Cảm biến nhiệt độ LM35 .82
Hình 3.3: Cảm biến độ ẩm SHT10 82
Hình 3.4: Mạch mô phỏng việc điều khiển thông số nhiệt độ, đồng thời gửi giá trị này lên PC .86
Hình 3.5: Ghép nối cảm biến nhiệt độ với vi điều khiển .87
Hình 3.6: Ghép nối vi điều khiển với các thiết bị mô phỏng đầu ra 87
Hình 3.7: Ghép nối vi điều khiển với cổng COM 88
Hình 3.8 Giao diện chương trình giao tiếp giữa PC và vi điều khiển 92
Hình 3.9: Khối chương trình trong LabVIEW 93
Trang 8Hình 3.10: Khối khai báo các thông số giao tiếp cổng COM trong LabVIEW 93 Hình 3.11: Khối đọc dữ liệu và hiển thị lên đồ thị 94 Hình 3.12: Kết quả thực hiện giao tiếp giữa PC và vi điều khiển 95
Trang 9MỞ ĐẦU
Xã hội càng phát triển, công nghệ thông tin càng giữ vị trí quan trọng trong đời sống và kỹ thuật Cùng với xu hướng phát triển của công nghệ thông tin, việc xây dựng các hệ thống điều khiển trở thành một vấn đề tất yếu, một nhu cầu cấp thiết, đặc biệt đối với những ứng dụng là các hệ thống phục vụ đời sống Nước ta là một nước nông nghiệp nên vai trò của nông nghiệp có ý nghĩa
vô cùng quan trọng trong việc làm tiền đề để thúc đẩy nền công nghiệp hóa, hiện đại hóa phát triển Ngược lại công nghiệp hóa, hiện đại hóa sẽ làm thay đổi cách thức lao động và trang thiết bị máy móc trong nông nghiệp, để cho ra xã hội những sản phẩm nông nghiệp phong phú, đa dạng và đảm bảo chất lượng Khó khăn lớn nhất của ngành nông nghiệp nước ta là thời thiết thất thường, các sản phẩm nông nghiệp không được bảo vệ trước yếu tố thiên nhiên Vì vậy mô hình nhà kính, nhà lưới được áp dụng trong nông nghiệp để nâng cao sản lượng và chất lượng của các sản phẩm nông nghiệp, giúp vượt qua các trở ngại về mặt khí hậu Một trong những mục đích chính của nhà kính là kiểm soát được các thông
số như nhiệt độ, độ ẩm, ánh sáng, cho phù hợp với yêu cầu sinh trưởng của cây trồng Để kiểm soát được các thông số này một cách tự động hoặc bán tự động cần có sự can thiệp của các thiết bị điện tử
Với mục đích nghiên cứu, triển khai môi trường phát triển hệ thống nhúng tác giả lựa chọn đề tài này với mong muốn có một cái nhìn tổng quan về việc phát triển hệ thống nhúng và bước đầu thực hiện triển khai áp dụng cho việc điều khiển các thông số cho môi trường nhà kính
Luận văn được trình bày trong ba chương với nội dung mỗi chương như sau:
Chương 1 Trình bày các nội dung tìm hiểu về hệ thống nhúng, hệ thống
thời gian thực, phần mềm nhúng, các vấn đề về thiết kế và phát triển hệ thống nhúng, những khác biệt so với vấn đề thiết kế và phát triển ứng dụng
Trang 10Tiếp theo, Chương 2 Trình bày cấu trúc tổng quát về vi điều khiển AVR,
là một họ vi điều khiển do hãng Atmel sản xuất AVR là chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa – RISC (Reduced Instruction Set Computer), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí Đồng thời giới thiệu một số công cụ để làm việc với vi điều khiển
Trong Chương 3, Trình bày tổng quan về môi trường nhà kính và việc
điều khiển các thông số cho môi trường nhà kính có thể áp dụng trong mô hình thực nghiệm đối với việc nuôi trồng các cây nông nghiệp Một số kết quả đạt được trng việc điều khiển thông số nhiệt độ của môi trường nhà kính
Tôi xin trân trọng cảm ơn Viện Đào tạo Sau đại học - Trường Đại học Bách Khoa Hà Nội, các thầy cô giáo, cùng toàn thể các bạn đồng nghiệp Đặc biệt tôi xin chân thành cảm ơn PGS TS Nguyễn Ngọc Bình, TS Cao Tuấn Dũng người đã trực tiếp hướng dẫn và cho tôi những ý kiến quý báu để tôi có thể hoàn thành luận văn này
Chắc chắn, luận văn còn có những thiếu sót trong nội dung cũng như trong trình bày Tác giả của luận văn rất mong nhận được sự đóng góp ý kiến của các thầy cô giáo và của các anh, chị học viên
Trang 11CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG
1.1 Hệ thống nhúng (Embedded System)
1.1.1 Khái niệm
Chúng ta có thể hiểu hệ thống nhúng là một phần hệ thống xử lý thông minh nằm trong sản phẩm, tạo thành một phần của hệ thống lớn hơn và thực hiện một số chức năng của hệ thống Nói một cách đơn giản khi một hệ tính toán được nhúng vào trong một sản phẩm hay một hệ thống một cách hữu cơ và thực hiện một số chức năng cụ thể của hệ thống thì ta gọi đó là một hệ thống nhúng [1]
Hệ thống nhúng thường được thiết kế để thực hiện một chức năng chuyên biệt nào đó Khác với các máy tính đa chức năng, chẳng hạn như máy tính cá nhân, 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ể và bao gồm một số thiết bị máy móc và phần cứng chuyên dụng mà ta không tìm thấy trong một máy tính đa năng nói chung Vì hệ thống chỉ được xây dựng cho một số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ưu hóa nó nhằm giảm thiểu kích thước và chi phí sản xuất Các hệ thống nhúng thường được sản xuất hàng loạt với số lượng lớn Hệ thống nhúng rất đa dạng, phong phú về chủng loại Đó có thể là những thiết bị cầm tay nhỏ gọn như đồng hồ kĩ thuật số và máy chơi nhạc MP3, hoặc những sản phẩm lớn như đèn giao thông, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các máy năng lượng hạt nhân Xét về độ phức tạp, hệ thống nhúng có thể rất đơn giản với một vi điều khiển hoặc rất phức tạp với nhiều đơn vị, các thiết bị ngoại
vi và mạng lưới được nằm gọn trong một lớp vỏ máy lớn
Các hệ nhúng được tích hợp trong các thiết bị đo lường điều khiển và các sản phẩm cơ điện tử tạo nên đầu não và linh hồn của sản phẩm
Trong các hệ nhúng, hệ thống điều khiển nhúng đóng một vai trò hết sức quan trọng
Trang 12Hệ điều khiển nhúng là hệ thống mà máy tính được nhúng vào vòng điều khiển của sản phẩm nhằm điều khiển một đối tượng, điều khiển một qúa trình công nghệ đáp ứng các yêu cầu đặt ra Hệ thống điều khiển nhúng lấy thông tin
từ các cảm biến, xử lý tính toán các thuật điều khiển và phát tín hiệu điều khiển cho các cơ cấu chấp hành
1.1.2 Các ví dụ
Ngày nay hệ thống nhúng đã trở thành một khuynh hướng giải pháp được
áp dụng rộng rãi trong công nghệ kỹ thuật, kết hợp toàn diện cả phần cứng và phần mềm Trong mỗi hệ nhúng đều có những phần mang tính đặc trưng và riêng biệt về thiết kế phần cứng và phần mềm Sự khác biệt này là kết quả của sự thỏa hiệp về giải pháp thiết kế nhằm ưu tiên thỏa mãn các yêu cầu và thực hiện chức năng cụ thể của hệ nhúng
Các hệ thống nhúng điển hình
Không gian vũ trụ Các hệ thống hàng hải, các hệ thống tiếp đất tự động,
điều khiển bay, điều khiển động cơ, thám hiểm không gian…
Máy móc tự động Điều khiển phun nhiên liệu, điều khiển môi trường
hành khách, các hệ thống kiểm tra khóa, điều khiển túi khí, sắp xếp GPS,…
Các phương tiện
truyền thông
Vệ tinh nhân tạo, network router, các switch, các hub,…
Các thiết bị ngoại vi Máy in, máy quét, bàn phím, màn hình, modem, các ổ
đĩa cứng, các ổ đĩa CD-ROM Các thiết bị trong gia
đình
Máy giặt, lò vi sóng, tivi, VCRs, stereo, các hệ thống báo cháy/báo trộm, điều khiển máy tưới cỏ, máy điều nhiệt, clock radio, máy trả lời tự động,…
Trong công nghiệp Điều khiển thang máy, các hệ thống giám sát, robots,…Trong nông nghiệp Nhà kính vi tính hóa,…
Trang 13Thiết bị đo đạc Tập hợp dữ liệu, máy hiện sóng, máy phát tín hiệu,
máy phân tích tín hiệu, cung cấp năng lượng,
Trong y tế Các hệ thống ảnh hóa (như XRAY, MRI và siêu âm),
các máy theo dõi bệnh nhân, đo nhịp tim,…
Các thiết bị văn phòng Máy FAX, máy copy, điện thoại, máy chấm công,… Thiết bị cá nhân Personal Digital Assistants (PDAs), pagers, cell
phones, wrist watches, video games, portable MP3 players, GPS,…
1.1.3 Đặc điểm của hệ nhúng
Các hệ nhúng là những hệ kết hợp phần cứng và phần mềm một cách tối
ưu Một số đặc trưng cơ bản của hệ nhúng ngoài tính chuyên dụng nó còn bị ràng buộc về hoạt động trong chế độ thời gian thực, hạn chế về bộ nhớ, năng lượng và giá thành mà lại đòi hỏi hoạt động tin cậy và tiêu tốn ít năng lượng
Hệ thống nhúng thường có một số đặc điểm chung như sau:
• Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng chứ không phải đóng vai trò là các hệ thống máy tính đa chức năng Một số hệ thống đòi hỏi ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng dụng; một số hệ thống không đòi hỏi hoặc ràng buộc chặt chẽ, cho phép đơn giản hóa hệ thống phần cứng
để giảm thiểu chi phí sản xuất
• Một hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống phức tạp nằm trong thiết bị mà nó điều khiển
• Phần mềm được viết cho các hệ thống nhúng được lưu trữ trong các chip bộ nhớ chỉ đọc (read-only memory) hoặc bộ nhớ flash chứ không phải
là trong một ổ đĩa Phần mềm thường chạy với số tài nguyên phần cứng hạn chế: không có bàn phím, màn hình hoặc có nhưng với kích thước nhỏ,
bộ nhớ hạn chế
Một hệ thống nhúng cần có một bộ xử lý và bộ nhớ Hầu hết các hệ thống nhúng không có các phần sau:
Trang 14- Bàn phím (keyboard) Một vài hệ thống có thể có một ít nút bấm cho
người sử dụng
- Màn hình (screen) Nhiều hệ thống, đặc biệt trong các sản phẩm người
tiêu dùng, có một màn hình tinh thể lỏng hiển thị các thông số giúp người
sử dụng theo dõi dễ dàng hơn
- Ổ đĩa (disk drive) Chương trình được lưu trữ trong bộ nhớ, và hầu hết
các hệ thống nhúng không cần thiết phải lưu trữ nhiều dữ liệu một cách cố định
Tiếp theo, ta sẽ xem xét cụ thể đặc điểm của các thành phần của hệ thống nhúng
Còn trong một hệ thống phức tạp hơn, một màn hình đồ họa, cảm ứng hoặc có các nút bấm ở lề màn hình cho phép thực hiện các thao tác phức tạp mà tối thiểu hóa được khoảng không gian cần sử dụng; ý nghĩa của các nút bấm có thể thay đổi theo màn hình và các lựa chọn Các hệ thống nhúng thường có một màn hình với một nút bấm dạng cần điểu khiển (joystick button) Sự phát triển mạnh mẽ của mạng internet đã mang đến cho những nhà thiết kế hệ nhúng một lựa chọn mới là sử dụng một giao diện web thông qua việc kết nối mạng Điều này có thể giúp tránh được chi phí cho những màn hình phức tạp nhưng đồng thời vẫn cung cấp khả năng hiển thị và nhập liệu phức tạp khi cần đến, thông qua một máy tính khác Điều này là hết sức hữu dụng đối với các thiết bị điều khiển
từ xa, cài đặt vĩnh viễn
Trang 151.1.3.2 Kiến trúc CPU
Các bộ xử lý trong hệ thống nhúng có thể được chia thành hai loại: vi xử
lý và vi điều khiển Các vi điều khiển thường có các thiết bị ngoại vi được tích hợp trên chip nhằm giảm kích thước của hệ thống 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, Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … Điều này trái ngược với các loại máy tính để bàn, thường bị hạn chế với một vài kiến trúc máy tính nhất định Các hệ thống nhúng có kích thước nhỏ
và được thiết kế để hoạt động trong môi trường công nghiệp thường lựa chọn PC/104 và PC/104++ làm nền tảng Những hệ thống này thường sử dụng DOS, Linux, NetBSD hoặc các hệ điều hành nhúng thời gian thực như QNX hay VxWorks Còn các hệ thống nhúng có kích thước rất lớn thường sử dụng một cấu hình thông dụng là hệ thống on chip (System on a chip – SoC), một bảng mạch tích hợp cho một ứng dụng cụ thể (an application-specific integrated circuit – ASIC) Sau đó nhân CPU được mua và thêm vào như một phần của thiết kế chip Một chiến lược tương tự là sử dụng FPGA (field-programmable gate array) và lập trình cho nó với những thành phần nguyên lý thiết kế bao gồm cả CPU [5]
1.1.3.3 Thiết bị ngoại vi
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, ví
dụ như:
• Serial Communication Interfaces (SCI): RS-232, RS-422, RS-485
• Synchronous Serial Communication Interface: I2C, JTAG, SPI, SSC
và ESSI
• Universal Serial Bus (USB)
• Networks: Controller Area Network, LonWorks
• Bộ định thời: PLL(s), Capture/Compare và Time Processing Units
• Discrete IO: General Purpose Input/Output (GPIO)
Trang 161.1.3.4 Công cụ phát triển
Tương tự như các sản phẩm phần mềm khác, phần mềm hệ thống nhúng cũng được phát triển nhờ việc sử dụng các trình biên dịch (compilers), chương trình dịch hợp ngữ (assembler) hoặc các công cụ gỡ rối (debuggers) Tuy nhiên, các nhà thiết kế hệ thống nhúng có thể sử dụng một số công cụ chuyên dụng như:
• Bộ gỡ rối mạch hoặc các chương trình mô phỏng (emulator)
• Tiện ích để thêm các giá trị checksum hoặc CRC vào chương trình, giúp hệ thống nhúng có thể kiểm tra tính hợp lệ của chương trình đó
• Đối với các hệ thống xử lý tín hiệu số, người phát triển hệ thống có thể
sử dụng phần mềm workbench như MathCad hoặc Mathematica để mô phỏng các phép toán
• Các trình biên dịch và trình liên kết (linker) chuyên dụng được sử dụng
để tối ưu hóa một thiết bị phần cứng
• Một hệ thống nhúng có thể có ngôn ngữ lập trình và công cụ thiết kế riêng của nó hoặc sử dụng và cải tiến từ một ngôn ngữ đã có sẵn
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 dụng về hệ thống nhúng hoặc chuyển đổi từ các công cụ phát triển phần mềm GNU Đôi khi, các công cụ phát triển dành cho máy tính cá nhân cũng được
sử dụng nếu bộ xử lý của hệ thống nhúng đó gần giống với bộ xử lý của một máy
PC thông dụng
1.3.5 Độ tin cậy
Các hệ thống nhúng thường nằm trong các cỗ máy được kỳ vọng là sẽ chạy hàng năm trời liên tục mà không bị lỗi hoặc có thể khôi phục hệ thống khi gặp lỗi Vì thế, các phần mềm hệ thống nhúng được phát triển và kiểm thử một cách cẩn thận hơn là phần mềm cho máy tính cá nhân Ngoài ra, các thiết bị rời không đáng tin cậy như ổ đĩa, công tắc hoặc nút bấm thường bị hạn chế sử dụng Việc khôi phục hệ thống khi gặp lỗi có thể được thực hiện bằng cách sử dụng các
Trang 17kỹ thuật như watchdog timer – nếu phần mềm không đều đặn nhận được các tín hiệu watchdog định kì thì hệ thống sẽ bị khởi động lại
Một số vấn đề cụ thể về độ tin cậy như:
• Hệ thống không thể ngừng để sửa chữa một cách an toàn, ví dụ như ở các hệ thống không gian, hệ thống dây cáp dưới đáy biển, các đèn hiệu dẫn đường,… Giải pháp đưa ra là chuyển sang sử dụng các hệ thống con dự trữ hoặc các phần mềm cung cấp một phần chức năng
• Hệ thống phải được chạy liên tục vì tính an toàn, ví dụ như các thiết bị dẫn đường máy bay, thiết bị kiểm soát độ an toàn trong các nhà máy hóa chất,… Giải pháp đưa ra là lựa chọn backup hệ thống
• Nếu hệ thống ngừng hoạt động sẽ gây tổn thất rất nhiều tiền của ví dụ như các dịch vụ buôn bán tự động, hệ thống chuyển tiền, hệ thống kiểm soát trong các nhà máy …
1.1.4 Tổng quan về kiến trúc phần mềm
Yếu tố quan trọng nhất để xác định kiểu kiến trúc thích hợp nhất cho mỗi
hệ thống được đưa ra là cách điều khiển cần phải có để đáp ứng trên hệ thống Đạt được đáp ứng tốt là khó, phụ thuộc vào không chỉ đáp ứng tuyệt đối các yêu cầu thời gian mà còn phụ thuộc vào tốc độ của bộ vi xử lý và các yêu cầu xử lý khác Một hệ thống ít thực hiện các yêu cầu đáp ứng thời gian của nó và đặc biệt không chặt chẽ có thể được viết với một kiến trúc rất đơn giản Một hệ thống phải đáp ứng nhanh chóng nhiều sự kiện khác nhau và có nhiều yêu cầu xử lý khác nhau, tất cả các giới hạn và các mức ưu tiên khác nhau, sẽ đòi hỏi một kiến trúc phức tạp hơn
Ở đây có 4 kiến trúc:
• Round-Robin: Kiến trúc Round-Robin chỉ có duy nhất một ưu điểm
so với các kiến trúc khác là đơn giản, trong khi có một số vấn đề làm cho
nó không thích hợp với nhiều hệ thống
Trang 18Kiến trúc Round-Robin chỉ có thể thích hợp cho các thiết bị rất đơn giản như đồng hồ số và các lò vi sóng và không thể thích hợp cho các hệ thống khác
• Round-Robin với các ngắt (Round-Robin-with-Interrupts): thiếu sót
cơ bản của kiểu kiến trúc này là tất cả các mã lệnh tác vụ thực thi ở cùng một mức ưu tiên (nhưng hơn kiến trúc Round-Robin là không đơn giản quá)
• Function-queue-scheduling: Kiến trúc function-queue-scheduling là một kiến trúc cũng không phức tạp hơn nhiều
• Hệ điều hành thời gian thực (real-time operating): Sự khác nhau giữa
hệ điều hành thời gian thực và các hệ thống trước là:
- Việc cần thiết báo hiệu giữa các trình ngắt và các mã lệnh tác vụ được xử lý bằng hệ điều hành thời gian thực
- Không lặp trong mã lệnh quyết định cần phải thực hiện tiếp theo Mã lệnh bên trong hệ điều hành thời gian thực quyết định kiểu hàm mã lệnh tác vụ nên thực hiện Hệ điều hành thời gian thực biết về nhiều trình con mã lệnh-tác vụ khác nhau và sẽ thực hiện bất kỳ một trình con khẩn cấp nhất trong số chúng tại thời điểm đã đưa ra
- Hệ điều hành thời gian thực có thể hoãn một trình con mã lệnh tác vụ ở giữa tiến trình xử lý của nó để thực hiện một trình con khác
Nhược điểm chính của kiến trúc hệ điều hành thời gian thực
là bản thân hệ điều hành thời gian thực sử dụng một lượng thời gian xử lý nhất định Sẽ thu được đáp ứng tốt hơn nếu chịu phí tổn
về thông lượng
Trang 191.2 Hệ thống thời gian thực (Real-Time Systems)
1.2.1 Khái niệm
Một hệ thống thời gian thực có đặc điểm sau:
Thực hiện được một hoặc một số nhiệm vụ (task) trong một thời gian qui định Đảm bảo được dù có bất kỳ điều gì xảy ra đối với hệ thống thì số nhiệm vụ trên vẫn hoàn thành trong đúng thời gian đó Cần nhớ hệ RTS gồm: Phần mềm
RT (real-time software hoặc real-time module hay RT toolkit) và Phần cứng RT (real-time hardware) [5]
Một ví dụ kinh điển về một RTS: túi khí (airbag) trên xe hơi là một RTS
Vì khi có cảm biến tai nạn được kích hoạt Túi khí sẽ được bung ra trong một khoảng thời gian rất ngắn (được định trước bởi kỹ sư lập trình) Giả sử nếu túi khí không là một RTS thì tài xế sẽ chết trước khi túi khí bung Ví dụ khác về RTS là bộ điều khiển đánh lửa trong động cơ xăng Tia lửa cần được điều khiển chính xác ở chu kỳ đốt (tức sau khi chu kỳ hút đã hút hỗn hợp ký và xăng vào rồi, tới chu kỳ nén, nén hòa khí xăng-khí lên áp xuất cáo, thì tia lửa mới được phát ra bởi bộ điều khiển RTS) Nếu không đúng thời điểm này thì động cơ sẽ không hoạt động được hoặc hoạt động với hiệu suất rất thấp
Như vậy chúng ta có thể xem, hệ thống thời gian thực là một hệ thống mà
sự hoạt động tin cậy của nó không chỉ phụ thuộc vào sự chính xác của kết quả,
mà còn phụ thuộc vào thời điểm đưa ra kết quả, hệ thống có lỗi khi yêu cầu về
thời gian không được thoả mãn
Hình 1.1: Cấu trúc của các hệ thống thời gian thực
Trang 20Như vậy, vấn đề của lập trình thời gian thực chính là việc thiết kế hệ thống sao cho nó có thể tiếp nhận một cách chính xác các ràng buộc về mặt thời gian trong suốt quá trình các sự kiện ngẫu nhiên và không đồng bộ xảy ra
1.2.2 Các đặc điểm của hệ thống thời gian thực
Một hệ thống thời gian thực có các đặc trưng tiêu biểu sau:
• Ràng buộc thời gian (timing constrainst): Đặc trưng đầu tiên của hệ thống thời gian thực là ràng buộc thời gian hay tính phản ứng nhanh Hệ thống phải xử lý thông tin một cách nhanh chóng để có thể đưa ra kết quả một cách kịp thời Một chương trình không những phải đưa ra kết quả tính toán đúng mà còn phải đưa ra kết quả đúng thời gian Hay nói một cách khác, tính đúng đắn của một chương trình không chỉ phụ thuộc vào kết quả tính toán logic mà còn phụ thuộc vào thời gian mà kết quả này được sinh ra Tổng quát hơn, phần mềm thời gian thực phải thỏa mãn các khẳng định (assertion) thời gian, khẳng định này bao gồm cả quan hệ đối với thời gian tuyệt đối và thời gian tương đối Cách xác nhận đơn giản nhất và phổ biến nhất là một mốc tới hạn (thời hạn) - giới hạn về thời gian tương đối
hoặc tuyệt đối mà một tính toán phải hoàn thành
• Tính bị động: Hệ thống phải phản ứng với các sự kiện xuất hiện vào các thời điểm thường không biết trước Ví dụ, sự vượt ngưỡng của một giá trị
đo, sự thay đổi trạng thái của một thiết bị quá trình phải dẫn đến các phản ứng trong bộ điều khiển
• Tính đồng thời (conccurency): Hệ thống phải có khả năng phản ứng và xử
lý đồng thời nhiều sự kiện diễn ra Có thể, cùng một lúc một bộ điều khiển được yêu cầu thực hiện nhiều vòng điều chỉnh, giám sát ngưỡng giá trị nhiều đầu vào, cảnh giới trạng thái làm việc của một số động cơ Đa số các hệ thống thời gian thực thực hiện một hoặc một tập nhỏ các nhiệm vụ mức cao Sự thực thi các nhiệm vụ mức cao này yêu cầu đồng thời nhiều hoạt động mức thấp hơn Và đây được gọi là tính đồng thời, các hệ thống
Trang 21máy tính sử dụng tính đồng thời để cải thiện thực thi và điều này hoàn toàn có thể thực hiện được trong cả các hệ thống đơn và đa bộ xử lý Các
hệ thống gồm một bộ xử lý chỉ có thể thực hiện được một công việc tại một thời điểm, chúng thực hiện chiến lược lập lịch để điều khiển khi các nhiệm vụ thực thi Còn trong các hệ thống đa bộ xử lý, các bộ xử lý thực thi không đồng bộ, từng bộ xử lý riêng lẻ tạo lập một số luồng giả trùng hợp, chỉ một luồng đơn có thể được thực hiện tại một thời điểm bất kỳ đã cho, nhưng các luồng hoạt động thay đổi theo một số chiến lược lập lịch Nhiều hệ thống cũng sử dụng tính đồng thời như một mô hình để mô tả các hoạt động song song về mặt logic, ngay cả khi các hoạt động này được thực thi bằng cách xen kẽ từng hành động trên một bộ xử lý đơn Hơn nữa, các hệ thống thời gian thực cũng phải giải quyết tính đồng thời về vật lý vốn có và các trùng hợp này là một bộ phận của thế giới thực mà hệ thống được kết nối Các tín hiệu đến từ môi trường có thể đến đồng thời; tách rời theo quy luật tự nhiên và các hành động đồng thời có thể được giám sát và điều khiển bởi một hệ thống máy tính đơn; cần thiết phải biết thời điểm tín hiệu được nhận; và các tín hiệu ra có thể phải được phát tại thời điểm xấp
xỉ với ràng buộc thời gian
• Tính tiền định: Dự đoán trước được thời gian phản ứng tiêu biểu, thời gian phản ứng chậm nhất cũng như trình tự đưa ra các phản ứng Nếu một bộ điều khiển phải xử lý đồng thời nhiều nhiệm vụ, ta phải tham gia quyết định được về trình tự thực hiện các công việc và đánh giá được thời gian
xử lý mỗi công việc Như vậy người sử dụng mới có cơ sở để đánh giá về khả năng đáp ứng tính thời gian thực của hệ thống
1.2.3 Các dạng của hệ thống thời gian thực
Về cơ bản, chương trình có tính thời gian thực phải có khả năng phản ứng lại các sự kiện trong môi trường mà hệ thống làm việc trong khoảng thời gian nhất định cho trước Những hệ thống như vậy được gọi là hệ thống "điều khiển
sự kiện" (hay hệ thống hướng sự kiện event-driven) và có thể được mô tả bằng
Trang 22thời gian trễ tính từ khi sự kiện xảy ra tới khi hệ thống có hoạt động phản ứng lại
sự kiện đó
Thời gian thực, mặt khác, đòi hỏi một giới hạn cao hơn về thời gian trễ,
được gọi là "thời hạn lập lịch" (scheduling deadline) hoặc gọi tắt là thời hạn Hệ thống thời gian thực thường được phân thành hai loại: hệ thống thời gian thực cứng (hard real-time system) và hệ thống thời gian thực mềm (soft real- time
system)
Hệ thống thời gian thực cứng là hệ thống mà các hành động của nó phải
không bao giờ được vi phạm các ràng buộc thời gian trong đó có thời hạn lập lịch, hệ thống phải tiếp nhận và nắm bắt được thời hạn lập lịch của nó tại mọi thời điểm Hệ thống có lỗi hoặc sai sót trong việc tiếp nhận thời hạn sẽ gây ra các hậu quả rất nghiêm trọng, thiệt hại về vật chất, gây ảnh hưởng xấu đến sức khoẻ, đời sống của con người, thậm chí chết người Với hệ thống thời gian thực cứng,
dữ liệu trễ là dữ liệu tồi Một ví dụ về hệ thống thời gian thực cứng là hệ thống kiểm soát không lưu Trong hệ thống này, một phân phối đường bay, thời gian cất cánh, thời gian hạ cánh không hợp lý, không đúng lúc có thể gây ra tai nạn máy bay mà hậu quả của nó khó mà lường trước được Một ví dụ khác, máy hỗ trợ nhịp tim cho bệnh nhân khi phẫu thuật Thuật toán điều khiển phụ thuộc vào thời gian nhịp tim của người bệnh, nếu thời gian này bị trễ, tính mạng của người bệnh sẽ bị ảnh hưởng
Ngược lại, hệ thống thời gian thực mềm là hệ thống có các ràng buộc về
thời gian, tuy nhiên, trong trường hợp các ràng buộc này bị vi phạm, tức là thời gian trả lời của hệ thống vượt quá thời hạn đặt ra, hệ thống vẫn hoạt động được tiếp và kết quả nó tạo ra bị giảm “giá trị” theo một nghĩa nào đó Nói cách khác, những kết quả tạo ra không đúng hạn tuy không hữu ích/không làm hài lòng người sử dụng bằng khi nó được tạo ra đúng hạn nhưng vẫn được chấp nhận Chúng ta mong muốn hệ thống phản ứng lại các sự kiện trong thời gian cho phép nhưng không có gì thực sự nghiêm trọng xảy ra nếu hệ thống thỉnh thoảng bị trễ
Trang 23Lỗi về mặt thời gian có thể chỉ đơn giản là dẫn đến hậu quả giảm độ tin cậy của đối tượng đối với hệ thống mà không có hậu quả thê thảm nào khác xảy ra
Trên thực tế có rất nhiều hệ thống phối hợp cả hai loại trên, trong đó, một phần nào đó của hệ thống làm việc dựa trên hệ thống thời gian thực cứng, một số phần khác lại dựa trên hệ thống thời gian thực mềm
Ta có thể quan niệm hệ thống thời gian thực cứng là hệ thống phải thỏa mãn các ràng buộc cứng về thời gian - ràng buộc thời gian không được phép vi phạm Tương tự, hệ thống thời gian thực mềm là hệ thống phải thỏa các ràng buộc mềm về thời gian - ràng buộc thời gian được phép vi phạm, nhưng các vi phạm sẽ làm giảm giá trị của kết quả Một hệ thống có thể có cả các ràng buộc cứng lẫn ràng buộc mềm về thời gian
1.2.4 Xử lý thời gian thực
Xử lý thời gian thực là hình thức xử lý thông tin trong một hệ thống để đảm
bảo tính năng thời gian thực của nó Như vậy, xử lý thời gian thực cũng có các đặc điểm tiêu biểu nêu trên như tính bị động, tính nhanh nhạy, tính đồng thời và tính tiền định Để có thể phản ứng với nhiều sự kiện diễn ra cùng một lúc, một hệ thống xử lý thời gian thực sử dụng các quá trình tính toán đồng thời
Quá trình tính toán là một tiến trình thực hiện một hoặc một phần chương trình tuần tự do hệ điều hành quản lý trên một máy tính, có thể tồn tại đồng thời với các quá trình khác kể cả trong thời gian thực hiện lệnh và thời gian xếp hàng chờ đợi thực hiện
Các hình thức tổ chức các quá trình tính toán đồng thời:
- Xử lý tương tranh: Nhiều quá trình tính toán chia sẻ thời gian xử lý thông
tin của một bộ xử lý
- Xử lý song song: Các quá trình tính toán được phân chia thực hiện song
song trên nhiều bộ xử lý của hệ thống máy tính
- Xử lý phân tán: Mỗi quá trình tính toán được thực hiện riêng trên một máy
tính
Trang 24Trong các hình thức trên đây thì hình thức xử lý tương tranh có vai trò chủ chốt Mặc dù hệ thống điều khiển có thể có nhiều trạm, và mỗi trạm có thể là một
hệ đa vi xử lý, số lượng các quá trình tính toán cần thực hiện thường bao giờ cũng lớn hơn số lượng vi xử lý Trong khi một vi xử lý không thể thực hiện song song nhiều lệnh, nó phải phân chia thời gian để thực hiện xen kẽ nhiều nhiệm vụ khác nhau theo thứ tự tùy theo mức ưu tiên và phương pháp lập lịch
Trong các hệ thống điều khiển, khái niệm tác vụ (task) cũng hay được sử
dụng bên cạnh quá trình tính toán Có thể nói, tác vụ là một nhiệm vụ xử lý thông tin trong hệ thống có thể thực hiện theo cơ chế tuần hoàn (periodic task) hoặc theo sự kiện (event task) Các dạng tác vụ qui định trong chuẩn IEC 61131-3 (Programmable Controllers – Part3: Programming Languages) Ví dụ, một tác vụ thực hiện nhiệm vụ điều khiển cho một hoặc nhiều mạch vòng kín có chu kỳ trích mẫu giống nhau Hoặc, một tác vụ có thể thực hiện nhiệm vụ điều khiển logic, điều khiển trình tự theo các sự kiện xảy ra Tác vụ có thể thực hiện dưới dạng một quá trình tính toán duy nhất, hoặc một dãy các quá trình tính toán khác nhau
1.2.5 Ứng dụng
Có thể nói, tất các các hệ thống điều khiển là hệ thời gian thực Ngược lại, một số lớn các hệ thống thời gian thực là các hệ thống điều khiển Không có hệ thống điều khiển nào có thể hoạt động bình thường nếu như nó không đáp ứng được các yêu cầu về thời gian, bất kể là hệ thống điều khiển nhiệt độ, điều khiển
áp suất, điều khiển lưu lượng hay điều khiển chuyển động Một bộ điều khiển phải đưa ra được tín hiệu điều khiển kịp thời sau một thời gian nhận được tín hiệu đo để đưa quá trình kỹ thuật về trạng thái mong muốn Một mạng truyền thông trong một hệ thống điều khiển có tính năng thời gian thực phải có khả năng truyền tin một cách tin cậy và kịp thời đối với các yêu cầu của các bộ điều khiển, các thiết bị vào/ra, các thiết bị đo và thiết bị chấp hành Tính năng thời gian thực của một hệ thống điều khiển phân tán không chỉ phụ thuộc vào tính năng thời gian thực của từng thành phần trong hệ thống, mà còn phụ thuộc vào sự phối hợp hoạt động giữa các thành phần đó [5]
Trang 25Hệ thống thời gian thực được ứng dụng phổ biến trong rất nhiều lĩnh vực, như thương mại, quân đội, y tế, giáo dục, cơ sở hạ tầng,… và hiện nay đang phát triển rất mạnh mẽ Ta có thể kể ra một số lĩnh vực ứng dụng tiêu biểu:
- Các hệ thống phương tiện như: xe ô tô, xe điện ngầm, máy bay, tàu hỏa, tàu thủy, …
- Hệ thống điều khiển giao thông trên đường cao tốc, không phận, đường ray, đường dành riêng cho tàu biển, …, ví dụ, hệ thống kiểm soát không lưu
- Hệ thống điều khiển trong các nhà máy: như nhà máy năng lượng, nhà máy hóa chất và các nhà máy sản xuất bia và nước uống có ga, …
- Hệ thống y tế như hệ thống chữa bệnh bằng bức xạ, giám sát bệnh nhân, phục hồi nhịp đập bình thường của tim
- Hệ thống vũ khí quân sự sử dụng trong quân đội tạo các vũ khí cháy nổ, hiệu chỉnh tín hiệu, …
- Hệ thống chế tạo sử dụng robot
- Hệ thống xử lý các luồng Video và Audio
1.3 Thiết kế và phát triển ứng dụng cho hệ thống nhúng
Trong phần này trình bày các vấn đề về thiết kế và phát triển phần mềm nhúng, những khác biệt so với vấn đề thiết kế và phát triển ứng dụng, vấn đề kiểm thử phần mềm nhúng…
Trang 26- Phân bố chức năng cho phần cứng và mềm (hardware (HW) – software (SW))
do vậy xu thế thiết kế các hệ nhúng hiện nay đòi hỏi có khả năng thay đổi mềm dẻo hơn trong quá trình thiết kế hai phần HW và SW Để có được thiết kế cuối cùng tối ưu quá trình thiết kế SW và HW phải phối hợp với nhau chặt chẽ và có thể thay đổi sau mỗi lần thử chức năng hoạt động tổng hợp
Thiết kế các hệ nhúng đòi hỏi kiến thức đa ngành về điện tử, xử lý tín hiệu, vi xử lý, thuật điều khiển và lập trình thời gian thực
Khi thiết kế hệ nhúng có một số vấn đề mà các nhà thiết kế hệ nhúng cần phải đặc biệt xem xét, đó là:
Độ tin cậy: Một hệ nhúng phải đảm bảo được tính tin cậy, nó không thể
phá hủy và cũng không thể được cập nhật
Hiệu suất thực hiện và tiêu thụ năng lượng:
+ Hệ thời gian thực được sử dụng trong nhiều ứng dụng
+ Sản phẩm có thể phải thực thi được trên nguồn năng lượng là pin + Giới hạn về mặt bộ nhớ và sự tiêu thụ điện năng
Về mặt chi phí: Các sản phẩm phải đảm bảo được thị trường tiếp nhận và
tiếp cận nhanh chóng với thị trường Sản phẩm liên quan đến người tiêu dùng nên có tính cạnh tranh về mặt giá cả Vì vậy chi phí sản xuất cần được coi trọng
Trang 271.3.1.2 Nền tảng của hệ thống nhúng
a) Bộ nhớ trong thiết bị nhúng
Hầu hết các thiết bị nhúng hiện tại sử dụng hai kiểu bộ nhớ, DRAM hoặc đôi khi là SRAM cho bộ nhớ chính và bộ nhớ Flash hoặc bộ nhớ ROM cho việc lưu trữ non-volatile như trình bày ở dưới (Cần cả hai loại bộ nhớ volatile và non-volatile memory) [5]
• Bộ nhớ flash thường được sử dụng thay cho các ổ đĩa vì:
o Tiêu hao ít điện năng hơn
o Nhỏ hơn
o Và độ tin cậy cao hơn
• Lưu trữ hệ điều hành và các ứng dụng trong bộ nhớ Flash
Hệ điều hành và các chương trình ứng dụng thường được lưu trong flash,
vì hầu hết các thiết bị nhúng không có ổ đĩa cứng Các ổ đĩa cứng thường đòi hỏi cần có một không gian lớn hơn, và tiêu thụ nhiều điện năng hơn, vì vậy chúng không phải là một lựa chọn thích hợp cho nhiều thiết kế nhúng đặc biệt trong các cầm tay nhỏ và các thiết bị điều khiển bằng pin
• Khởi động từ bộ nhớ flash khi khởi động (bật nguồn)
• Flash rất chậm so với RAM: sao chép mã lệnh từ SRAM hoặc SDRAM để thực thi?
• Cần các công cụ phát triển phần mềm hỗ trợ việc lưu trữ và thực thi
mã lệnh trong ROM
b) Hệ điều hành cho hệ thống nhúng
Chúng ta cần phải có một hệ điều hành cho hệ thống nhúng là do thị trường của các sản phẩm nhúng tăng mạnh nên các nhà sản xuất ngày cần sử dụng các hệ điều hành nhúng để bảo đảm sản phẩm có sức cạnh tranh
Mặt khác hầu hết các thiết bị có phần mềm phức tạp cần hệ điều hành để:
• Hỗ trợ các tác vụ đa nhiệm, lập lịch biểu và đồng bộ hóa các tác vụ
• Hỗ trợ cho một tập các thiết bị vào/ra
Trang 28hệ điều hành nhúng tự tạo và Windows CE
1.3.2 Phần mềm nhúng
Hiện nay phần lớn các phần mềm nhúng nằm trong các sản phẩm truyền thông và các sản phẩm điện tử tiêu dùng, tiếp đến là trong các sản phẩm ô tô, phương tiện vận chuyển, máy móc thiết bị y tế, các thiết bị năng lượng, các thiết
bị cảnh báo bảo vệ và các sản phẩm đo và điều khiển Phần mềm nhúng ngày càng có tỷ lệ giá trị cao trong giá trị của các sản phẩm nhúng
Để có thể tồn tại và phát triển, các sản phẩm công nghiệp và tiêu dùng cần phải thường xuyên đổi mới và ngày càng có nhiều chức năng tiện dụng và thông minh hơn Các chức năng này phần lớn do các chương trình nhúng tạo nên
Trang 291.3.2.1 Vấn đề chung khi viết phần mềm nhúng
Có một số vấn đề cần lưu ý khi viết một phần mềm nhúng, khác với viết các phần mềm ứng dụng:
• Thông lượng (Throughput): Hệ thống có thể cần phải xử lý rất nhiều
dữ liệu trong một khoảng thời gian ngắn
• Đáp ứng (Respond): Hệ thống có thể cần phải tác động trở lại với các
sự kiện một cách nhanh chóng
• Kiểm thử (Testability): Việc đưa ra thiết bị để kiểm thử phần mềm
nhúng có thể rất khó khăn
• Gỡ rối (Debugability): Các hệ thống nhúng có thể không có màn hình
hay bàn phím, nên việc tìm ra những lỗi của phần mềm đang thực hiện
là một vấn đề khó khăn
• Độ tin cậy (Realiability): Các hệ thống nhúng phải có khả năng xử lý
bất kỳ các tình huống mà không có sự can thiệp của con người Cụ thể, trong các tình huống khó xử, phần mềm ứng dụng có thể đưa ra một thông báo và yêu cầu người sử dụng thực hiện một số công việc nào
đó, nhưng các hệ thống nhúng không thể có sự lựa chọn đó, phần mềm phải có khả năng xử lý mà không có sự can thiệp của con người
• Không gian bộ nhớ (Memory Space): Bộ nhớ bị giới hạn trong các hệ
thống nhúng, và thường bị chia sẻ thành hai phần – một phần dùng để lưu trữ chương trình, một phần dùng để lưu trữ dữ liệu Không giống như các ứng dụng cho destop, các chương trình và dữ liệu được lưu trữ trong cung bộ nhớ, các hệ thống nhúng sử dụng các bộ nhớ khác nhau cho các mục đích Vì một hệ thống nhúng điển hình không có ổ đĩa để nạp các chương trình từ đó, các chương trình cần phải được lưu trữ trong bộ nhớ, thậm chí cả khi nguồn nuôi tắt Như vậy hệ thống nhúng cần phải có kiểu bộ nhớ đặc biệt để ghi nhận chương trình ngay cả khi không có nguồn nuôi Tuy nhiên, kiểu bộ nhớ đặc biệt này lại không phù hợp để lưu trữ dữ liệu, do đó các hệ thống nhúng cần phải có bộ
Trang 30nhớ thông thường để lưu trữ dữ liệu Như vậy chúng ta phải làm sao cho phần mềm và dữ liệu khớp với các bộ nhớ đang có
• Cài đặt chương trình (Program Installation): Cần phải có các công cụ
đặc biệt để đưa phần mềm vào trong các hệ thống nhúng
• Sự tiêu hao năng lượng (Power Consumption): Các hệ thống xách tay
thường phải chạy bằng pin hoặc ắcquy và phần mềm trong các hệ thống này nên tiết kiệm năng lượng
• Processor Hogs: Việc tính toán yêu cầu lượng lớn thời gian CPU có
thể làm phức tạp vấn đề đáp ứng
• Chi phí (Cost): Việc giảm chi phí phần cứng là mối quan tâm trong
nhiều dự án xây dựng hệ thống nhúng Các hệ thống nhúng phải đảm bảo là có chi phí sản xuất bé nhất, đáp ứng nhanh nhất yêu cầu thị trường, không có cơ hội chỉnh sửa trong tương lai
1.3.2.2 Các kiến trúc phần mềm hệ thống nhúng
Một số loại kiến trúc phần mềm thông dụng trong các hệ thống nhúng như sau:
Vòng lặp kiểm soát đơn giản
Theo thiết kế này, phần mềm được tổ chức thành một vòng lặp đơn giản Vòng lặp gọi đến các chương trình con, mỗi chương trình con quản lý một phần của hệ thống phần cứng hoặc phần mềm
Loại kiến trúc này thường được sử dụng trong các hệ thống có bộ quản lý
sự kiện đơn giản, ngắn gọn và cần độ trễ thấp Hệ thống này thường thực hiện một tác vụ đơn giản trong một vòng lặp chính Đôi khi, các tác vụ phức tạp hơn
Trang 31sẽ được thêm vào một cấu trúc hàng đợi trong bộ quản lý ngắt để được vòng lặp
xử lý sau đó Lúc này, hệ thống gần giống với kiểu nhân đa nhiệm với các tiến trình rời rạc
Đa nhiệm tương tác
Một hệ thống đa nhiệm không ưu tiên cũng gần giống với kỹ thuật vòng lặp kiểm soát đơn giản ngoại trừ việc vòng lặp này được ẩn giấu thông qua một giao diện lập trình API Các nhà lập trình định nghĩa một loạt các nhiệm vụ, mỗi nhiệm vụ chạy trong một môi trường riêng của nó Khi không cần thực hiện nhiệm vụ đó thì nó gọi đến các tiến trình con tạm nghỉ (bằng cách gọi “pause”,
Đa nhiệm ưu tiên
Ở loại kiến trúc này, hệ thống thường có một đoạn mã ở mức thấp thực hiện việc chuyển đổi giữa các tác vụ khác nhau thông qua một bộ định thời Đoạn
mã này thường nằm ở mức mà hệ thống được coi là có một hệ điều hành và vì thế cũng gặp phải tất cả những phức tạp trong việc quản lý đa nhiệm
Bất kỳ tác vụ nào có thể phá hủy dữ liệu của một tác vụ khác đều cần phải được tách biệt một cách chính xác Việc truy cập tới các dữ liệu chia sẻ có thể được quản lý bằng một số kỹ thuật đồng bộ hóa như hàng đợi thông điệp (message queues), semaphores,… Vì những phức tạp nói trên nên một giải pháp thường được đưa ra đó là sử dụng một hệ điều hành thời gian thực Lúc đó, các nhà lập trình có thể tập trung vào việc phát triển các chức năng của thiết bị chứ không cần quan tâm đến các dịch vụ của hệ điều hành nữa
Trang 32Vi nhân (Microkernel) và nhân ngoại (Exokernel)
Khái niệm vi nhân (microkernel) là một bước tiếp cận gần hơn tới khái niệm hệ điều hành thời gian thực Lúc này, nhân hệ điều hành thực hiện việc cấp phát bộ nhớ và chuyển CPU cho các luồng thực thi Còn các tiến trình người dùng sử dụng các chức năng chính như hệ thống file, giao diện mạng lưới,… Nói chung, kiến trúc này thường được áp dụng trong các hệ thống mà việc chuyển đổi
và giao tiếp giữa các tác vụ là nhanh
Còn nhân ngoại (exokernel) tiến hành giao tiếp hiệu quả bằng cách sử dụng các lời gọi chương trình con thông thường Phần cứng và toàn bộ phần mềm trong hệ thống luôn đáp ứng và có thể được mở rộng bởi các ứng dụng
Nhân khối (monolithic kernels)
Trong kiến trúc này, một nhân đầy đủ với các khả năng phức tạp được chuyển đổi để phù hợp với môi trường nhúng Điều này giúp các nhà lập trình có được một môi trường giống với hệ điều hành trong các máy để bàn như Linux hay Microsoft Windows và vì thế rất thuận lợi cho việc phát triển Tuy nhiên, nó lại đòi hỏi đáng kể các tài nguyên phần cứng làm tăng chi phí của hệ thống Một
số loại nhân khối thông dụng là Embedded Linux và Windows CE Mặc dù chi phí phần cứng tăng lên nhưng loại hệ thống nhúng này đang tăng trưởng rất mạnh, đặc biệt là trong các thiết bị nhúng mạnh như Wireless router hoặc hệ thống định vị GPS Lý do của điều này là:
• Hệ thống này có cổng để kết nối đến các chip nhúng thông dụng
• Hệ thống cho phép sử dụng lại các đoạn mã sẵn có phổ biến như các trình điều khiển thiết bị, Web Servers, Firewalls, …
• Việc phát triển hệ thống có thể được tiến hành với một tập nhiều loại đặc tính, chức năng còn sau đó lúc phân phối sản phẩm, hệ thống có thể được cấu hình để loại bỏ một số chức năng không cần thiết Điều này giúp tiết kiệm được những vùng nhớ mà các chức năng đó chiếm giữ
Trang 33• Hệ thống có chế độ người dùng để dễ dàng chạy các ứng dụng và gỡ rối Nhờ đó, qui trình phát triển được thực hiện dễ dàng hơn và việc lập trình
Vấn đề đặt ra: Chọn kiến trúc phần mềm nào?
Một số đề nghị cho việc chọn kiến trúc phần mềm:
- Chọn kiến trúc đơn giản nhất đáp ứng được yêu cầu Việc viết phần mềm cho hệ thống nhúng cũng đủ phức tạp cho nên không chọn
một kiến trúc phức tạp mà không cần thiết (viết phần mềm cho hệ nhúng đòi hỏi phải có một kiến thức nhất định về phần cứng, không giống như viết các ứng dụng cho desktop)
- Nếu hệ thống của chúng ta phải đáp ứng các yêu cầu mà có thể đòi hỏi phải sử dụng một hệ điều hành thời gian thực, chúng ta nên thiên về việc sử dụng một hệ điều hành thời gian thực
- Có thể tạo ra một kiến trúc lai giữa các kiến trúc trên Ví dụ, nếu ta
sử dụng một hệ thống thời gian thực, có thể có một tác vụ ưu tiên mức thấp thăm dò các phần của phần cứng không cần thiết phải đáp ứng nhanh Tương tự, trong kiến trúc Round-Robin-with-Interrupts, vòng lặp chính có thể thăm dò các phần chậm hơn của phần cứng một cách trực tiếp hơn so với việc đọc các cờ thiết lập bởi các chu trình ngắt
Trong bài toán điều khiển môi trường nhà kính, kiến trúc phần mềm được chọn cho vi điều khiển là vòng lặp kiểm soát đơn giản và hệ thống ngắt điều khiển
Trang 341.3.3 Các công cụ phát triển phần mềm nhúng
Các lập trình viên ứng dụng điển hình thực hiện công việc của họ trên cùng một kiểu máy tính trên đó ứng dụng sẽ chạy Ví dụ như một người viết một chương trình chạy dưới Windows thường thực hiện lập trình trên các máy chạy Windows Sửa đổi chương trình, biên dịch nó, liên kết, thử và gỡ rối, tất cả trên cùng một máy
Sách lược này sẽ phải thay đổi đối với các hệ thống nhúng Đầu tiên, hầu hết các hệ thống nhúng có phần cứng chuyên dụng để gắn với các cảm biến đặc biệt hoặc điều khiển đặc biệt, và chỉ có cách duy nhất tiến hành kiểm tra trên phần cứng chuyên dụng đó Thứ hai, các hệ thống nhúng thường sử dụng các bộ
vi xử lý chưa bao giờ được sử dụng như các trạm làm việc cơ bản Hiển nhiên, các chương trình không biên dịch một cách thần kỳ thành tập lệnh cho mọi bộ vi
xử lý được chọn cho hệ thống, và các chương trình này không thể nhảy một cách thần kỳ vào trong bộ nhớ của hệ thống nhúng để thực thi
Họ ngôn ngữ C được sử dụng cho hầu hết các phát triển của các hệ thống nhúng Hợp ngữ, cũng được sử dụng trong thiết kế nhúng với lý do là có các mã lệnh nhỏ gọn Tuy nhiên, cũng lưu ý rằng đây là biểu đồ chung cho tất cả các thiết kế của các hệ nhúng, việc lựa chọn ngôn ngữ lập trình còn tùy thuộc vào rất nhiều ứng dụng mà chúng ta định phát triển
1.3.4 Các kỹ thuật gỡ rối
Các kỹ thuật để cho các lỗi không xuất hiện trong phần mềm của hệ thống nhúng của chúng ta giống như việc không gây ra cho các phần mềm ứng dụng Tuy nhiên, chúng rất quan trọng vì hai lý do Thứ nhất, kiểm thử và gỡ rối các hệ thống nhúng là bài toán khó khăn và mất nhiều thời gian, thậm chí khó hơn nhiều
so với việc kiểm thử và gỡ rối các ứng dụng Càng ít lỗi càng tốt (càng ít trầm trọng hơn) Thứ hai, mọi người không thể chấp nhận được các lỗi trong hệ thống nhúng Người tiêu dùng có thể mua các ứng dụng cho các máy tính cá nhân thỉnh thoảng bị lỗi nhưng không thể chấp nhận một thiết bị nhúng làm việc hỏng nửa
Trang 35chừng (thiết bị chuyển mạch điện thoại thi thoảng kết nối sai, thiết bị hỗ trợ nhịp tim làm việc lỗi,…)
Việc viết phần mềm ít lỗi quan trọng hơn rất nhiều trong việc triển khai các hệ thống nhúng so với các ứng dụng, vì khách hàng không chấp nhận các lỗi trong các hệ thống nhúng, và các lỗi này rất khó để tìm ra Có nhiều công cụ và
kỹ thuật, chúng ta có thể sử dụng một tổ hợp
1.4 Xu hướng phát triển của các hệ nhúng
Sau máy tính lớn (mainframe), PC và Internet thì hệ thống nhúng đang là làn sóng đổi mới thứ ba trong công nghệ thông tin và truyền thông [1]
Xu hướng phát triển của các hệ thống nhúng hiện nay là:
- Phần mềm ngày càng chiếm tỷ trọng cao và đã trở thành một thành phần cấu tạo nên thiết bị bình đẳng như các phần cơ khí, linh kiện điện tử, linh kiện quang học…
- Các hệ nhúng ngày càng phức tạp hơn đáp ứng các yêu cầu khắt khe về thời gian thực, tiêu ít năng lượng và hoạt động tin cậy ổn định hơn
- Các hệ nhúng ngày càng có độ mềm dẻo cao đáp ứng các yêu cầu nhanh chóng đưa sản phẩm ra thương trường, có khả năng bảo trì từ xa, có tính cá nhân cao
- Các hệ nhúng ngày càng có khả năng hội thoại cao, có khả năng kết nối mạng và hội thoại được với các đầu đo cơ cấu chấp hành và với người sử dụng,
- Các hệ nhúng ngày càng có tính thích nghi, tự tổ chức cao có khả năng tái cấu hình như một thực thể, một tác nhân
- Các hệ nhúng ngày càng có khả năng tiếp nhận năng lượng từ nhiều nguồn khác nhau (ánh sáng, rung động, điện từ trường, sinh học,…) để tạo nên các hệ thống tự tiếp nhận năng lượng trong quá trình hoạt động
1.5 Những thách thức và các vấn đề tồn tại của các hệ nhúng
Hệ thống nhúng hiện nay còn phải đối mặt với các vấn đề sau:
Trang 36- Độ phức tạp của sự liên kết đa ngành phối hợp giữa phần cứng – phần mềm Độ phức tạp của hệ thống tăng cao do nó kết hợp nhiều lĩnh vực đa ngành, kết hợp phần cứng – phần mềm, trong khi các phương pháp thiết kế và kiểm tra chưa chín muồi Khoảng cách giữa lý thuyết và thực hành lớn và còn thiếu các phương pháp và lý thuyết hoàn chỉnh cho khảo sát phân tích toàn cục các hệ nhúng
- Thiếu phương pháp tích hợp tối ưu giữa các thành phần tạo nên hệ nhúng bao gồm lý thuyết điều khiển tự động, thiết kế máy, công nghệ phần mềm, điện
tử, vi xử lý, các công nghệ hỗ trợ khác
- Thách thức đối với độ tin cậy và tính mở của hệ thống: Do hệ thống nhúng thường phải hội thoại với môi trường xung quanh nên nhiều khi gặp những tình huống không được thiết kế trước dễ dẫn đến hệ thống bị loạn Trong quá trình hoạt động một số phần mềm thường phải chỉnh lại và thay đổi nên hệ thống phần mềm có thể không kiểm soát được Đối với hệ thống mở, các hãng thứ ba đưa các module mới, thành phần mới vào cũng có thể gây nên sự hoạt động thiếu tin cậy [1]
1.5 Kết chương
Hệ thống nhúng là vấn đề lớn và chương 1 của luận văn đã tìm hiểu, trình bày những vấn đề chung nhất gồm: hệ thống nhúng, hệ thống thời gian thực cho các hệ thống nhúng, các vấn đề liên quan đến việc thiết kế và phát triển ứng dụng cho hệ thống nhúng
Với hệ thống nhúng, ngoài việc trình bày các khái niệm và ví dụ về hệ thống nhúng còn đưa ra các đặc điểm của hệ thống nhúng và sơ lược về kiến trúc phần mềm trong hệ nhúng
Các hệ thống nhúng điều khiển hầu như là các hệ thống thời gian thực, nên phần tiếp theo tác giả trình bày khái niệm hệ thống thời gian thực, các đặc điểm của hệ thống thời gian thực cùng với các dạng của hệ thống thời gian thực Tiếp theo tác giả trình về các vấn đề liên quan đến thiết kế và phát triển ứng dụng cho hệ thống nhúng, các nền tảng phần cứng, phần mềm của hệ thống
Trang 37Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng Trong hầu hết các hệ thống nhúng đều có các vi điều khiển, từ các thiết bị ứng dụng trong gia đình đến các hệ thống điều khiển thông minh khác Vi điều khiển ngày càng được sử dụng rộng rãi nên nhiều người cũng như nhiều nhà sản xuất đều hướng tới sử dụng vi điều khiển trong các ứng dụng nhúng Vì vậy trong phần tiếp theo của luận văn sẽ trình bày về vi điều khiển AVR, là một trong số các vi điều khiển có nhiều tính năng hấp dẫn đối với việc phát triển các hệ thống nhúng
Trang 38CHƯƠNG 2: VI ĐIỀU KHIỂN AVR
Trong chương này, tôi xin trình bày cấu trúc chung của họ vi điều khiển AVR, một họ vi điều khiển do hãng Atmel sản xuất, về truyền thông nối tiếp không đồng bộ USART với AVR, về chuyển đổi ADC trên AVR, đồng thời cũng trình bày về một số công cụ hỗ trợ cho việc lập trình vi điều khiển ngoài các tập lệnh hợp ngữ
2.1 Vi điều khiển
Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường
được sử dụng để điều khiển các thiết bị điện tử Vi điều khiển, thực chất, là một
hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như
bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số, Ở máy tính thì các module thường được xây dựng bởi các chíp và mạch ngoài [9]
Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng, trong các sản phẩm tự động điều khiển Nó xuất hiện khá nhiều trong các dụng cụ điện
tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v
Hiện nay trên thị trường có nhiều họ vi điều khiển: họ 8048 và 8051 của Intel, 68HC11 của Motorola, Z8 của Zilog, PIC của Micrrochip, H8 của Hitachi,… và cuối cùng phải kể đến là AVR của Atmel Một họ vi điều khiển cho thấy sự có mặt của nhiều loại vi điều khiển khác nhau, với cùng nhân (core) trung tâm cơ sở nhưng khác nhau về các thiết bị ngoại vi, cách đóng vỏ, cách tùy chọn tốc độ hoạt động…
Trên thị trường có hàng trăm loại vi xử lý và vi điều khiển vì thế việc lựa chọn một loại cụ thể cho phù hợp với ứng dụng của chúng ta trở thành một công việc hết sức khó khăn Thông thường người ta bắt đầu bằng việc liệt kê các vi
Trang 39điều khiển dưới dạng tính năng và giá cả, sau đó so sánh với các vi điều khiển có sẵn trên thị trường Quyết định cuối cùng cho việc lựa chọn vẫn còn bị chi phối bởi các yếu tố khác như xu hướng thị trường, diễn biến trong công việc phát triển của công ty, tính thông dụng và kỹ năng thiết kế cục bộ,… [3]
AVR là vi điều khiển có kiến trúc RISC (Reduced Instruction Set Computer) là một kiểu cấu trúc khá phổ biến của bộ xử lý Cấu trúc thanh ghi bên trong chip có độ dài 8 bit
Chíp AVR được lựa chọn cho bài toán điều khiển môi trường nhà kính với
lý do so với các chip vi điều khiển 8 bits khác, AVR có nhiều đặc tính hơn hẳn, hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là về chức năng
- Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi sử dụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thường là các khối thạch anh)
- Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản Một số AVR còn hỗ trợ lập trình on – chip bằng bootloader không cần mạch nạp…
- Nguồn tài nguyên về source code, tài liệu, application note… rất lớn trên internet
- Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C Ngoài ra nó còn tích hợp những đặc tính khá hoàn thiện như: hiệu suất cao hơn, tiết kiệm năng lượng hơn, tốc độ xử lý nhanh hơn, giá thành vừa phải,…
2.2 Kiến trúc của vi điều khiển AVR
Vi điều khiển AVR là bộ xử lý RISC với kiến trúc Harvard (Thuật ngữ
kiến trúc Harvard dùng để chỉ một đặc điểm là đơn vị xử lý trung tâm (CPU) có
bộ nhớ chương trình và một bộ nhớ dữ liệu tách biệt [3]) Họ vi điều khiển AVR
Trang 40lượng lớn, có SRAM (Ram tĩnh) lớn, và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM
• Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn, có SRAM (RAM tĩnh) lớn, và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM
• Nhiều ngõ vào ra (I/O PORT) 2 hướng (bi-directional)
• 8 bits, 16 bits timer/counter tích hợp PWM
• Các bộ chuyển đối Analog – Digital phân giải 10 bits, nhiều kênh
• Chức năng Analog comparator
• Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232)
• Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master và Slaver
• Giao diện nối tiếp Serial Peripheral Interface (SPI)
Họ vi điều khiển AVR được chia làm ba loại, đó là :
1 TinyAVR ( như AT tiny 13, AT tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi
2 AVR (dòng AVR, như AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình
3 MegaAVR (như ATmega32, ATmega128,…) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip
Sự khác nhau cơ bản giữa các dòng chính là cấu trúc ngoại vi, còn nhân thì vẫn như nhau Ví dụ như TinyAVR có số chân hay cấu tạo thu gọn hơn so với các thiết bị MegaAVR khác Nhưng tất cả các thiết bị trong họ AVR đều có chung một tập lệnh, và tổ chức bộ nhớ giống nhau Một số vi điều khiển AVR bao gồm: SRAM, EEPROM và giao tiếp SRAM mở rộng, bộ chuyển đổi tương
tự số (ADC), cấu trúc nhiều tuyến, UART, USART…
Các vi điều khiển MegaAT hay TinyAT đều cùng có chung một nhân AVR