You are on page 1of 44

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA VIỄN THÔNG 1

š›kš›
-----

BÁO CÁO TIỂU LUẬN


Xác định Hệ thống - Tạo Kiến trúc và Lập hồ sơ Thiết kế
Các giai đoạn cuối cùng của thiết kế nhúng: Thực hiện và Kiểm
tra

Giảng viên: TS. Nguyễn Thu Hiên


Nhóm học – nhóm con: 05 -17
Thành viên nhóm:
1. Bùi Đức Cường - B19DCVT033 (Nhóm trưởng )
2. Trần Ngọc Khánh - B19DCVT201
3. Ngô Thị Thu Thủy - B19DCVT401
4. Trình Văn Lâm - B19DCVT217

Hà Nội - 2021
MỤC LỤC
Chương 1: Xác Định Hệ thống – Tạo kiến trúc và lập hồ sơ thiết kế………………..1
Tóm tắt………………………………...………………………………………………2
Vấn đề………………………………………………………...……………………….2
Chương 2: Các giai đoạn cuối cùng của thiết kế nhúng: Thực hiện và Kiểm tra.......4
2.1 Thực hiện thiết kế..……………………………………………………..…………4

2.1.1 Công cụ tiện ích phần mềm chính: Viết mã trong trình soạn thảo hoặc IDE.......5

2.1.2 Thiết kế có sự hỗ trợ của máy tính (CAD) và phần cứng………………………6

2.1.3 Công cụ dịch — Bộ tiền xử lý, Phiên dịch, Trình biên dịch và các liên kết……8

2.1.4 Công cụ gỡ lỗi..………………………….…………………………..………..12

2.1.5 Khởi động hệ thống…………………………………………………………...21

2.2 Đảm bảo chất lượng và kiểm tra thiết kế…………………….………………...35

2.3 Kết luận: Duy trì hệ thống nhúng và hơn thế nữa………….…………………39

Các vấn đề……………………………………………………………………………41


Chương 1

Xác định Hệ thống — Tạo Kiến trúc và lập hồ sơ thiết kế

Trong chương này


f Xác định các giai đoạn tạo kiến trúc hệ thống nhúng
f Giới thiệu về chu kỳ kinh doanh kiến trúc và ảnh hưởng của nó đối với kiến trúc
f Mô tả cách tạo và ghi lại một kiến trúc
f Giới thiệu cách đánh giá và thiết kế ngược một kiến trúc

Chương này nói về việc cung cấp cho người đọc một số quy trình và kỹ thuật thực tế có đã
được chứng minh là hữu ích trong những năm qua. Việc xác định hệ thống và kiến trúc của
nó, nếu được thực hiện đúng, là giai đoạn phát triển khó khăn nhất và quan trọng nhất trong
toàn bộ chu kỳ phát triển. Hình 11-1 cho thấy các giai đoạn phát triển khác nhau được xác
định bởi: Mô hình vòng đời thiết kế và phát triển hệ thống nhúng

Phản hồi
kết hợp

Đánh giá &


Nhận phản hồi
Giai đoạn 1: Tạo Kiến trúc

Giai đoạn 2: Triển khai Kiến trúc

Phản hồi kết hợp

Hình 1-1: Thiết kế hệ thống nhúng


và Mô hình Vòng đời Phát triển

Mô hình này chỉ ra rằng quá trình thiết kế một hệ thống nhúng và thiết kế đó
ra thị trường có bốn giai đoạn:
• Giai đoạn 1. Tạo Kiến trúc, là quá trình lập kế hoạch thiết kế hệ thống nhúng.
• Giai đoạn 2. Triển khai Kiến trúc , là quá trình phát triển hệ thống nhúng.
• Giai đoạn 3. Kiểm tra Hệ thống , là quá trình kiểm tra hệ thống nhúng cho vấn đề,
và sau đó giải quyết những vấn đề đó.

1
• Giai đoạn 4. Bảo trì Hệ thống , là quá trình triển khai phần mềm nhúng hệ thống
vào hiện trường và cung cấp hỗ trợ kỹ thuật cho người dùng thiết bị đó để thời gian
tồn tại của thiết bị.

Mô hình này cũng chỉ ra rằng thời gian quan trọng nhất được dành cho giai đoạn 1, tạo ra
kiến trúc. Ở giai đoạn này của quá trình, không có bo mạch nào được chạm vào và không
có phần mềm nào được mã hóa. Đó là việc dành toàn bộ sự chú ý, sự tập trung và các kỹ
năng điều tra để thu thập thông tin về thiết bị sẽ được phát triển, hiểu những lựa chọn nào
tồn tại và ghi lại những phát hiện đó. Nếu việc chuẩn bị đúng được thực hiện trong việc
xác định kiến trúc của hệ thống, xác định các yêu cầu, hiểu các rủi ro, v.v. thì các giai đoạn
phát triển, kiểm tra và bảo trì thiết bị còn lại sẽ đơn giản hơn, nhanh hơn và rẻ hơn. Tất
nhiên, điều này đòi hỏi các kỹ sư chịu trách nhiệm phải có các kỹ năng cần thiết.

Tóm lại, nếu giai đoạn 1 được thực hiện chính xác, thì sẽ ít thời gian bị lãng phí hơn cho
việc giải mã mã không đáp ứng yêu cầu hệ thống hoặc đoán ý định của nhà thiết kế, điều
này thường dẫn đến nhiều lỗi hơn và nhiều công việc hơn. Điều đó không có nghĩa là quá
trình thiết kế luôn thuận buồm xuôi gió. Thông tin thu thập được có thể không chính xác,
các thông số kỹ thuật có thể thay đổi, v.v., nhưng nếu nhà thiết kế hệ thống có kỷ luật,
chuẩn bị và có tổ chức về mặt kỹ thuật, các rào cản mới có thể được nhận ra và giải quyết
ngay lập tức. Điều này dẫn đến một quá trình phát triển ít căng thẳng hơn nhiều, ít lãng phí
thời gian và tiền bạc hơn. Quan trọng nhất, dự án, từ quan điểm kỹ thuật, gần như chắc
chắn sẽ kết thúc thành công.

Tóm tắt
Chương này giới thiệu một quy trình đơn giản để tạo ra một kiến trúc hệ thống nhúng bao
gồm sáu giai đoạn chính: có nền tảng kỹ thuật vững chắc (giai đoạn 1), hiểu được chu trình
kinh doanh kiến trúc của hệ thống (giai đoạn 2), xác định các mẫu kiến trúc và mô hình
tương ứng (giai đoạn 3), xác định cấu trúc kiến trúc (giai đoạn 4), lập hồ sơ kiến trúc (giai
đoạn 5), và phân tích đánh giá kiến trúc (giai đoạn 6). Nói tóm lại, quá trình này sử dụng
một số cơ chế hữu ích nhất của các phương pháp tiếp cận kiến trúc công nghiệp phổ biến
khác nhau. Người đọc có thể sử dụng các cơ chế này như một điểm khởi đầu để hiểu nhiều
cách tiếp cận khác nhau, cũng như để tạo ra một kiến trúc hệ thống nhúng dựa trên cách
tiếp cận thực dụng, đơn giản này.

Chương tiếp theo và cuối cùng - Chương 2, thảo luận về các giai đoạn còn lại của thiết kế
hệ thống nhúng: triển khai kiến trúc, kiểm tra thiết kế và các vấn đề về khả năng bảo trì
của thiết kế sau khi triển khai.

Chương 1: Vấn đề
1. Vẽ và mô tả bốn giai đoạn của Mô hình Vòng đời Thiết kế và Phát triển Hệ thống Nhúng.
2. [a] Trong bốn giai đoạn, giai đoạn nào được coi là khó khăn và quan trọng nhất?
[b] Tại sao?
3. Sáu giai đoạn trong việc tạo ra một công trình kiến trúc là gì?
4. [a] ABC của hệ thống nhúng là gì?

2
[b] Vẽ và mô tả chu trình.
5. Liệt kê và xác định bốn bước của Giai đoạn 2 của việc tạo kiến trúc.
6. Kể tên bốn loại ảnh hưởng đến quá trình thiết kế của một hệ thống nhúng.
7. Phương pháp nào ít được khuyến nghị nhất để thu thập thông tin từ các ảnh hưởng của
ABC?
A. Mô hình máy trạng thái hữu hạn.
B. Các kịch bản.
C. Qua điện thoại.
D. Trong một e-mail.
E. Tất cả những điều trên.
8. Kể tên và mô tả bốn ví dụ về các đặc điểm chung của ABC từ năm ảnh hưởng khác nhau.
9. [a] Nguyên mẫu là gì?
[b] Làm thế nào một nguyên mẫu có thể hữu ích?
10. Sự khác biệt giữa kịch bản và chiến thuật là gì?
11.Trong Hình 1-2, liệt kê và xác định các thành phần chính của một kịch bản.

Các biện pháp phản hồi của hệ thống (độ trễ


trong phản ứng với đầu vào của người dùng,
khôi phục từ lỗi của người dùng, mức độ hài
lòng của người dùng, v.v.)

Nguồn kích thích bên ngoài (người


dùng: nhân viên bán hàng, kỹ sư ứng Yếu tố bị ảnh hưởng
dụng hiện trường, khách hàng, v.v.) Kích thích sự thân thiện với (Hệ thống nhúng)
người dùng (học cách sử
dụng hệ thống, cập nhật hệ
thống, v.v.)
Phản hồi hệ thống (kết quả đầu ra phù
hợp với đầu vào của người dùng, v.v.)
Môi trường
(tại hiện trường.)

Hình 1-2: Kịch bản chung về mức độ thân thiện với người dùng của ABC

12. [T / F] Một yêu cầu có thể có nhiều chiến thuật.


13. Sự khác biệt giữa mô hình kiến trúc và mô hình tham chiếu là gì?
14. [a] Mô hình “4 + 1” là gì?
[b] Tại sao nó hữu ích?
[c] Liệt kê và xác định cấu trúc tương ứng với mô hình “4 + 1”.
15. [a] Quy trình ghi lại một kiến trúc là gì?
[b] Làm thế nào một cấu trúc cụ thể có thể được ghi lại?
16. [a] Liệt kê và xác định hai cách tiếp cận phổ biến để phân tích và đánh giá một
ngành kiến trúc?
[b] Đưa ra ít nhất năm ví dụ trong thế giới thực về một trong hai.
17. Sự khác biệt giữa cách tiếp cận thuộc tính chất lượng định tính và định lượng là gì?
18. Năm bước được giới thiệu trong văn bản là một phương pháp để xem xét một
ngành kiến trúc?

3
CHƯƠNG 2

Các giai đoạn cuối cùng của thiết kế nhúng: Thực hiện và Kiểm tra

Trong chương này


f Xác định các khía cạnh chính của việc triển khai kiến trúc hệ thống nhúng
f Giới thiệu các phương pháp đảm bảo chất lượng
f Thảo luận về việc bảo trì hệ thống nhúng sau khi triển khai
f Kết luận của cuốn sách

2.1 Thực hiện thiết kế


Có tài liệu kiến trúc rõ ràng giúp các kỹ sư và lập trình viên trong nhóm phát triển triển
khai một hệ thống nhúng phù hợp với các yêu cầu. Trong suốt cuốn sách này, các đề xuất
trong thế giới thực đã được đưa ra để triển khai các thành phần khác nhau của thiết kế đáp
ứng các yêu cầu này. Ngoài việc hiểu các thành phần và khuyến nghị này, điều quan trọng
là phải hiểu những công cụ phát triển nào có sẵn để hỗ trợ việc triển khai một hệ thống
nhúng. Việc phát triển và tích hợp các thành phần phần cứng và phần mềm khác nhau của
hệ thống nhúng có thể thực hiện được thông qua các công cụ phát triển cung cấp mọi thứ
từ tải phần mềm vào phần cứng đến cung cấp quyền kiểm soát hoàn toàn đối với các thành
phần hệ thống khác nhau.

