Professional Documents
Culture Documents
BÁO CÁO
ĐỀ TÀI:
HỆ THỐNG NHÚNG
1
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG
1.1. Giới thiệu về hệ thống nhúng
1.2. Lịch sử hình thành và phát triển của hệ thống nhúng
1.3. Ứng dụng của hệ thống nhúng
1.3.1. Ứng dụng trong viễn thông
1.3.2. Ứng dụng trong tự động hóa và điện tử
1.3.3. Ứng dụng trong công nghiệp
1.3.4. Ứng dụng trong y tế
1.3.5. Ứng dụng trong công nghiệp quốc phòng
1.4. Đặc điểm của hệ thống nhúng
1.4.1. Đặc điểm chung của hệ thống nhúng
1.4.2. Đặc điểm chi tiết của hệ thống nhúng
1.4.2.1. Giao diện
1.4.2.2. Bộ vi xử lý trong hệ thống nhúng (CPU)
1.4.2.3. Các thiết bị ngoại vi
1.4.2.4. Công cụ phát triển
1.4.2.5. Độ tin cậy
CHƯƠNG 2: CÁC KIẾN TRÚC PHẦN MỀM CỦA HỆ THỐNG NHÚNG
1.1. Vòng lặp kiểm soát đơn giản
1.2. Hệ thống ngắt điều khiển
1.3. Đa nhiệm tương tác
1.4. Đa nhiệm ưu tiên - đa luồng
1.5. Vi nhân và nhân ngoại - Microkernels and Exokernels
1.6. Nhân khối - Monolithic kernels
CHƯƠNG 3: KIỂM THỬ HỆ THỐNG NHÚNG – DEBUGGING
1.1. Tổng quan về gỡ lỗi trong hệ thống nhúng
1.2. Yêu cầu trong việc gỡ lỗi
1.3. Mẫu hệ thống gỡ lỗi
1.3.1. Những công cụ gỡ lỗi
1.3.1.1. Trình giả lập – Simulators
1.3.1.2. Trình gỡ lỗi từ xa – Remote Debuggers
2
TÀI LIỆU THAM KHẢO
[2] Heath, Steve (2003). Embedded systems design. EDN series for design
engineers (2 ed.). Newnes. p. 2. ISBN 978-0-7506-5546-0. An embedded
system is a microprocessor based system that is built to control a function or a
range of functions.
[4] Shirriff, Ken (30 August 2016). "The Surprising Story of the First
Microprocessors". IEEE Spectrum. Institute of Electrical and Electronics
Engineers. 53 (9): 48–
54. doi:10.1109/MSPEC.2016.7551353. S2CID 32003640. Retrieved 13
October 2019.
https://en.wikipedia.org/wiki/Embedded_system
https://vi.wikipedia.org/wiki/H%E1%BB%87_th%E1%BB%91ng_nh
%C3%BAng
https://vi.wikipedia.org/wiki/
Hệ_thống_nhúng#Các_kiến_trúc_phần_mềm_hệ_thống_nhúng
https://www.ssla.co.uk/embedded-software-architecture/
https://en.wikipedia.org/wiki/
Embedded_system#Embedded_software_architectures
https://slideplayer.com/slide/235681/
https://vi.wikipedia.org/wiki/Monolithic
https://en.wikipedia.org/wiki/Subroutine
3
Chương 1: Tổng quan về hệ thống nhúng
Nguồn gốc của bộ vi xử lý và vi điều khiển bắt nguồn từ mạch tích hợp
MOS, là một chip mạch tích hợp được chế tạo từ MOSFETs (bóng bán dẫn hiệu
ứng trường kim loại-oxit-bán dẫn) và được phát triển vào đầu những năm
1960. Đến năm 1964, chip MOS đã đạt đến mật độ bóng bán dẫn cao hơn và chi
phí sản xuất thấp hơn so với chip lưỡng cực. Các chip MOS tăng thêm độ phức tạp
4
với tốc độ được dự đoán bởi định luật Moore, dẫn đến tích hợp quy mô lớn (LSI)
với hàng trăm bóng bán dẫn trên một chip MOS duy nhất vào cuối những năm
1960. Ứng dụng của chip MOS LSI vào máy tính là cơ sở cho các bộ vi xử lý đầu
tiên, khi các kỹ sư bắt đầu nhận ra rằng một hệ thống vi xử lý máy tính hoàn chỉnh
có thể được chứa trên một số chip MOS LSI. [4]
Một trong những hệ thống nhúng hiện đại đầu tiên được công nhận là máy
tính hướng dẫn Apollo, được phát triển vào năm 1965 bởi Charles Stark
Draper tại phòng thí nghiệm dụng cụ MIT. Vào năm 1961, Hệ thống nhúng được
sản xuất hàng loạt là máy tính dẫn đường Autonetics D-17 cho tên lửa Minuteman.
Khi Minuteman II đi vào sản xuất năm 1966, D-17 đã được thay thế bằng một máy
tính mới đại diện cho độ cao đầu tiên khối lượng sử dụng của các mạch tích hợp.
Kể từ những ứng dụng ban đầu này vào những năm 1960, các hệ thống
nhúng đã giảm giá và có sự gia tăng đáng kể về sức mạnh và chức năng xử lý. Bộ
vi xử lý đầu tiên, Intel 4004 (1971), được thiết kế cho máy tính và các hệ thống
nhỏ khác nhưng vẫn yêu cầu bộ nhớ ngoài và chip hỗ trợ. Vào đầu những năm
1980, các thành phần bộ nhớ, đầu vào và đầu ra của hệ thống đã được tích hợp vào
cùng một con chip với bộ xử lý tạo thành một bộ vi điều khiển. Bộ vi điều khiển
tìm các ứng dụng mà một máy tính đa năng sẽ quá tốn kém. Khi chi phí của bộ vi
xử lý và vi điều khiển giảm, sự phổ biến của các hệ thống nhúng tăng lên.
Ngày nay, một bộ vi điều khiển tương đối rẻ có thể được lập trình để thực
hiện vai trò tương tự như một số lượng lớn các thành phần riêng biệt. Với bộ vi
điều khiển, việc thay thế, ngay cả trong các sản phẩm tiêu dùng, các linh kiện
tương tự dạng núm vặn đắt tiền như chiết áp và tụ điện có nút lên / xuống hoặc nút
bấm được bộ vi xử lý đọc ra đã trở nên khả thi. Mặc dù trong bối cảnh này, một hệ
thống nhúng thường phức tạp hơn một giải pháp truyền thống, phần lớn sự phức
tạp được chứa trong chính bộ vi điều khiển. Có thể cần rất ít thành phần bổ sung và
phần lớn công sức thiết kế là ở phần mềm. Quá trình thử nghiệm và nguyên mẫu
phần mềm có thể nhanh hơn so với việc thiết kế và xây dựng một mạch mới không
sử dụng bộ xử lý nhúng.
5
Hệ thống nhúng thường được tìm thấy trong các ứng dụng tiêu dùng, công
nghiệp, ô tô , thiết bị gia dụng , y tế, viễn thông, thương mại, hàng không và quân
sự.
6
Các thiết bị không dây thu nhỏ được gọi là motes là các cảm biến không dây
được nối mạng. Mạng cảm biến không dây tận dụng khả năng thu nhỏ nhờ thiết
kế vi mạch tiên tiến để ghép nối các hệ thống con không dây đầy đủ với các
cảm biến tinh vi, cho phép mọi người và các công ty đo lường vô số sự vật
trong thế giới vật lý và hành động dựa trên thông tin này thông qua các hệ
thống giám sát và điều khiển. Những động cơ này hoàn toàn khép kín và thường
sẽ cạn nguồn pin trong nhiều năm trước khi pin cần được thay đổi hoặc sạc.
7
1.3.4. Ứng dụng trong y tế
Thiết bị y tế sử dụng các hệ thống nhúng để theo dõi các hình ảnh y sinh
khác nhau như: PET, chụp cắt lớp vi tính phát xạ đơn photon (SPECT), CT và
MRI để kiểm tra nội bộ. Hệ thống nhúng trong thiết bị y tế thường được cung
cấp bởi máy tính công nghiệp.
8
1.3.5. Ứng dụng trong công nghiệp quốc phòng
Hệ thống nhúng được sử dụng cho các hệ thống quan trọng về an toàn trong
hàng không vũ trụ và các ngành công nghiệp quốc phòng. Trừ khi được kết nối
với mạng có dây hoặc không dây thông qua mạng di động 3G trên chip hoặc
các phương pháp khác cho mục đích giám sát và điều khiển IoT, các hệ thống
này có thể được cách ly khỏi bị hack và do đó an toàn hơn. Để an toàn cháy nổ,
các hệ thống có thể được thiết kế để có khả năng xử lý nhiệt độ cao hơn và tiếp
tục hoạt động. Trong việc giải quyết vấn đề bảo mật, các hệ thống nhúng có thể
tự cung cấp và có thể đối phó với các hệ thống điện và thông tin liên lạc bị cắt.
9
1.4. Đặc điểm của hệ thống nhúng
Hệ thống nhúng được thiết kế để đảm nhận một số nhiệm vụ chuyên dụng
chứ không đóng vai trò là các 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ố khác không có điều kiện ràng buộc chặt chẽ, cho phép hệ thống phần cứng được
đơn giản hóa và giảm thiểu giá thành.
Hệ thống nhúng không chỉ là những thiết bị độc lập mà chúng còn là một hệ
thống phức tạp nằm trong thiết bị mà chúng điều khiển để phục vụ một mục đích
chung.
Phần mềm được viết cho hệ thống nhúng được lưu trữ trong ROM hoặc bộ
nhớ flash. Chúng được chạy với tài nguyên bộ cứng hạn chế: dung lượng bộ nhớ
thấp, nhỏ, không bàn phím hay màn hình.
10
Một số hệ thống nhúng có thể không có giao diện (các hệ thống đơn
nhiệm) hoặc có đầy đủ hệ thống giao diện như hệ điều hành trong máy tính
hiện đại. Các hệ thống nhúng đơn giản sử dụng nút bấm, đèn LED, hiển thị
cỡ chử nhỏ hoặc hiển thị chỉ số thường đi với menu cơ bản. Một số thiết bị
phức tạp hơn sử dụng màn hình đồ họa, cảm ứng hoặc có nút bấm ở lề màn
hình tạo ra sự tiện dụng, đồng thời tối ưu hóa không gian trên thiết bị, ý 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 dựa trên nhu
cầu của người dùng.
Một số hệ thống có thể điều khiển từ xa nhờ việc trao đổi thông tin dữ
liệu ( ví dụ: RS-232) hoặc qua kết nối internet. Sự phát triển mạnh mẽ của
mạng toàn cầu đã mang đến cho những nhà thiết kế hệ nhúng một tiềm năng
mới để phát triển hệ thống nhúng thông qua việc sử dụng giao diện web.
11
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á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
chung 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.
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
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)
Bộ điều khiển giao diện mạng: Ethernet, WiFi, …
Bộ định thời: PLL(s), Capture/Compare và Time Processing Units
12
Discrete IO: General Purpose Input/Output (GPIO)
13
1.4.2.4. Công cụ phát triển
Tương tự với các sản phẩm phần mềm khác, các nhà thiết kế hệ thống
nhúng 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ỡ lỗi (debuggers) nhằm phát triển phần mềm
hệ thống nhúng. Tuy nhiên, họ cũng sử dụng một số công cụ chuyên dụng:
Bộ gỡ rối mạch hoặc các chương trình mô phỏng (emulator)
Hệ thống nhúng có thể kiểm tra tính hợp lệ của chương trình nhờ
vào việc thêm các giá trị checksum hoặc CRC vào 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 thuật toán.
Các trình biên dịch và linker (trình liên kết) chuyên dụng có thể
đượ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ách làm khác là thêm vào hệ điều hành thời gian thực hoặc hệ
điều hành hệ thống nhúng.
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
14
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.
Các hệ thống nhúng thường được kỳ vọng sẽ chạy hàng năm trời mà
không bị lỗi hoặc có thể tự khôi phục hệ thống khi có lỗi, chính vì vậy các
phần mềm hệ thống nhúng được phát triển và kiểm thử một cách vô cùng cẩn
thậ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 kỹ 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: 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: lựa chọn backup hệ thống.
Nếu hệ thống ngừng hoạt động sẽ gây thất thoá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,...
15
Hiện nay, có rất nhiều kiểu kiến trúc phần mềm hệ thống nhúng khác nhau
đang được sử dụng một cách phổ biến, dưới đây là các kiểu kiến trúc điển hình:
Ở kiểu thiết kế này, các phần mềm sử dụng những vòng lặp, trong đó
các vòng lặp này gọi đến các chương trình con – thứ chịu trách nhiệm quản lý một
phần của phần cứng hoặc phần mềm.
16
(Sơ đồ ví dụ về thường trình dịch vụ ngắt (ISR))
Đa nhiệm tương tác hay còn có tên gọi khác là đa nhiệm không ưu tiên (non-
preemptive multitasking). Hiểu một cách cơ bản, nó là một kiểu đa nhiệm của máy
tính mà trong đó hệ điều hành không bao giờ khởi tạo chuyển đổi nội dung của một
tiến trình đang chạy sang một tiến trình khác. Nói cách khác, các nhà lập trình sẽ
định nghĩa một loạt các nhiệm vụ, mỗi nhiệm vụ sẽ chạy trong một môi trường
riêng của nó. Khi không cần thực hiện nữa, nó gọi đến các tiến trình con tạm nghỉ
(bằng cách gọi “pause”, “wait”, etc.)
Đa nhiệm tương tác khá giống với kỹ thuật vòng lặp kiểm soát đơn giản, do
đó ưu và nhược điểm của 2 loại kiến trúc này về cơ bản là như nhau. Tuy nhiên,
việc thêm một phần mềm mới thì có thể được thực hiện một cách dễ dàng bằng
cách lập trình một tác vụ mới hoặc thêm vào hàng đợi thông dịch (queue-
17
interpreter), thứ sẽ trở nên rất phức tạp khi đưa vào một vòng lặp kiểm soát đơn
giản có trước.
Ở loại kiến trúc này, hệ thống sử dụng một đoạn mã đơn giản có nhiệm vụ
chuyển đổi giữa các tác vụ hoặc luồng khác nhau thông qua một bộ định thời. Như
vậy, hệ thống được coi như là có một nhân “hệ điều hành” mà hệ điều hành ở đây
chính là đoạn mã đơn giản kia.
Bất kì tác vụ nào có thể gây hại đến một tác vụ riêng biệt khác đều cần phải
được tách biệt một cách chính xác. Do đó, 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. Từ đó, tính linh hoạt về mức độ phức tạp từ việc
quản lý nhiều tác vụ chạy song song được tăng đáng kể, và 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.
18
Sơ đồ so sánh giữa đa nhiệm tương tác và đa nhiệm ưu tiên, các tác vụ của
đa nhiệm tương tác được thực hiện dưới dạng vòng lặp vô hạn, ở đa nhiệm ưu tiên
các tác vụ được thực hiện tuần tự bởi một hệ điều hành riêng, nếu tác vụ tốn quá
nhiều thời gian thì sẽ được cân nhắc gián đoạn, tuy nhiên ở đa nhiệm tương tác thì
bắt buộc phải chia chúng ra.
Trong khoa học máy tính nói chung, một vi nhân thường được biết đến như
là lượng phần mềm gần như tối thiểu có thể cung cấp các cơ chế cần thiết để tạo ra
một hệ điều hành. Trong hệ thống nhúng cũng vậy, khái niệm vi nhân đóng vai trò
như một bước tiến gần hơn khái niệm hệ điều hành thời gian thực. 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.
Vi nhân là kiểu kiến trúc mà “dùng nhanh thì rất uy tín còn dùng chậm thì
tạch” khi nó rất hữu dụng trong việc chuyển đổi giao tiếp giữa các tác vụ nhanh
còn chậm thì lại là một câu chuyện khác.
Về nhân ngoại, chúng giải quyết vấn đề liên quan đến hiệu quả hoạt động bằng
cách giao tiếp một cách hiệu quả bằng việc 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 sẽ luôn đáp ứng và có thể được
mở rộng bởi các ứng dụng.
Về định nghĩa, một nhân khối là một kiến trúc hệ điều hành có nhiệm vụ thực
hiện toàn bộ mã hệ điều hành trong cùng một địa chỉ bộ nhớ để tăng hiệu năng hệ
thống. Trong kiến trúc này, nó là một nhân đầy đủ có khả năng phức tạp được
chuyển đổi để phù hợp với môi trường nhúng. Từ đó, nó sẽ giúp các nhà lập trình
có được một môi trường như là một hệ điều hành (Linux hoặc Microsoft Windows)
thu nhỏ và theo đó rất thuận lợi cho việc phát triển. Tuy nhiên, điểm yếu của kiến
trúc này là nhân lại đòi hỏi một lượng lớn tài nguyên hệ thống để tăng chi phí hệ
thống.
19
Chi phí tăng lên là thế nhưng loại hệ thống nhúng này đang rất được ưa
chuộng, đặ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.
Trình gỡ lỗi được cho là một chương trình máy tính nhằm phát hiện và xóa
các lỗi có trong các chương trình khác. Nó được sử dụng để xác định liệu rằng
chương trình có đang chạy chính xác, cùng với đó xác định nguyên nhân của lỗi
khi chưa hoàn thành chính xác chức năng của nó.
Gỡ lỗi hệ thống nhúng là một kỹ thuật quan trọng để tìm và loại bỏ những
lỗi có trong chương trình.
Memory substitution: Việc thay thế bộ nhớ ROM cùng với RAM làm
tăng tốc độ tải xuống mã, gỡ và sửa chữa lỗi.
Real-time analysis: Phân tích thời gian thực theo dòng mã trong thời
gian thực với phân tích theo dõi thời gian thực
Luồng dữ liệu được đưa từ công cụ gỡ lỗi đại diện cho bản ký hiệu thông tin
cho phép ánh xạ thông tin đến các cấu trúc mức nguồn. Bất kỳ hệ thống gỡ lỗi nào
cũng thực thi hai quy trình sau:
20
Chương trình thử nghiệm (Test program)
Trình gỡ lỗi (Debugger)
Gỡ lỗi là một hoạt động cần thiết trong quá trình phát triển của hệ thống
nhúng.
21
1.3.1. Trình giả lập – Simulators
22
Trình gỡ lỗi từ xa được sử dụng để giám sát hay điều khiển phần mềm
nhúng nhằm thực thi và gỡ lỗi phần mềm nhúng qua một liên kết truyền thông.
Chương trình chạy trên máy chủ của trình gỡ lỗi từ xa có giao diện người dùng
giống như bất kỳ trình gỡ lỗi nào khác mà bạn có thể đã sử dụng. Màn hình gỡ lỗi
chính thường là giao diện dòng lệnh hoặc giao diện người dùng đồ họa (GUI).
Trình gỡ lỗi GUI thường chứa một số cửa sổ nhỏ hơn để hiển thị đồng thời phần
đang hoạt động của mã nguồn, nội dung đăng ký hiện tại và thông tin liên quan
khác về việc thực thi chương trình. Lưu ý rằng trong hệ thống nhúng, trình gỡ lỗi
và phần mềm được gỡ lỗi đang thực thi trên hai hệ thống máy tính khác nhau. Nó
hỗ trợ mức độ tương tác cao hơn giữa máy chủ và máy đích:
Các điểm ngắt phần mềm (Breakpoints).
Đọc / ghi thanh ghi hoặc dữ liệu tại địa chỉ xác định.
Trình gỡ lỗi từ xa là một trong những công cụ tải xuống và kiểm tra được sử
dụng phổ biến nhất trong quá trình phát triển phần mềm nhúng. Điều này chủ yếu
là do giá của một trình gỡ lỗi từ xa không cộng thêm đáng kể vào chi phí của một
bộ công cụ phát triển chéo (trình biên dịch, trình liên kết, trình định vị, ...). Tuy
nhiên, có một số nhược điểm khi sử dụng trình gỡ lỗi từ xa, bao gồm cả việc không
thể gỡ lỗi mã khởi động. Một bất lợi khác là mã phải thực thi từ RAM, vì vậy, hệ
thống này yêu cầu một bộ xử lý đích để chạy gói phần mềm cuối cùng.
23