Các hệ thống nhúng thường không được phát triển trên một hệ thống - ví dụ:
Bo mạch kho của hệ thống nhúng — nhưng thường yêu cầu ít nhất một hệ thống máy tính
khác được kết nối với nền tảng nhúng để quản lý sự phát triển của nền tảng đó. Nói tóm
lại, môi trường phát triển thường được tạo thành từ mục tiêu (hệ thống nhúng đang được
thiết kế) và máy chủ (PC, Sparc Station hoặc một số hệ thống máy tính khác nơi mã thực
sự được phát triển). Mục tiêu và máy chủ được kết nối bằng một số phương tiện truyền
dẫn, khi nối tiếp, Ethernet hoặc phương pháp khác. Nhiều công cụ khác, chẳng hạn như
các công cụ tiện ích để ghi EPROMs hoặc các công cụ gỡ lỗi, có thể được sử dụng trong
môi trường phát triển cùng với máy chủ và mục tiêu. (Xem Hình 2-1.)

Công cụ gỡ lỗi
Bảng mục tiêu

Phương tiện truyền dẫn


Hệ
thống
mục
Phương tiện truyền dẫn
tiêu

Hình 2.1: Môi trường phát triển

4
Các công cụ phát triển quan trọng trong thiết kế nhúng có thể được đặt trên máy chủ, trên
đích hoặc có thể tồn tại độc lập. Các công cụ này thường thuộc một trong ba loại: tiện ích,
công cụ dịch và gỡ lỗi. Các công cụ tiện ích là các công cụ chung hỗ trợ phát triển phần
mềm hoặc phần cứng, chẳng hạn như trình soạn thảo (để viết mã nguồn), VCS (Phần mềm
kiểm soát phiên bản) để quản lý các tệp phần mềm, trình ghi ROM cho phép đưa phần
mềm vào ROM, v.v. . Các công cụ dịch chuyển mã mà nhà phát triển dự định cho mục tiêu
thành một dạng mà mục tiêu có thể thực thi và các công cụ gỡ lỗi có thể được sử dụng để
theo dõi và sửa lỗi trong hệ thống. Tất cả các loại công cụ phát triển đều quan trọng đối với
một dự án như thiết kế kiến trúc, bởi vì nếu không có các công cụ phù hợp, việc triển khai
và gỡ lỗi hệ thống sẽ rất khó khăn, nếu không muốn nói là không thể.

2.1.1 Công cụ tiện ích phần mềm chính: Viết mã trong trình soạn thảo hoặc IDE Mã
nguồn thường được viết bằng một công cụ như trình soạn thảo văn bản ASCII tiêu chuẩn
hoặc Môi trường phát triển tích hợp (IDE) nằm trên nền tảng máy chủ (phát triển), như
trong Hình 12-2. IDE là một tập hợp các công cụ, bao gồm một trình soạn thảo văn bản
ASCII, được tích hợp vào một giao diện người dùng ứng dụng. Trong khi bất kỳ trình
soạn thảo văn bản ASCII nào đều có thể được sử dụng để viết bất kỳ loại mã nào, độc lập
với ngôn ngữ và nền tảng, IDE dành riêng cho nền tảng đó và thường được cung cấp bởi
nhà cung cấp của IDE, một nhà sản xuất phần cứng (trong một bộ khởi động bao gồm bảng
phần cứng với các công cụ như IDE hoặc trình soạn thảo văn bản), nhà cung cấp hệ điều
hành hoặc nhà cung cấp ngôn ngữ (Java, C, v.v.)

Hình 2-2: IDE

5
Lời khuyên thực tế
Thị trường công cụ nhúng
Thị trường công cụ nhúng là một thị trường nhỏ, phân mảnh, với nhiều nhà cung cấp khác
nhau hỗ trợ một số tập hợp con của các CPU, hệ điều hành, JVM, v.v. được nhúng sẵn có.
Bất kể nhà cung cấp lớn đến đâu, vẫn chưa có một "cửa hàng tổng hợp" nơi có thể mua tất
cả các công cụ cho hầu hết các loại linh kiện cùng loại. Về cơ bản, có nhiều bản phân phối
khác nhau từ nhiều nhà cung cấp công cụ khác nhau, mỗi nhà cung cấp hỗ trợ nhóm biến
thể của riêng họ hoặc hỗ trợ các nhóm biến thể tương tự. Các kiến trúc sư hệ thống có trách
nhiệm cần phải nghiên cứu và đánh giá các công cụ có sẵn trước khi hoàn thiện thiết kế
kiến trúc của họ để đảm bảo rằng cả hai công cụ phù hợp đều có sẵn để phát triển hệ thống
và các công cụ có chất lượng cần thiết. Chờ đợi một vài tháng để một công cụ được chuyển
sang kiến trúc của bạn hoặc để sửa lỗi từ nhà cung cấp sau khi quá trình phát triển đã bắt
đầu, không phải là một tình huống tốt.
—Dựa trên bài báo “Rắc rối với thị trường công cụ nhúng” của Jack Ganssle
—Lập trình hệ thống được nhúng. Tháng 4 năm 2004

2.1.2 Thiết kế có sự hỗ trợ của máy tính (CAD) và phần cứng


Các công cụ thiết kế có sự hỗ trợ của máy tính (CAD) thường được các kỹ sư phần cứng
sử dụng để mô phỏng mạch ở cấp độ điện nhằm nghiên cứu hành vi của mạch trong các
điều kiện khác nhau trước khi họ thực sự chế tạo mạch.

Hình 2-3a: Mẫu mô phỏng Pspice CAD. . Hình 2-3b: Mẫu mạch Pspice CAD

6
Hình 2-3a là ảnh chụp nhanh của một trình mô phỏng mạch tiêu chuẩn phổ biến, được gọi
là PSpice. Phần mềm mô phỏng mạch này là một biến thể của một trình mô phỏng mạch
khác ban đầu được phát triển tại Đại học California, Berkeley có tên là SPICE (Chương
trình Mô phỏng với Nhấn mạnh Mạch Tích hợp). PSpice là phiên bản PC của SPICE và là
một ví dụ về trình mô phỏng có thể thực hiện một số loại phân tích mạch, chẳng hạn như
thoáng qua phi tuyến, một chiều phi tuyến, xoay chiều tuyến tính, nhiễu và biến dạng. Như
trong Hình 2-3b, các mạch được tạo trong trình mô phỏng này có thể được tạo thành từ
nhiều phần tử chủ động và/ hoặc bị động. Nhiều công cụ mô phỏng mạch điện có sẵn trên
thị trường nói chung tương tự như PSpice về mục đích tổng thể của chúng và chủ yếu khác
nhau về những gì có thể thực hiện phân tích, những thành phần mạch có thể được mô phỏng
hoặc giao diện của giao diện người dùng của công cụ.

Do tầm quan trọng và chi phí liên quan đến việc thiết kế phần cứng, có nhiều kỹ thuật công
nghiệp trong đó các công cụ CAD được sử dụng để mô phỏng một mạch. Với một bộ mạch
phức tạp trong bộ xử lý hoặc trên bo mạch, rất khó, nếu không muốn nói là không thể, thực
hiện mô phỏng trên toàn bộ thiết kế, do đó, một hệ thống phân cấp các trình mô phỏng và
mô hình thường được sử dụng. Trên thực tế, việc sử dụng các mô hình là một trong những
yếu tố quan trọng nhất trong thiết kế phần cứng, bất kể hiệu quả hoặc độ chính xác của
trình mô phỏng.

Ở cấp độ cao nhất, một mô hình hành vi của toàn bộ mạch được tạo cho cả mạch tương tự
và mạch kỹ thuật số, và được sử dụng để nghiên cứu hành vi của toàn bộ mạch. Mô hình
hành vi này có thể được tạo bằng một công cụ CAD cung cấp tính năng này, hoặc có thể
được viết bằng ngôn ngữ lập trình chuẩn. Sau đó, tùy thuộc vào loại và cấu tạo của mạch,
các mô hình bổ sung được tạo ra cho các thành phần hoạt động và thụ động riêng lẻ của
mạch, cũng như cho bất kỳ phụ thuộc môi trường nào (ví dụ: nhiệt độ) mà mạch có thể có.

Ngoài việc sử dụng một số phương pháp cụ thể để viết phương trình mạch cho một mô
phỏng cụ thể, chẳng hạn như phương pháp hoạt cảnh hoặc phương pháp nút đã sửa đổi,
còn có các kỹ thuật mô phỏng để xử lý các mạch phức tạp bao gồm một hoặc một số kết
hợp của:
• Chia các mạch phức tạp hơn thành các mạch nhỏ hơn, và sau đó kết hợp các kết
quả.
• Sử dụng các đặc tính đặc biệt của một số loại mạch.
• Sử dụng vector tốc độ cao và/ hoặc máy tính song song.

7
2.1.3 Công cụ dịch — Bộ tiền xử lý, Phiên dịch, Trình biên dịch và các liên kết
Dịch mã lần đầu tiên được giới thiệu ngắn gọn về một số công cụ được sử dụng trong
dịch mã, bao gồm trình tiền xử lý, trình thông dịch, trình biên dịch và trình liên kết. Theo
đánh giá, sau khi mã nguồn được viết, nó cần được dịch sang mã máy, vì mã máy là ngôn
ngữ duy nhất mà phần cứng có thể trực tiếp thực thi. Tất cả các ngôn ngữ khác đều cần
các công cụ phát triển, để tạo ra mã máy tương ứng mà phần cứng sẽ hiểu được. Cơ chế
này thường bao gồm một hoặc một số kết hợp của các kỹ thuật tạo mã máy của trình tiền
xử lý, dịch và hoặc phiên dịch. Những cơ chế này được thực hiện trong nhiều loại công
cụ phát triển dịch thuật.
Tiền xử lý là một bước tùy chọn xảy ra trước khi dịch hoặc diễn giải mã nguồn và có chức
năng thường được thực hiện bởi bộ tiền xử lý. Vai trò của bộ tiền xử lý là tổ chức và cấu
trúc lại mã nguồn để làm cho việc dịch hoặc giải thích mã này dễ dàng hơn. Bộ tiền xử lý
có thể là một thực thể riêng biệt, hoặc có thể được tích hợp trong đơn vị biên dịch hoặc
phiên dịch.
Nhiều ngôn ngữ chuyển đổi mã nguồn, trực tiếp hoặc sau khi đã được xử lý trước, thành
mã đích thông qua việc sử dụng trình biên dịch, một chương trình tạo ra một số ngôn ngữ
đích, chẳng hạn như mã máy, mã byte Java, v.v., từ ngôn ngữ nguồn, chẳng hạn như
Assembly, C, Java, v.v. (xem Hình 2-4).

Hình 2-4: Sơ đồ tổng hợp


Một trình biên dịch thường dịch tất cả mã nguồn thành mã đích cùng một lúc. Như thường
thấy trong các hệ thống nhúng, hầu hết các trình biên dịch được đặt trên máy chủ của lập
trình viên và tạo mã đích cho các nền tảng phần cứng khác với nền tảng mà trình biên dịch
đang thực sự chạy. Các trình biên dịch này thường được gọi là trình biên dịch chéo. Trong
trường hợp lắp ráp, trình biên dịch hợp ngữ là trình biên dịch chéo chuyên dụng được gọi
là trình hợp dịch và sẽ luôn tạo mã máy. Các trình biên dịch ngôn ngữ cấp cao khác thường
được gọi bằng tên ngôn ngữ cộng với “trình biên dịch” (tức là trình biên dịch Java, trình
biên dịch C). Các trình biên dịch ngôn ngữ cấp cao có thể rất khác nhau về những gì được

8
tạo ra. Một số tạo mã máy trong khi những người khác tạo các ngôn ngữ cấp cao khác, sau
đó yêu cầu những gì được tạo ra phải chạy qua ít nhất một trình biên dịch nữa. Vẫn còn
các trình biên dịch khác tạo mã hợp ngữ, mã này sau đó phải được chạy thông qua trình
hợp dịch.
Sau khi hoàn tất quá trình biên dịch trên máy chủ của lập trình viên, tệp mã đích còn lại
thường được gọi là tệp đối tượng và có thể chứa bất kỳ thứ gì từ mã máy đến mã byte Java,
tùy thuộc vào ngôn ngữ lập trình được sử dụng. Như trong Hình 2-5, trình liên kết tích
hợp tệp đối tượng này với bất kỳ thư viện hệ thống cần thiết nào khác, tạo ra những gì
thường được gọi là tệp nhị phân thực thi, trực tiếp vào bộ nhớ của bo mạch hoặc sẵn sàng
được chuyển vào bộ nhớ của hệ thống nhúng đích bởi một bộ nạp.

Hình 2-5: Ví dụ C về các bước biên dịch / liên kết và kết quả tệp đối tượng
Một trong những điểm mạnh cơ bản của quy trình dịch là dựa trên khái niệm về vị trí phần
mềm (còn được gọi là vị trí đối tượng), khả năng phân chia phần mềm thành các mô-đun
và định vị lại các mô-đun mã và dữ liệu này ở bất kỳ đâu trong bộ nhớ. Đây là một tính
năng đặc biệt hữu ích trong các hệ thống nhúng, bởi vì: (1) các thiết kế nhúng có thể chứa
một số loại bộ nhớ vật lý khác nhau; (2) chúng thường có một lượng bộ nhớ hạn chế so với
các loại hệ thống máy tính khác; (3) bộ nhớ thường có thể trở nên rất phân mảnh và chức
năng chống phân mảnh không có sẵn hoặc quá đắt; và (4) một số loại phần mềm nhúng
nhất định có thể cần được thực thi từ một vị trí bộ nhớ cụ thể. Khả năng đặt phần mềm này
có thể được hỗ trợ bởi bộ xử lý chính, bộ xử lý này cung cấp các hướng dẫn chuyên biệt
có thể được sử dụng để tạo “mã độc lập về vị trí” hoặc nó có thể được tách riêng bằng các
công cụ dịch phần mềm. Trong cả hai trường hợp, khả năng này phụ thuộc vào việc liệu
trình hợp dịch / trình biên dịch chỉ có thể xử lý các địa chỉ tuyệt đối, trong đó địa chỉ bắt
đầu được cố định bởi phần mềm trước khi lắp ráp xử lý mã hoặc liệu nó có hỗ trợ một lược

9
đồ địa chỉ tương đối trong đó địa chỉ bắt đầu của mã có thể được không. được chỉ định sau
đó và nơi mã mô-đun được xử lý liên quan đến thời điểm bắt đầu mô-đun. Trong trường
hợp trình biên dịch / trình hợp dịch tạo ra các mô-đun có thể thay đổi vị trí, xử lý các định
dạng hướng dẫn và có thể thực hiện một số bản dịch các địa chỉ tương đối sang địa chỉ vật
lý (tuyệt đối), ví dụ, việc dịch còn lại các địa chỉ tương đối thành địa chỉ vật lý, về cơ bản
là vị trí phần mềm, được thực hiện bởi trình liên kết .
Trong khi IDE, bộ tiền xử lý, trình biên dịch, trình liên kết, v.v. nằm trên hệ thống phát
triển máy chủ lưu trữ, một số ngôn ngữ, chẳng hạn như Java và ngôn ngữ kịch bản, có trình
biên dịch hoặc trình thông dịch nằm trên đích. Trình thông dịch tạo (thông dịch) mã máy
tại một thời điểm từ mã nguồn hoặc mã đích được tạo bởi trình biên dịch trung gian trên
hệ thống chủ (xem Hình 2-6 bên dưới).

Hình 2-6: Sơ đồ diễn giải


Một nhà phát triển nhúng có thể tạo ra tác động lớn về mặt lựa chọn công cụ dịch cho một
dự án bằng cách hiểu cách trình biên dịch hoạt động và nếu có các tùy chọn, bằng cách
chọn trình biên dịch mạnh nhất có thể. Điều này là do trình biên dịch, phần lớn, xác định
kích thước của mã thực thi bằng cách nó dịch mã tốt như thế nào.
Điều này không chỉ có nghĩa là chọn một trình biên dịch dựa trên sự hỗ trợ của bộ xử lý
chính, phần mềm hệ thống cụ thể và bộ công cụ còn lại (một trình biên dịch có thể được
mua riêng, như một phần của bộ khởi động từ nhà cung cấp phần cứng và / hoặc được tích
hợp trong IDE) . Nó cũng có nghĩa là chọn một trình biên dịch dựa trên một bộ tính năng
tối ưu hóa tính đơn giản, tốc độ và kích thước của mã. Tất nhiên, các tính năng này có thể
khác nhau giữa các trình biên dịch của các ngôn ngữ khác nhau hoặc thậm chí các trình
biên dịch khác nhau của cùng một ngôn ngữ, nhưng như một ví dụ sẽ bao gồm việc cho
phép lắp ráp nội dòng trong các hàm thư viện nguồn và chuẩn giúp lập trình mã nhúng dễ
dàng hơn một chút. Tối ưu hóa mã cho hiệu suất có nghĩa là trình biên dịch hiểu và sử dụng
các tính năng khác nhau của một ISA cụ thể, chẳng hạn như các phép toán, bộ thanh ghi,
biết các loại ROM và RAM trên chip, số lượng chu kỳ xung nhịp cho các các loại quyền
truy cập, v.v. Bằng cách hiểu cách trình biên dịch dịch mã, nhà phát triển có thể nhận ra hỗ

10
trợ nào được cung cấp bởi trình biên dịch và tìm hiểu, ví dụ: cách lập trình bằng ngôn ngữ
cấp cao hơn được trình biên dịch hỗ trợ theo cách hiệu quả ( "mã thân thiện với trình biên
dịch") và khi nào nên viết mã bằng ngôn ngữ cấp thấp hơn, nhanh hơn, chẳng hạn như hợp
ngữ.

Lời khuyên thực tế


Trình biên dịch nhúng lý tưởng
Hệ thống nhúng có các yêu cầu và ràng buộc riêng không điển hình của thế giới PC không
nhúng và các hệ thống lớn hơn. Theo nhiều cách, các tính năng và kỹ thuật được thực hiện
trong nhiều thiết kế trình biên dịch nhúng được phát triển từ thiết kế của trình biên dịch
không nhúng. Các trình biên dịch này hoạt động tốt cho việc phát triển hệ thống không
nhúng, nhưng không giải quyết các yêu cầu khác nhau của việc phát triển hệ thống nhúng,
chẳng hạn như tốc độ và không gian hạn chế. Một trong những lý do chính khiến lắp ráp vẫn
còn phổ biến trong các thiết bị nhúng sử dụng ngôn ngữ cấp cao hơn là các nhà phát triển
không có khả năng hiển thị những gì trình biên dịch đang làm với mã cấp cao hơn. Nhiều
trình biên dịch nhúng không cung cấp thông tin về cách mã được tạo. Do đó, các nhà phát
triển không có cơ sở để đưa ra quyết định lập trình khi sử dụng một ngôn ngữ cấp cao hơn
để cải thiện về kích thước và hiệu suất. Các tính năng của trình biên dịch sẽ giải quyết một
số nhu cầu, chẳng hạn như yêu cầu về kích thước và tốc độ dành riêng cho thiết kế hệ thống
nhúng, bao gồm:
• Tệp danh sách trình biên dịch gắn thẻ mỗi dòng mã với ước tính về thời gian thực thi dự
kiến, phạm vi thời gian thực thi dự kiến, hoặc một số loại công thức để thực hiện tính toán
(thu thập từ thông tin mục tiêu cụ thể của các công cụ khác được tích hợp với trình biên
dịch).
• Một công cụ biên dịch cho phép nhà phát triển xem một dòng mã ở dạng đã biên dịch của
nó và gắn thẻ cho bất kỳ khu vực có vấn đề tiềm ẩn nào.
• Cung cấp thông tin về kích thước của mã thông qua bản đồ kích thước chính xác, cùng với
trình duyệt cho phép người lập trình xem lượng bộ nhớ đang được sử dụng bởi các chương
trình con cụ thể. Hãy ghi nhớ những tính năng hữu ích này khi thiết kế hoặc mua một trình
biên dịch nhúng.
- Dựa trên bài báo "Trình biên dịch không giải quyết mối quan tâm
theo thời gian thực" của Jack Ganssle
- Lập trình hệ thống nhúng, tháng 3 năm 1999

11
2.1.4 Công cụ gỡ lỗi
Ngoài việc tạo kiến trúc, mã gỡ lỗi có lẽ là nhiệm vụ khó khăn nhất trong chu trình phát
triển. Debugging chủ yếu có nhiệm vụ định vị và sửa lỗi bên trong hệ thống. Nhiệm vụ này
được thực hiện đơn giản hơn khi lập trình viên đã quen thuộc với các loại công cụ gỡ lỗi
khác nhau có sẵn và cách chúng có thể được sử dụng loại thông tin được hiển thị trong
Bảng 2-1).
Như đã thấy từ một số mô tả trong Bảng 2-1, các công cụ gỡ lỗi nằm và kết nối với nhau
trong một số tổ hợp các thiết bị độc lập, trên máy chủ và / hoặc trên bảng đích.

Nhận xét nhanh về việc đo lường hiệu suất hệ thống với Benchmarks
Ngoài các công cụ gỡ lỗi, khi bo mạch đã được thiết lập và chạy, điểm chuẩn là các chương
trình phần mềm thường được sử dụng để đo hiệu suất (độ trễ, hiệu quả, v.v.) của. các tính
năng riêng lẻ trong một hệ thống nhúng, chẳng hạn như bộ xử lý chính, hệ điều hành hoặc
JVM. Trong trường hợp của một hệ điều hành, chẳng hạn, hiệu suất được đo lường bằng
mức độ hiệu quả của bộ xử lý chính được sử dụng bởi sơ đồ lập lịch của hệ điều hành. Bộ
lập lịch cần chỉ định. phê chuẩn lượng tử thời gian — thời gian mà một quy trình có quyền
truy cập vào CPU — đối với một quy trình, bởi vì nếu lượng tử thời gian quá nhỏ, thì sự cố
sẽ xảy ra.
Mục tiêu chính của ứng dụng điểm chuẩn là đại diện cho khối lượng công việc thực của hệ
thống .. Có rất nhiều ứng dụng điểm chuẩn có sẵn. Chúng bao gồm điểm chuẩn của EEMBC
(Embedded Microprocessor Benchmark Consortium), tiêu chuẩn ngành để đánh giá. khả
năng của bộ xử lý nhúng, trình biên dịch và Java; Whetstone, mô phỏng các ứng dụng khoa
học chuyên sâu về số học và Dhrystone, mô phỏng các ứng dụng lập trình hệ thống, được sử
dụng để lấy MIPS được giới thiệu trong Phần II. Hạn chế của điểm chuẩn là chúng có thể
không thực tế hoặc không thể tái tạo được trong thiết kế thế giới thực liên quan đến nhiều
hơn một tính năng của hệ thống. Vì vậy, thường tốt hơn nhiều nếu sử dụng các chương trình
nhúng thực sẽ được triển khai trên hệ thống để xác định không chỉ hiệu suất của phần mềm
mà còn cả hiệu suất tổng thể của hệ thống.
Nói tóm lại, khi diễn giải điểm chuẩn, hãy đảm bảo rằng bạn hiểu chính xác phần mềm nào
đã được chạy và những gì điểm chuẩn đã làm hoặc không đo lường

12
Bảng 2-1: Công cụ gỡ lỗi
Loại công Công cụ gỡ Ví dụ về sử dụng và những
Mô tả
cụ lỗi hạn chế
Trình giả lập Thiết bị hoạt động thay • Giải pháp gỡ lỗi thường đắt
trong mạch- thế bộ vi xử lý trong hệ nhất, nhưng có rất nhiều khả
In-Circuit thống năng gỡ lỗi.
Emulator • Có thể hoạt động ở tốc độ tối
(ICE) đa của bộ xử lý(phụ thuộc
vào ICE) và đối với phần còn
lại của hệ thống, nó là bộ vi
xử lý.
• Cho phép khả năng hiển thị
và khả năng sửa đổi của bộ
nhớ trong, biến, thanh ghi vv
thời gian thực.
• Tương tự như trình gỡ lỗi,
cho phép thiết lập các điểm
ngắt, bước đơn, v.v.
• Thường có bộ nhớ lớp phủ để
mô phỏng ROM
• Phụ thuộc vào bộ xử lý
…..
Hardware Trình giả lập Công cụ hoạt động • cho phép sửa đổi nội dung
ROM thay thế ROM bằng cáp trong ROM (không giống
kết nối với cổng RAM như một trình gỡ lỗi)
kép trong trình mô • có thể đặt các điểm ngắt
phỏng ROM, mô trong mã ROM và xem mã
phỏng RO. Nó là một ROM theo thời gian thực
thiết bị phần cứng • thường không hỗ trợ trên
trung gian được kết nối chip ROM
với mục tiêu thông qua • tùy chỉnh ASIC, v.v.
một số cáp (i.e. BDM) • có thể được tích hợp với trình
và kết nối với máy chủ gỡ lỗi
thông qua một cổng …….
khác
Chế độ gỡ Phần cứng BDM trên • thường rẻ hơn ICE
lỗi nền- bo mạch(cổng và màn • quan sát việc thực thi phần
Background hình gỡ lỗi tích hợp mềm một cách kín đáo trong
Debug Mode vào CPU chính) và thời gian thực
(BDM) trình gỡ lỗi trên máy • có thể đặt các điểm ngắt để
chủ, được kết nối qua dừng thực thi phần mềm
cáp nối tiếp với cổng

13
BDM. Đầu nối trên cáp • cho phép đọc và ghi vào
với cổng BDM, thường thanh ghi, RAM, Cổng I / O,
được gọi là wiggler. Gỡ v.v.
lỗi BDM đôi khi được • phụ thuộc vào bộ xử lý /
gọi là On-Chip mục tiêu, giao diện gỡ lỗi
Debugging (ODC). độc quyền của Motorola

IEEE 1149.1 JTAG-phần cứng phù • Tương tự như BDM, nhưng
Joint Test hợp bo mạch không độc quyền đối với
Action kiến trúc cụ thể (là một tiêu
Group chuẩn mở)
(JTAG)

IEEE-ISTO Các tùy chọn của cổng • cung cấp các chức năng gỡ
Nexus 5001 JTAG, Cổng tương lỗi có thể mở rộng tùy thuộc
thích với Nexus hoặc vào mức độ tuân thủ của
cả hai, một số lớp tuân phần cứng
thủ (tùy thuộc vào độ …
phức tạp của
bộ xử chính, sự lựa
chọn kỹ thuật, v.v).
Máy hiện Thiết bị tương tự thụ • giám sát đồng thời 2 tín hiệu
sóng- động biểu thị điện áp • có thể đặt Trigger để nắm
Oscilloscope (trên trục tung) so với bắt điện áp trong các điều
thời gian (trên trục kiện cụ thể
hoành), phát hiện điện • được sử dụng như vôn kế
áp chính xác tại một (mặc dù một cái đắt hơn)
thời điểm nhất định • có thể xác minh mạch đang
hoạt động bằng cách nhìn
thấy tín hiệu qua bus hoặc
cổng I/O
• nắm bắt các thay đổi trong
tín hiệu trên cổng I / O để
xác minh các phân đoạn của
phần mềm đang chạy, tính
toán thời gian từ thay đổi tín
hiệu này sang tín hiệu tiếp
theo, v.v.
• bộ xử lý độc lập
Trình phân Thiết bị thụ động bắt và • có thể đắt
tích logic theo dõi nhiều tín hiệu • thường chỉ có thể theo dõi 2
điện áp (VCC và nền); các

14
đồng thời và có thể vẽ tín hiệu ở giữa được vẽ biểu
biểu đồ cho chúng đồ dưới dạng một trong hai
• có thể lưu trữ dữ liệu (trong
khi chỉ có máy hiện sóng lưu
trữ mới có thể lưu trữ dữ
liệu đã chụp)
• 2 chế độ hoạt động chính
(thời gian, trạng thái) để cho
phép kích hoạt các thay đổi
trạng thái của tín hiệu (tức là
cao xuống thấp hoặc thấp
đến cao)
• nắm bắt các thay đổi trong
tín hiệu trên cổng I / O để
xác minh các phân đoạn
phần mềm đang chạy, tính
toán thời gian từ thay đổi tín
hiệu này sang tín hiệu tiếp
theo, v.v. (chế độ định thời)
• có thể được kích hoạt để thu
thập dữ liệu từ một sự kiện
đồng hồ ngoài mục tiêu hoặc
một đồng hồ phân tích logic
nội bộ
• có thể kích hoạt nếu bộ xử
lý truy cập phần giới hạn
của bộ nhớ, ghi dữ liệu
không hợp lệ vào bộ nhớ
hoặc truy cập một loại lệnh
cụ thể (chế độ trạng thái)
• một số sẽ hiển thị mã lắp
ráp, nhưng thường không
thể đặt điểm ngắt và mã
từng bước bằng trình phân
tích
• bộ phân tích logic chỉ có thể
truy cập dữ liệu được truyền
từ bên ngoài đến và từ bộ xử
lý, không phải bộ nhớ trong,
thanh ghi, v.v.
• độc lập với bộ xử lý và cho
phép xem hệ thống đang

15
thực thi trong thời gian thực
với rất ít sự xâm nhập

Vôn kế Đo hiệu điện thế giữa 2 • để đo các giá trị điện áp cụ
điểm trên đoạn mạch thể
• để xác định xem mạch có
bất kỳ nguồn điện nào
không
• để xác định xem mạch có
bất kỳ nguồn nào không

Ôm kế Đo điện trở giữa 2 • rẻ hơn các công cụ phần
điểm trên mạch cứng khác
• để đo sự thay đổi của dòng
điện / điện áp về điện trở
(Định luật Ohm V = IR)
Đồng hồ vạn đo cả điện áp và điện • giống như mét vôn và ohm
năng trở …

Software Màn hình Giao diện gỡ lỗi tương • tương tự như câu lệnh in
tự như ICE, với phần nhưng nhanh hơn, ít xâm
mềm gỡ lỗi chạy trên phạm hơn, hoạt động tốt hơn
mục tiêu và máy chủ. cho các thời hạn thời gian
Một phần của màn hình thực mềm, nhưng không cho
nằm trong ROM của thời gian thực cứng
bảng đích (thường • chức năng tương tự như
được gọi là tác nhân gỡ trình gỡ lỗi (điểm ngắt,
lỗi hoặc tác nhân đích) thanh ghi kết xuất và bộ
và một hạt nhân gỡ lỗi nhớ, v.v.)
trên máy chủ. Phần • hệ điều hành nhúng có thể
mềm trên máy chủ và bao gồm màn hình cho các
máy đích thường giao kiến trúc cụ thể
tiếp qua nối tiếp hoặc
Ethernet (phụ thuộc
vào những gì có sẵn
trên máy đích)
Bộ mô Chạy trên máy chủ và • thường không chạy ở cùng
phỏng bộ mô phỏng bộ xử lý tốc độ chính xác của mục
hướng dẫn chính và bộ nhớ (nhị tiêu thực, nhưng có thể ước
phân thực thi được tải tính thời gian phản hồi và
vào trình mô phỏng thông lượng bằng cách xem
như nó sẽ được tải vào

16
mục tiêu) và bắt chước xét sự khác biệt giữa tốc độ
phần cứng máy chủ và mục tiêu
• xác minh mã lắp ráp không
có lỗi
• thường không mô phỏng
phần cứng khác có thể tồn
tại trên mục tiêu, nhưng có
thể cho phép kiểm tra các
thành phần bộ xử lý tích hợp
• có thể mô phỏng hành vi
ngắt
• nắm bắt các giá trị biến, bộ
nhớ và thanh ghi
• dễ dàng hơn mã cổng được
phát triển trên trình mô
phỏng để nhắm mục tiêu
phần cứng
• sẽ không mô phỏng chính
xác hoạt động của phần
cứng thực tế trong thời gian
thực
• thường phù hợp hơn để thử
nghiệm các thuật toán hơn là
phản ứng với các sự kiện
bên ngoài một kiến trúc
hoặc bo mạch (dạng sóng và
các dạng như vậy cần được
mô phỏng thông qua phần
mềm)
• thường rẻ hơn đầu tư vào
phần cứng và công cụ thực
Trình gỡ lỗi Công cụ gỡ lỗi chức Phụ thuộc vào trình gỡ lỗi - nói
năng chung:
• tải / singlestepping / mã truy
tìm vào mục tiêu
• triển khai các điểm ngắt để
dừng thực thi phần mềm
• triển khai các điểm ngắt có
điều kiện để dừng nếu điều
kiện cụ thể được đáp ứng
trong quá trình thực thi

17
• có thể sửa đổi nội dung của
RAM, thường không thể sửa
đổi nội dung của ROM
….
Hồ sơ Thu thập lịch sử thời • nắm bắt thời gian phụ thuộc
gian của các biến, (khi nào) hành vi thực thi
thanh ghi đã chọn, v.v. phần mềm
để nắm bắt mô hình thực thi
(nơi) của phần mềm thực thi
Sẵn có, miễn phí hoặc rẻ hơn các giải pháp khác, hiệu quả, đơn giản hơn
để sử dụng nhưng thường có tính xâm nhập cao hơn các loại công cụ khác,
không đủ khả năng kiểm soát lựa chọn sự kiện, cô lập hoặc lặp lại. Khó gỡ
lỗi hệ thống thời gian thực nếu phương pháp thủ công mất quá nhiều thời
gian để thực thi.
In báo cáo Công cụ gỡ lỗi chức • để xem đầu ra của các biến,
năng, in các câu lệnh giá trị đăng ký, v.v. trong
được chèn vào mã in khi mã đang chạy
thông tin biến, vị trí • để xác minh đoạn mã đang
trong thông tin mã, v.v. được thực thi
• có thể làm chậm đáng kể
thời gian thực hiện
• có thể gây ra thời hạn bị bỏ
lỡ trong hệ thống thời gian
thực
Thủ công Lưu trữ Công cụ gỡ lỗi chức • giống như câu lệnh in nhưng
năng kết xuất dữ liệu cho phép thời gian thực thi
vào một số loại cấu nhanh hơn trong việc thay
trúc lưu trữ trong thời thế một số câu lệnh in (đặc
gian chạy biệt nếu có bộ lọc xác định
loại thông tin cụ thể nào cần
kết xuất hoặc điều kiện nào
cần đáp ứng để kết xuất dữ
liệu vào cấu trúc)
• xem nội dung của bộ nhớ
trong thời gian chạy để xác
định xem có bất kỳ ngăn xếp
/ đống nào vượt quá không
Bộ đếm / Bộ Công cụ gỡ lỗi hiệu • thu thập thông tin thời gian
hẹn giờ suất và hiệu quả trong thực thi chung bằng cách tắt
đó bộ đếm hoặc bộ hẹn đồng hồ hệ thống hoặc đếm
giờ đặt lại và tăng lên ở chu kỳ bus, v.v.
các điểm mã khác nhau • một số sự xâm nhập

18

Hiển thị Công cụ gỡ lỗi chức • tương tự như báo cáo in
nhanh năng trong đó đèn LED nhưng nhanh hơn, ít xâm
được bật tắt hoặc màn phạm hơn, hoạt động tốt cho
hình LCD đơn giản các thời hạn trong thời gian
hiển thị một số dữ liệu thực
cho phép xác nhận rằng các phần
cụ thể của mã đang chạy
Cổng đầu ra Hiệu suất, hiệu quả và • với máy hiện sóng hoặc máy
công cụ gỡ lỗi chức phân tích logic, có thể đo
năng trong đó cổng đầu khi nào cổng được chuyển
ra được bật ở các điểm đổi và nhận thời gian thực
khác nhau trong phần thi giữa các lần chuyển đổi
mềm cổng
• tương tự như trên nhưng có
thể thấy trên máy hiện sóng
rằng mã đang được thực thi
ở vị trí đầu tiên
trong hệ thống đa nhiệm / đa
luồng, gán các cổng khác
nhau cho mỗi luồng / nhiệm
vụ để nghiên cứu hành vi

Một số công cụ này là các công cụ gỡ lỗi đang hoạt động và có thể xâm nhập vào hoạt động
của hệ thống nhúng, trong khi các công cụ gỡ lỗi khác nắm bắt hoạt động của hệ thống một
cách thụ động mà không có sự xâm nhập khi hệ thống đang chạy. Gỡ lỗi một hệ thống
nhúng thường yêu cầu sự kết hợp của các công cụ này để giải quyết tất cả các loại vấn đề
khác nhau có thể phát sinh trong quá trình phát triển.
Lời khuyên thực tế
Cách rẻ nhất để gỡ lỗi
Ngay cả với tất cả các công cụ có sẵn, các nhà phát triển vẫn nên cố gắng giảm thời gian
và chi phí gỡ lỗi, bởi vì 1) chi phí của lỗi tăng càng gần với thời gian sản xuất và triển
khai mà lịch trình đạt được, và 2) chi phí của lỗi là logarit (nó có thể tăng gấp 10 lần khi
được khách hàng phát hiện so với nếu nó được tìm thấy trong quá trình phát triển thiết
bị). Một số phương tiện hiệu quả nhất để giảm thời gian và chi phí gỡ lỗi bao gồm:
• Không phát triển quá nhanh và cẩu thả. Cách rẻ nhất và nhanh nhất để gỡ lỗi là không
chèn bất kỳ lỗi nào ngay từ đầu. Việc phát triển nhanh và cẩu thả thực sự làm trì hoãn
tiến độ với lượng thời gian dành cho việc gỡ lỗi.

19
• Kiểm tra hệ thống. Điều này bao gồm việc kiểm tra phần cứng và phần mềm trong suốt
quá trình phát triển để đảm bảo rằng các nhà phát triển đang thiết kế theo các đặc điểm
kiến trúc và bất kỳ tiêu chuẩn nào khác theo yêu cầu của các kỹ sư. Mã hoặc phần cứng
không đáp ứng tiêu chuẩn sẽ phải được "gỡ lỗi" sau đó nếu việc kiểm tra hệ thống không
được sử dụng để loại bỏ chúng nhanh chóng và rẻ (liên quan đến thời gian gỡ lỗi và sửa
tất cả phần cứng và mã nhiều hơn sau đó).
• Không sử dụng phần cứng bị lỗi hoặc mã viết sai. Một thành phần thường sẵn sàng được
thiết kế lại khi kỹ sư chịu trách nhiệm lo sợ thực hiện bất kỳ thay đổi nào đối với thành
phần vi phạm.
• Theo dõi các lỗi trong một tệp văn bản chung hoặc sử dụng một trong nhiều công cụ
phần mềm theo dõi lỗi có sẵn. Nếu các thành phần (phần cứng hoặc phần mềm) liên tục
gây ra sự cố, có thể đã đến lúc thiết kế lại thành phần đó.
• Đừng tiết kiệm công cụ gỡ lỗi. Một công cụ gỡ lỗi tốt (mặc dù đắt hơn) có thể cắt giảm
thời gian gỡ lỗi đáng giá hơn hàng chục công cụ rẻ hơn mà không tốn nhiều thời gian và
công sức, hầu như không thể tìm ra loại lỗi gặp phải trong quá trình thiết kế một hệ thống
nhúng.
Và cuối cùng điều mà tôi (tác giả của cuốn sách này) tin rằng là một trong những phương
pháp tốt nhất để giảm thời gian gỡ lỗi và chi phí, hãy đọc tài liệu do nhà cung cấp và /
hoặc các kỹ sư có trách nhiệm cung cấp trước, trước khi cố gắng chạy hoặc sửa đổi bất kỳ
thứ gì. Tôi đã nghe nhiều, rất nhiều lời bào chữa trong nhiều năm từ “Tôi không biết đọc
gì” đến “Có tài liệu không?” về lý do tại sao một kỹ sư không đọc bất kỳ tài liệu nào. Cũng
chính những kỹ sư này đã dành hàng giờ đồng hồ, nếu không muốn nói là hàng ngày, cho
các vấn đề riêng lẻ với việc định cấu hình phần cứng hoặc để một phần mềm chạy chính
xác. Tôi biết rằng nếu những kỹ sư này đã đọc tài liệu ngay từ đầu, sự cố sẽ được giải
quyết trong vài giây hoặc vài phút hoặc có thể hoàn toàn không xảy ra.
Nếu bạn bị choáng ngợp với tài liệu và không biết phải đọc gì trước, bất kỳ thứ gì có tiêu
đề dọc theo dòng “Bắt đầu…”, “Khởi động hệ thống…” hoặc “ĐỌC SÁCH” là những
dấu hiệu tốt để bắt đầu. - Hơn nữa, hãy dành thời gian để đọc tất cả tài liệu được cung
cấp với bất kỳ phần cứng hoặc phần mềm nào để làm quen với loại thông tin nào ở đó,
trong trường hợp cần thiết sau này.
- Dựa trên bài báo “Kiến thức cơ bản về chương trình cơ sở cho ông chủ”
của Jack Ganssle,
- Lập trình hệ thống nhúng, tháng 2 năm 2004

20
2.1.5 Khởi động hệ thống
Với các công cụ phát triển đã sẵn sàng hoạt động và bảng tham chiếu hoặc bảng phát triển
được kết nối với máy chủ phát triển, đã đến lúc khởi động hệ thống và xem điều gì sẽ xảy
ra. Khởi động hệ thống có nghĩa là một số loại nguồn bật hoặc đặt lại, chẳng hạn như khôi
phục cài đặt gốc bên trong / bên ngoài (tức là do lỗi dừng kiểm tra, cơ quan giám sát phần
mềm, mất khóa bởi PLL, trình gỡ lỗi, v.v. .) hoặc thiết lập lại mềm bên trong / bên ngoài
(tức là được tạo bởi trình gỡ lỗi, mã ứng dụng, v.v.), đã xảy ra. Khi nguồn được cấp vào
bo mạch nhúng (do đặt lại), mã khởi động, còn được gọi là mã khởi động, bộ nạp khởi
động, mã khởi động hoặc BIOS (hệ thống đầu ra đầu vào cơ bản) tùy thuộc vào kiến trúc,
trong ROM của hệ thống là được nạp và thực thi bởi bộ xử lý chính. Một số kiến trúc nhúng
(chính) có bộ đếm chương trình bên trong được cấu hình tự động với một địa chỉ trong
ROM, nơi chứa mã khởi động (hoặc bảng) bắt đầu, trong khi những kiến trúc khác có dây
phần cứng để bắt đầu thực thi tại một vị trí cụ thể trong bộ nhớ.
Mã khởi động khác nhau về độ dài và chức năng tùy thuộc vào vị trí trong chu kỳ phát triển
của bo mạch, cũng như các thành phần của nền tảng thực tế cần khởi tạo. Các chức năng
chung (tối thiểu) giống nhau được thực hiện bởi mã khởi động trên các nền tảng khác nhau,
về cơ bản là khởi tạo phần cứng, bao gồm vô hiệu hóa ngắt, khởi tạo bus, đặt bộ xử lý chính
và phụ ở một trạng thái cụ thể và khởi tạo bộ nhớ. Phần khởi tạo phần cứng đầu tiên này
của mã khởi động về cơ bản là việc thực thi các trình điều khiển thiết bị khởi tạo, như đã
thảo luận trong Chương 8. Cách khởi tạo thực sự được thực hiện — nghĩa là thứ tự mà các
trình điều khiển được thực thi — thường được phác thảo bởi kiến trúc chủ tài liệu hoặc
trong tài liệu do nhà sản xuất bo mạch cung cấp. Sau trình tự khởi tạo phần cứng, được
thực thi thông qua trình điều khiển thiết bị khởi tạo, phần mềm hệ thống còn lại, nếu có, sẽ
được khởi tạo. Mã bổ sung này có thể tồn tại trong ROM, đối với hệ thống đang được vận
chuyển ra khỏi nhà máy hoặc được tải từ nền tảng máy chủ bên ngoài (xem hộp chú thích
với bootcodeExample).

21
bootcodeExample ()

{
....
//Trình điều khiển thiết bị khởi tạo cổng nối tiếp
Khởi tạo RS232(UART,BAUDRATE,DATA_BITS,STOP_BITS,PARITY);
//Khởi tạo trình điều khiển thiết bị kết nối mạng
Khởi tạo Ethernet
// Kiểm tra hệ thống phát triển máy chủ để tải xuống tệp phần còn lại của mã
vào RAM
// Thông qua ethernet
// Bắt đầu thực hiện phần còn lại của mã(i.e. xác định bản đồ bộ nhớ,tải OS,etc.)

...
}

Ví dụ về khởi động bo mạch dựa trên MPC823


Bộ xử lý MPC823 chứa bộ điều khiển đặt lại có trách nhiệm phản hồi tất cả các nguồn đặt
lại. Các hành động được thực hiện bởi bộ điều khiển đặt lại khác nhau tùy thuộc vào nguồn
của sự kiện đặt lại, nhưng nói chung quy trình bao gồm định cấu hình lại phần cứng, sau
đó lấy mẫu các chân dữ liệu hoặc sử dụng hằng số mặc định bên trong để xác định giá trị
đặt lại ban đầu của các thành phần hệ thống.

22
Hình 2-7a: Sơ đồ diễn giải
Bản quyền của Freescale Semiconductor, Inc. 2004. Được phép sử dụng.

Hình 2-7b: Sơ đồ diễn giải


Mẫu chân dữ liệu đại diện cho các tham số cấu hình (thiết lập) ban đầu như trong hình 2-
7c
Nếu... Sau đó...

23
Không có sự điều phối bên SIUMCR.EARB = 0 D0=0 D0
ngoài
Có sự điều phối bên ngoài SIUMCR.EARB = 1 D0=1
EVT tại 0 MSR.IP=0 D1=1 D1
EVT tại 0xFFF00000 MSR.IP = 1 D1=0
Không kích hoạt bộ điều BR0.V=0 D3=1
khiển bộ nhớ D3
Kích hoạt CSO BR0,V=1 D3=0
Kích thước cổng khởi động là BR0.PS=00 D4=0,D5=0
32 D4
Kích thước cổng khởi động là BR0.PS=01 D4=0,D5=1 D5
8
Kích thước cổng khởi động là BR0.PS=10 D4=1,D5=0
16
Để dành BR0.PS=11 D4=1,D5=1
DPR tại 0 immr = 0000xxxx D7=0,D8=0
0F00000 immr = 00F0xxxx D7=0,D8=1 D7
DPR tại 0×FF000000 immr = FF00xxxx D7=1,D8=0 D8
DPR tại 0×FFF00000 immr = FFF0xxxx D7=1,D8=1
Lựa chọn các chức năng SIUMCR.DBGC = 0 D9=0,D10=0
PCMCIA, cổng B
Chọn các chức năng hỗ trợ SIUMCR.DBGC = 1 D9=0,D10=1 D9
phát triển D10
Để dành SIUMCR.DBGC = 2 D9=1,D10=0
Chọn các chức năng theo dõi SIUMCR.DBGC = 3 D9=1,D10=1
chương trình
Chọn trong DBGC+chân SIUMCR.DBPC=0 D11=0,D12=0
Dev.Supp.comm

24
Chọn trong DBGC+chân SIUMCR.DBPC=1 D11=0,D12=1 D11
JTAG D12
Để dành SIUMCR.DBPC=2 D11=1,D12=0
Chọn Dev.Supp.comm và SIUMCR.DBPC=3 D11=1,D12=1
chân JTAG
UT là GCLK2 chia cho 1 SCCR.EBDF =0 D13=0,D14=0
CLKOUT là GCLK2 chia SCCR.EBDF =1 D13=0,D14=1 D13
cho 2 D14
Để dành SCCR.EBDF =2 D13=1,D14=0
Để dành SCCR.EBDF =3 D13=1,D14=1

Hình 12-7c: Sơ đồ diễn giải


(D0 xác định xem trọng tài bên ngoài hay trọng tài nội bộ sẽ được dùng.
D1 kiểm soát vị trí ban đầu của bảng vectơ ngoại lệ và Bit IP trong thanh ghi trạng thái
máy được đặt tương ứng.
D3 chỉ định xem Chip Chọn 0 có hoạt động khi đặt lại hay không.
Nếu Chip Chọn 0 hoạt động trên các chân đặt lại D4 và D5, chỉ định kích thước cổng của
ROM khởi động, với lựa chọn 8, 16 hoặc 32 bit.
D7 và D8 chỉ định giá trị ban đầu cho các thanh ghi IMMR. Ở đó là bốn vị trí có thể khác
nhau cho bản đồ bộ nhớ trong.
D9 và D10 chọn cấu hình cho các chân gỡ lỗi.
D11 và D12 chọn cấu hình của các chân cổng gỡ lỗi. Cái này lựa chọn liên quan đến việc
định cấu hình các chân này dưới dạng chân JTAG hoặc chân giao tiếp hỗ trợ phát triển.
D13 và D14 xác định sơ đồ xung nào đang được sử dụng; một xung
chương trình Triển khai GCLK2 chia cho một và phần hai
thực hiện GCLK2 chia đôi.)
Bảng RPXLite của Embedded Planet giả định rằng ROM tích hợp (FLASH) chứa chương
trình / màn hình bộ nạp khởi động, được gọi là PlanetCore, ban đầu được tạo bởi Embedded
Planet. Các bộ xử lý PowerPC và bộ nhớ trên bo mạch khởi động trong cấu hình mặc định

25
được đặt thông qua phần cứng (CS0 là chân đầu ra có thể được định cấu hình để làm chip
chọn chung cho thiết bị khởi động, HRESET / SRESET, chân dữ liệu,…) và không có đăng
ký PC có thể truy cập chuyên dụng.
Chọn Kích
Chip thước Chức năng/Địa chỉ Chú thích
cổng
CS0# x32 Flash(x32) Đặt lại véc-tơ tại IP=1:
FFFF FFFF trừ đi kích thước Flash thực 0000 0100
tế Véc-tơ đặt tại IP=1 trong phần
cứng
Bro đặt tại FFFF trừ kích
thước Flash 2.4.8. hoặc
16Mbytes
CS1# x32 SDRAM(x32) 16.32. hoặc 64Mbytes
0000
CS2# Tiêu đề mở rộng Chuyển đến ngăn chứa mở
UUUU rộng
CS3# x32 Đăng ký điều khiển và trạng thái Byte và/hoặc từ có thể truy
FA40 cập
CS4# x8 NVRAM/RTC or SRAM/RTC Ok,32K,128K,hoặc
FA00 512Kbytes
Cũng có sẵn tại ngăn chứa mở
rộng
CS5# Tiêu đề mở rộng Chuyển đến ngăn chứa mở
UUUU rộng
CS6# x16 Chip PCMCIA Slot B chọn even Bytes OP2 trong MPC850 PCMCIA
Hoặc hoặc đăng ký điều khiển chọn chế
U Chip chọn 6 đến tiêu đề I/O độ:

26
UUUU L=PCMCIA Slot B được kích
hoạt
H=CS6# đến tiêu đề mở rộng
được kich hoạt
CS7# x16 Chip PCMCIA Slot B chọn Odd Bytes OP2 trong MPC850 PCMCIA
hoặc hoặc đăng ký điều khiển chọn chế
U Chip chọn 7 đến tiêu đề I/O độ:
UUUU L=PCMCIA Slot B được kích
hoạt
H=CS7# đến tiêu đề mở rộng
I/O được kich hoạt
IMMR x32 Gía trị lúc đặt lại = FF00 0000.
Sau đó đến FA20 0000
Hình 2-7d: Sơ đồ diễn giải
Cấu hình mặc định được thực thi thông qua phần cứng chỉ bao gồm cấu hình của một bộ
nhớ ngân hàng, có địa chỉ cơ sở được xác định bởi D7 và D8 trong đó 00 = 0x00000000,
01 =0x00F000000, 10 = 0xFF000000, 11 = 0xFFF00000. Ngân hàng này nằm trong một
số loại ROM (tức là Flash) và là nơi chứa mã khởi động. Sau khi bo mạch được bật nguồn,
bộ xử lý PowerPC thực thi mã khởi động trong ngân hàng bộ nhớ này để hoàn tất trình tự
khởi tạo và cấu hình. Trên thực tế, tất cả các dòng bộ xử lý MPC8xx (không chỉ MPC823)
đều yêu cầu khởi động cao hoặc thấp, tùy thuộc vào bo mạch và bản sửa đổi cụ thể, có
nghĩa là PlanetCore được đặt ở đầu cao cấp của Flash hoặc ở phần cuối thấp của Flash.
PlanetCore bắt đầu ở địa chỉ ảo 0xFFF00000 nếu nó nằm ở phần cuối của Flash. Mặt khác,
PlanetCore là trong các sector đầu tiên của Flash — tức là, nằm ở địa chỉ ảo 0xFC000000
cho 64 Mbyte Flash — nếu nó nằm ở phần cuối thấp của Flash.

27
Hình 2-7e: Sơ đồ diễn giải
Bản quyền của Freescale Semiconductor, Inc. 2004. Được phép sử dụng.
Trên bo mạch dựa trên MPC823 này, sau khi trình tự khởi tạo phần cứng khởi tạo bộ xử
lý, CPU bắt đầu thực thi mã bộ nạp khởi động PlanetCore. Như được hiển thị trong hộp
chú thích sau, tất cả phần cứng cụ thể cho kiến trúc MPC823 cũng như cụ thể cho bo mạch
đều được khởi tạo (tức là nối tiếp, mạng, v.v.) thông qua loại mã khởi động này.
/*****************************************************************
c_entry
*Mô tả
*
*
*Hàm C đầu tiên
*
*Trả lại giá trị:
*
*
*Không bao giờ trả lại

28
****************************************************************/ Int
c_entroy(void){

BootLoader
Khởi tạo bảng cho BSP tùy chỉnh
Việc khởi tạo MPC823, chính nó (không phải khởi tạo bo mạch), bao gồm khoảng 24
bước, bao gồm:
vô hiệu hóa bộ đệm dữ liệu để ngăn lỗi kiểm tra máy xảy ra
1. Khởi tạo Thanh ghi trạng thái máy và thanh ghi lưu và khôi phục 1 với giá trị 0x1002.
2. Khởi tạo Thanh ghi điều khiển hỗ trợ hướng dẫn, hoặc ICTRL, sửa đổi nó để lõi
không bị tuần tự hóa (có ảnh hưởng đến hiệu suất).
3. Khởi tạo thanh ghi kích hoạt gỡ lỗi, DER
4. Khởi tạo Thanh ghi Nguyên nhân Ngắt, ICR. T
5. Khởi tạo Thanh ghi Bản đồ Bộ nhớ Trong, hoặc IMMR.
6. Khởi tạo thanh ghi Cơ sở Bộ điều khiển Bộ nhớ và Tùy chọn theo yêu cầu.
7. Khởi tạo Thanh ghi tiền vô hướng của Bộ hẹn giờ Định kỳ Bộ nhớ, hoặc MPTPR.
8. Khởi tạo Thanh ghi Chế độ Máy, MAMR và MBMR.
9. Khởi tạo thanh ghi cấu hình mô-đun SIU, hoặc SIUMCR. Lưu ý rằng bước này định
cấu hình nhiều chân được hiển thị ở phía bên phải của sơ đồ chân chính trong hướng
dẫn sử dụng.
10. Khởi tạo Sổ đăng ký Bảo vệ Hệ thống, hoặc SYPCR. Thanh ghi này chứa các cài đặt
cho bộ giám sát xe buýt và cơ quan giám sát phần mềm.
11. Khởi tạo Thanh ghi Trạng thái và Kiểm soát Cơ sở Thời gian, TBSCR.
12. Khởi tạo trạng thái đồng hồ thời gian thực và thanh ghi điều khiển, RTCSC.
13. Khởi tạo thanh ghi bộ hẹn giờ ngắt định kỳ, PISCR.
14. Khởi tạo mảng RAM UPM bằng thanh ghi lệnh bộ nhớ và thanh ghi dữ liệu bộ nhớ.
Chúng tôi cũng thảo luận về quy trình này trong chương liên quan đến bộ điều khiển
bộ nhớ.

29
15. Khởi tạo thanh ghi điều khiển thiết lập lại và nguồn điện thấp PLL, hoặc PLPRCR.
16. Không bắt buộc, mặc dù nhiều lập trình viên thực hiện bước này. Bước này di chuyển
bảng vectơ ROM sang bảng vectơ RAM.
17. Thay đổi vị trí của bảng vectơ. Ví dụ cho thấy quy trình này bằng cách bỏ qua thanh
ghi trạng thái máy, thiết lập hoặc xóa bit IP và ghi lại thanh ghi trạng thái máy trở lại.
18. Vô hiệu hóa bộ đệm chỉ dẫn.
19. Mở khóa bộ đệm chỉ dẫn.
20. Làm mất hiệu lực bộ đệm chỉ dẫn.
21. Mở khóa bộ nhớ đệm dữ liệu.
22. Kiểm tra xem bộ nhớ đệm đã được kích hoạt chưa và nếu có, hãy xóa nó.
23. Làm mất hiệu lực của bộ đệm dữ liệu.
24. Khởi tạo tất cả các thành phần: bộ xử lý, đồng hồ, EEPROM, I2C, nối tiếp, Ethernet
10/100, chọn chip, máy UPM, khởi tạo DRAM, PCMCIA (Loại I và II), SPI, UART,
bộ mã hóa video,LCD, âm thanh, màn hình cảm ứng, IR,..
Trình ghi Flash
Chuẩn đoán và tiện ích
Kiểm tra DRAM
Giao diện dòng lệnh

[12-3]

Ví dụ về khởi động dựa trên MIPS32


Bo mạch dựa trên Ampro Encore M3 Au1500 giả định rằng ROM trên bo mạch (tức là
Flash) chứa chương trình / bộ nạp khởi động, được gọi là YAMON, ban đầu được tạo ra
bởi MIPS Technologies. Nơi ROM khởi động này được ánh xạ trên Au1500 dựa trên các
yêu cầu của chính kiến trúc MIPS, chỉ định rằng khi đặt lại, bộ xử lý MIPS phải tìm nạp
vectơ ngoại lệ Đặt lại từ địa chỉ 0xBFC00000. Về cơ bản, khi khởi động nguội xảy ra trên

30
một bộ xử lý dựa trên MIPS32, một ngoại lệ đặt lại xảy ra thực hiện một trình tự khởi tạo
"phần cứng" đặt lại đầy đủ (nói chung) đặt bộ xử lý ở trạng thái thực thi các lệnh từ bộ nhớ
không được ánh xạ, chưa được lưu vào bộ nhớ, khởi tạo các thanh ghi (chẳng hạn như
rando, có dây, cấu hình và trạng thái) để đặt lại, sau đó tải PC bằng 0xBFC0_0000, véc tơ
ngoại lệ đặt lại.
0xBFC0_0000 là một địa chỉ ảo, không phải là một địa chỉ thực. Tất cả các địa chỉ theo
kiến trúc MIPS32 đều là địa chỉ ảo, có nghĩa là địa chỉ bộ nhớ vật lý thực trên bảng là được
dịch khi xử lý, chẳng hạn như tìm nạp lệnh, tải và lưu trữ dữ liệu. Các bit trên của địa chỉ
ảo xác định các vùng khác nhau trong sơ đồ bộ nhớ; Ví dụ:
• KUSEG (2 GB bộ nhớ ảo từ 0x0000000–0x7FFFFFFF).
• KSEG0 (bộ nhớ ảo 512 MB từ 0x8000000 đến 9FFFFFFF) là bản đồ trực tiếp tới các địa
chỉ vật lý và có thể lưu trong bộ nhớ cache.
• KSEG1 (bộ nhớ ảo 512 MB từ 0xA000000 đến BFFFFFFF) là bản đồ trực tiếp tới các địa
chỉ vật lý và vốn dĩ không thể lưu trong bộ nhớ cache.
Điều này có nghĩa là các địa chỉ ảo
(KSEG0) 0x80000000 (chế độ xem có thể
lưu trong bộ nhớ đệm) và (KSEG1)
0xA00000000 (chế độ xem không thể lưu
trong bộ nhớ đệm) đều ánh xạ trực tiếp lên
địa chỉ thực 0x00000000. Vectơ ngoại lệ
đặt lại MIPS32 (0xBFC0_0000) nằm
trong 4 Mbyte cuối cùng của vùng bộ nhớ
KSEG1, vùng không thể lưu trong bộ nhớ
cache có thể thực thi ngay cả khi các thành
phần bo mạch khác chưa được khởi tạo..
Điều này có nghĩa là địa chỉ vật lý của 0x1FC00000 được tạo cho lệnh tìm nạp đầu tiên từ
ROM khởi động. Về cơ bản, lập trình viên đặt mã khởi động bắt đầu (tức là YAMON) ở
0x1FC0_0000, là giá trị mà PC được đặt để bắt đầu thực thi khi bật nguồn và có thể chiếm
toàn bộ 4MB dung lượng (0x1FC00000 đến 0x1FFFFFFF) hoặc hơn

31
Hình 2-8b: Sơ đồ diễn giải

Địa chỉ hệ thống Địa chỉ Flash Các ngành Miêu tả


bfC00000 – 00000000 – 0 Đặt lại hình ảnh(16kB)
bfC03FFF 00003FFF
bfC04000 – 00004000 – 1 Dòng khởi động(8kB0
bcC05FFF 00005FFF
bfC06000 – 00006000 – 2 Tham số Flash(8kB0
bfC07FFF 00007FFF
bfC08000 – 00008000 – 3 Người sử dụng NVRAM
bfC0FFFF 0000FFFF (32kB)
bfC10000 – 00010000 – 4-11 YAMON Little Endian (512kB)
bfC8FFFF 0008FFFF
bfC90000 – 00090000 – 12-19 YAMON Big Engian (512kB)
bfD0FFFF 0010FFFF
bfD10000 – 00110000 – 20-23 Hệ thống Flash (896kB)
bfDEFFFF 001EFFFF

32
bfDF0000 – 001F0000 – 34 Môi trường Flash (64kB0
bfDFFFFF 001FFFFF

Hình 2-8c: Sơ đồ diễn giải


Địa chỉ vật lý 0x1FC000000 được cố định cho véc tơ ngoại lệ đặt lại (đầu YAMON) trên
MIPS32, bất kể có bao nhiêu bộ nhớ vật lý thực sự trên bo mạch — nghĩa là chip Flash
trên bo mạch phải được tích hợp để nó tương quan với điều này địa chỉ vật lý. Trong trường
hợp của bo mạch Ampro Encore M3, có 2 MB bộ nhớ Flash trên bo mạch.
Trên bo mạch dựa trên MIPS32 này, sau khi trình tự khởi tạo phần cứng khởi tạo bộ xử lý,
CPU bắt đầu thực thi mã nằm tại địa chỉ trong thanh ghi PC. Trong trường hợp này, đó là
mã bộ nạp khởi động YAMON đã được chuyển sang bo mạch Ampro Encore M3. Tất cả
phần cứng cụ thể cho kiến trúc MIPS32 (ví dụ: khởi tạo ngắt) cũng như cụ thể cho bo mạch
(tức là nối tiếp, mạng, v.v.) được khởi tạo thông qua chương trình YAMON, là phần mềm
độc quyền có sẵn từ MIPS.
Khởi động hệ thống với một hệ điều hành
Thông thường, kiến trúc 32-bit bao gồm một ngăn xếp phần mềm hệ thống phức tạp hơn
bao gồm một hệ điều hành và, tùy thuộc vào hệ điều hành, cũng có thể bao gồm một BSP.
Bất kể nơi bổ sung mã bootstrapping đến từ, nếu hệ thống bao gồm một hệ điều hành, thì
hệ điều hành đó (với BSP của nó nếu có) được khởi tạo và tải. Mặc dù trình tự khởi động
của một hệ điều hành cụ thể có thể khác nhau, nhưng tất cả các kiến trúc về cơ bản đều
thực hiện các bước giống nhau khi khởi tạo và tải các hệ điều hành nhúng khác nhau.
Ví dụ, trình tự khởi động cho nhân Linux trên kiến trúc x86 xảy ra thông qua một BIOS
chịu trách nhiệm tìm kiếm, tải và thực thi nhân Linux, là phần trung tâm của Hệ điều hành
Linux điều khiển tất cả các chương trình khác. Về cơ bản, đây là tiến trình mẹ “init” được
bắt đầu (thực thi) tiếp theo. Mã trong quy trình init đảm nhận việc thiết lập phần còn lại
của hệ thống, chẳng hạn như thực hiện các tác vụ để quản lý mạng / cổng nối tiếp, v.v.Mặt
khác, trình tự khởi động vxWorks RTOS trên hầu hết các kiến trúc xảy ra thông qua ROM
khởi động vxWorks thực hiện khởi tạo kiến trúc và bo mạch cụ thể, sau đó bắt đầu nhân
đa nhiệm với tác vụ khởi động của người dùng là hoạt động duy nhất của nó.

33
Sau khi hoàn thành trình tự khởi động, hệ thống nhúng sau đó thường đi vào một vòng lặp
vô hạn, chờ các sự kiện kích hoạt ngắt hoặc các hành động được kích hoạt sau khi một số
thành phần được thăm dò ý kiến (xem Hình 12-9 bên dưới).

Hình 2-9: Hệ thống đang chạy

34
2.2 Đảm bảo chất lượng và kiểm tra thiết kế

Trong các mục tiêu của việc kiểm tra và đảm bảo chất lượng của hệ thống là tìm ra
lỗi trong thiết kế và theo dõi xem lỗi đã được sửa chưa. Đảm bảo chất lượng và
kiểm tra tương tự như gỡ lỗi, được thảo luận trước đó trong chương này, ngoại trừ
mục tiêu của việc gỡ lỗi là để sửa các lỗi đã phát hiện. Sự khác biệt chính khác
giữa gỡ lỗi và kiểm tra hệ thống là việc gỡ lỗi thường xảy ra khi nhà phát triển gặp
sự cố khi cố gắng hoàn thành một phần của thiết kế và sau đó là kiểm tra để vượt
qua bản sửa lỗi (nghĩa là kiểm tra chỉ để đảm bảo hệ thống hoạt động tối thiểu
trong các trường hợp bình thường). Mặt khác,với thử nghiệm các lỗi được phát
hiện do cố gắng phá vỡ hệ thống, bao gồm cả thử nghiệm để vượt qua và thử
nghiệm để thất bại, nơi các điểm yếu trong hệ thống được thăm dò.

Trong quá trình thử nghiệm, các lỗi thường xuất phát từ việc hệ thống không tuân thủ
các đặc điểm kiến trúc nghĩa là, hoạt động theo cách mà nó không nên theo tài liệu,
không hoạt động theo cách cách nó phải theo tài liệu, hoạt động theo cách không được
đề cập trong tài liệu hoặc không có khả năng kiểm tra hệ thống. Các loại lỗi gặp phải
trong thử nghiệm phụ thuộc vào loại thử nghiệm đang được thực hiện. Nói chung, các
kỹ thuật thử nghiệm thuộc một trong bốn mô hình: thử nghiệm hộp đen tĩnh, thử
nghiệm hộp trắng tĩnh, thử nghiệm hộp đen động hoặc thử nghiệm hộp trắng động (xem
ma trận trong Hình 2-9). Kiểm tra hộp đen xảy ra với người kiểm tra không có khả năng
hiển thị các hoạt động bên trong của hệ thống (không có sơ đồ, không có mã nguồn,...).
Kiểm tra hộp đen dựa trên tài liệu yêu cầu sản phẩm chung, trái ngược với kiểm tra hộp
trắng (còn được gọi là kiểm tra hộp trong hoặc hộp kính), trong đó người kiểm tra có
quyền truy cập vào mã nguồn, sơ đồ,... Thử nghiệm tĩnh được thực hiện khi hệ thống
không chạy, trong khi thử nghiệm động được thực hiện khi hệ thống đang chạy.

35
Thử nghiệm với hộp đen Thử nghiệm với hộp trắng
Kiểm tra các thông số kĩ thuật Quy trình xem xét phần cứng và
Thử nghiệm của sản phẩm bằng cách: mã một cách có phương pháp để
tĩnh 1. tìm kiếm các vấn đề cơ bản, tìm ra lỗi mà không cần thực thi.
sơ suất, thiếu sót ở mức độ cao
(tức là coi như mình lầ khách
hàng, nghiên cứu các hướng
dẫn/tiêu chuẩn hiện có, xem
xét và kiểm tra phần mềm
tương tự, v.v.).
2. kiểm tra đặc điểm kỹ thuật
cấp thấp bằng cách đảm bảo
tính đầy đủ, chính xác, độ
chính xác, tính nhất quán, mức
độ liên quan,
tính khả thi,…

36
Yêu cầu xác định phần mềm Kiểm tra hệ thống đang chạy trong
Thử nghiệm nào và khi xem mã, sơ đồ, v.v.
động phần cứng bao gồm: Trực tiếp kiểm tra mức thấp và
• kiểm tra dữ liệu, kiểm tra mức cao
thông tin về đầu vào và đầu ra dựa trên kiến thức hoạt động chi
của người dùng tiết,
• kiểm tra điều kiện ranh giới, truy cập các biến và kết xuất bộ
đó là nhớ.
kiểm tra các tình huống ở cạnh Tìm kiếm lỗi tham chiếu dữ liệu,
các giới hạn hoạt động theo kế dữ liệu
hoạch của phần mềm lỗi khai báo, lỗi tính toán, lỗi so sánh,
• kiểm tra ranh giới nội bộ, đó lỗi luồng điều khiển, lỗi tham số
là chương trình con, lỗi I/O,...
thử nghiệm lũy thừa của hai,
bảng ASCII
• kiểm tra đầu vào, kiểm tra dữ
liệu trống, dữ liệu không hợp lệ
• kiểm tra trạng thái, là kiểm tra
các chế độ và chuyển đổi giữa
các chế độ mà phần mềm đang
thực hiện với các biến trạng thái
tức là, điều kiện tương tranh, thử
nghiệm lặp lại (lý do chính là
phát hiện rò rỉ bộ nhớ), ứng
suất(đói phần mềm = thấp bộ
nhớ, mạng chậm cpu chậm), tải
(phần mềm nguồn cấp dữ liệu =
kết nối nhiều thiết bị ngoại vi, xử
lý lượng lớn dữ liệu, web máy
chủ có nhiều máy khách truy
cập,..).
Hình 12-10: Ma trận mô hình kiểm tra

Trong mỗi mô hình (được hiển thị trong Hình 12-10), thử nghiệm có thể được chia
nhỏ hơn nữa để bao gồm thử nghiệm đơn vị / mô-đun (thử nghiệm gia tăng các
phần tử riêng lẻ trong hệ thống), thử nghiệm tính tương thích (thử nghiệm xem

37
phần tử đó không gây ra sự cố với các phần tử khác trong hệ thống), thử nghiệm tích
hợp (thử nghiệm gia tăng các phần tử tích hợp), thử nghiệm hệ thống (thử nghiệm toàn
bộ hệ thống nhúng với tất cả các phần tử được tích hợp), thử nghiệm hồi quy (chạy lại
các kiểm tra đã vượt qua trước đó sau khi sửa đổi hệ thống) và thử nghiệm sản xuất
(thử nghiệm để đảm bảo rằng việc sản xuất hệ thống không tạo ra lỗi).

Từ các thử nghiệm này, tập hợp các trường hợp thử nghiệm hiệu quả có thể được rút ra
để xác minh rằng một hệ thống hoặc cấp độ đáp ứng các thông số kỹ thuật kiến trúc,
cũng như xác nhận rằng phần tử đó hoặc hệ thống đáp ứng các yêu cầu thực tế, có thể đã
hoặc chưa được phản ánh một cách chính xác hoặc hoàn toàn trong tài liệu. Khi các
trường hợp thử nghiệm đã được hoàn thành và các thử nghiệm được chạy, cách xử lý kết
quả có thể khác nhau tùy thuộc vào tổ chức, nhưng thông thường khác nhau giữa các
trường hợp không chính thức, nơi thông tin được trao đổi mà không cần tuân theo bất kỳ
quy trình cụ thể nào và đánh giá thiết kế chính thức hoặc đánh giá đồng cấp nơi các nhà
phát triển đồng nghiệp trao đổi các yếu tố để kiểm tra, hướng dẫn nơi kỹ sư chịu trách
nhiệm chính thức xem qua sơ đồ và mã nguồn, kiểm tra khi ai đó không phải là kỹ sư
chịu trách nhiệm thực hiện bước này. Các phương pháp và mẫu thử nghiệm cụ thể cho
các trường hợp thử nghiệm, cũng như toàn bộ quy trình thử nghiệm, đã được xác định
trong một số tiêu chuẩn thử nghiệm và đảm bảo chất lượng phổ biến trong ngành, bao
gồm tiêu chuẩn Đảm bảo chất lượng ISO9000, Mô hình trưởng thành (CMM) và chuẩn
bị ANSI/IEEE 829, Chạy và Hoàn thành Các tiêu chuẩn kiểm tra.

Cuối cùng, cũng như gỡ lỗi, có rất nhiều công cụ tự động hóa và kiểm tra cũng như công
nghệ kỹ thuật có thể hộ trợ tốc độ, hiệu quả và độ chính xác của việc kiểm tra các yếu tố
khác nhau, bao gồm các công cụ tải, công cụ ứng suất, bộ phun nhiễu, bộ tạo nhiễu, công
cụ phân tích, macro, ghi và phát lại, và macro được lập trình bao gồm các công cụ được
liệt kê trong bảng 2-1.

38
Lời khuyên thực tế

Các sửa đổi pháp lý tiềm năng (ở Hoa Kỳ) KHÔNG thử nghiệm
Luật của Hoa Kỳ về trách nhiệm sản phẩm được coi là rất nghiêm ngặt, và khuyến
nghị rằng những chịu trách nhiệm về việc đảm bảo chất lượng và kiểm tra hệ thống
nên được đào tạo về luật trách nhiệm sản phẩm để nhận biết khi nào sử dụng luật để
đảm bảo một lỗi nghiêm trọng đã được khắc phục và khi nào thì nhận rằng một lỗi có
thể gây ra trách nhiện pháp lý nghiêm trọng cho tổ chức.
Các luật chung mà người tiêu dùng có thể kiện về các vấn đề sản phẩm là:

• Vi phạm Hợp đồng (nghĩa là nếu các bản sửa lỗi được nêu trong hợp đồng
không được đưa ra kịp thời)

• Vi phạm bảo hành và bảo đảm ngầm định (nghĩa là cung cấp hệ thống mà không có
các tính năng đã hứa)

• Trách nhiệm pháp lý nghiêm ngặt và sơ suất đối với thương tích cá nhân hoặc
thiệt hại đối với tài sản (tức là do lỗi gây ra thương tích hoặc tử vong cho người
dùng)

• Sơ suất (tức là khách hàng mua sản phẩm bị lỗi)

• Khai báo sai và gian lận (tức là sản phẩm được phát hành và bán không đáp
ứng được các quyền sở hữu như quảng cáo, dù cố ý hay vô ý)

Hãy nhớ là, các luật này áp dụng cho dù “sản phẩm” của bạn có phải là dịch vụ tư vấn
nhúng, công cụ nhúng, thiết bị nhúng thực tế hay phần mềm/phần cứng có thể được
tích hợp vào thiết bị.
- Dựa trên chương “Hậu quả pháp lý của phần mềm bị lỗi”của Cem Kaner

- Kiểm tra phần mềm máy tính. 1999

2.3 Kết luận: Duy trì hệ thống nhúng và hơn thế nữa

Chương này giới thiệu một số yêu cầu chính đằng sau việc triển khai một hệ thống
nhúng thiết kế, chẳng hạn như hiểu các công cụ phát triển tiện ích, dịch và gỡ lỗi. Các
công cụ bao gồm IDE và CAD, cũng như trình thông dịch, trình biên dịch và trình liên
kết. Một loạt các công cụ gỡ lỗi hữu ích cho cả gỡ lỗi và kiểm tra các thiết kế nhúng, từ
ICE phần cứng, trình giả lập ROM và máy hiện sóng đến trình gỡ lỗi phần mềm, trình
định cấu hình và màn hình. Chương này cũng thảo luận về những gì có thể được mong
đợi khi khởi động một bo mạch mới, cung cấp một vài ví dụ thực tế về mã khởi động hệ
thống. 39
Cuối cùng, sau khi một thiết bị nhúng đã được triển khai, vẫn có những trách nhiệm điển
hình cần được đáp ứng, chẳng hạn như đào tạo người dùng, hỗ trợ kỹ thuật, cung cấp các
bản cập nhật kỹ thuật, sửa lỗi,... Ví dụ trong trường hợp đào tạo người dùng, tài liệu kiến
trúc có thể được sử dụng tương đối nhanh chóng để làm cơ sở cho các hướng dẫn kỹ
thuật, người dùng và đào tạo. Tài liệu kiến trúc cũng có thể được sử dụng để đánh giá tác
động liên quan đến việc giới thiệu các bản cập nhật (tức là các tính năng mới, sửa lỗi,...)
cho sản phẩm khi sản phẩm đang ở hiện trường, giảm thiểu rủi ro thu hồi hoặc sự cố tốn
kém, hoặc cuộc kiểm tra của các FAE có thể được yêu cầu tại địa điểm của khách hàng.
Trái với suy nghĩ của nhiều người, trách nhiệm của nhóm kỹ sư kéo dài trong suốt vòng
đời của thiết bị và không kết thúc khi hệ thống nhúng đã được triển khai tới đồng ruộng.

Để đảm bảo thành công trong thiết kế hệ thống nhúng, điều quan trọng là phải làm quen
với các giai đoạn thiết kế các hệ thống nhúng, đặc biệt là tầm quan trọng của việc tạo ra
một cấu trúc đầu tiên. Điều này đòi hỏi tất cả các kỹ sư và lập trình viên, bất kể trách
nhiệm và nhiệm vụ của họ là gì, phải có nền tảng kỹ thuật vững chắc bằng cách hiểu ở
cấp hệ thống tất cả các thành phần chính có thể đi vào thiết kế của bất kỳ hệ thống nhúng
nào. Điều này có nghĩa là các kỹ sư phần cứng hiểu phần mềm và các kỹ sư phần mềm
hiểu phần cứng tại ít nhất là cấp độ hệ thống. Điều quan trọng nữa là các nhà thiết kế có
trách nhiệm phải áp dụng, hoặc đưa ra phương pháp luận đã được thống nhất để triển
khai và kiểm tra hệ thống, sau đó có kỷ luật để tuân theo các quy trình bắt buộc.

Tác giả hy vọng rằng bạn đánh giá cao cách tiếp cận kiến trúc của cuốn sách này, và
nhận thấy nó là một công cụ hữu ích như một phần giới thiệu toàn diện về thế giới của
các hệ thống nhúng thiết kế. Có những yêu cầu và ràng buộc riêng liên quan đến việc
thiết kế một hệ thống nhúng, chẳng hạn như những yêu cầu và ràng buộc được quyết
định bởi chi phí và hiệu suất. Việc tạo ra một kiến trúc giải quyết những yêu cầu này rất
sớm trong một dự án, cho phép nhóm thiết kế giảm thiểu rủi ro. Chỉ vì lý do này, kiến
trúc của một thiết bị nhúng sẽ tiếp tục là một trong những yếu tố quan trọng nhất của bất
kỳ dự án hệ thống nhúng nào.

40
Chương 2: Các vấn đề

1. Sự khác biệt giữa máy chủ và mục tiêu là gì?

2. Các công cụ phát triển thường thuộc loại cấp cao nào?

3. [T/F] Một IDE được sử dụng trên đích để giao tiếp với hệ thống máy chủ.

4. CAD là gì?

5. Ngoài CAD, những kỹ thuật nào khác được sử dụng để thiết kế các mạch điện phức
tạp?

6. [a] Bộ tiền xử lý là gì?

[b] Cung cấp một ví dụ trong thế giới thực về cách bộ tiền xử lý được sử dụng liên
quan đến ngôn ngữ lập trình.

7. [T/F] Một trình biên dịch có thể nằm trên một máy chủ hoặc một mục tiêu, tùy
thuộc vào ngôn ngữ.

8. Một số tính năng giúp phân biệt nhu cầu biên dịch trong hệ thống nhúng so với trong
các loại hệ thống máy tính khác?

9. [a] Tệp đối tượng là gì?

[b] Sự khác biệt giữa trình tải và trình liên kết là gì?

10. [a] Phiên dịch là gì?

[b] Kể tên ba ngôn ngữ trong thế giới thực yêu cầu thông dịch viên.

11. Một thông dịch viên cư trú trên:

A. Vật chủ.

B. Mục tiêu và vật chủ.


C. Trong một IDE.

D. A và C.

E. Không có điều nào ở trên.

41
12. [a] Gỡ lỗi là gì?

[b] Các loại công cụ gỡ lỗi chính là gì?

[c] Liệt kê và mô tả bốn ví dụ trong thế giới thực của từng loại công cụ gỡ lỗi.

13. Năm kỹ thuật rẻ nhất để sử dụng trong gỡ lỗi là gì?

14. Mã khởi động là

A. Phần cứng cấp nguồn cho bo mạch.

B. Phần mềm tắt bảng.

C. Phần mềm khởi động bo mạch.

D. Tất cả những điều trên.

E. Không có điều nào ở trên.

15. Sự khác biệt giữa gỡ lỗi và kiểm thử là gì?

16. [a] Liệt kê và xác định bốn mô hình mà các kỹ thuật kiểm thử thuộc loại nào.

[b] Trong mỗi mô hình này, năm loại thử nghiệm có thể xảy ra là gì?

17. [T/F] Thử nghiệm để vượt qua là thử nghiệm để đảm bảo rằng hệ thống hoạt
động ở mức tối thiểu trong các trường hợp bình thường.

18. Sự khác biệt giữa thử nghiệm để vượt qua và thử nghiệm để thất bại?

19. Nêu tên và mô tả bốn lĩnh vực luật chung mà khách hàng có thể kiện về sản
phẩm các vấn đề.

20. [T/F] Sau khi hệ thống nhúng đi vào quá trình sản xuất, công việc của nhóm thiết
kế và phát triển đã hoàn thành.

42

You might also like