Trong kiến trúc này, như những phần trước chúng ta đã thảo luận thì hàm ngắt sẽ tiếp quản những việc xử lý cấp thiết nhất (những thứ mà không thể chờ được), sau đó chúng truyền tín hiệu cho mã tác vụ để thực hiện những công việc còn lại. Sự khác nhau giữa kiến trúc này với các kiến trúc trước là:
- Việc đánh tín hiệu giữa các hàm ngắt và với mã tác vụ được xử lý bởi hệ
điều hành thời gian thực. Chúng ta không cần phải sử dụng những biến dùng chung cho mục đích này.
- Không có vòng lặp trong mã để quyết định xem sẽ thực hiện công việc gì
tiếp theo. Hệ điều hành thời gian thực biết được tất cả những công việc cần thực hiện và nó sẽ thực thi những công việc nào cần thiết tại mỗi thời điểm.
- Hệ điều hành thời gian thực có thể tạm thời dừng một hàm mã tác vụ đang
được xử lý để thực hiện một nhiệm vụ khác.
Có rất nhiều Hệ điều hành thời gian thực mà ta có thể mua để áp dụng cho mục đích cụ thể và khi mua hệ điều hành này ta sẽ có ngay những giải pháp cho vấn đề thời gian đáp ứng cùng với các công cụ gỡ lỗi. Nhược điểm chính của kiến trúc này là vấn đề bản thân hệ điều hành thời gian thực cũng cần thời gian để xử lý những công việc của hệ điều hành. Chúng ta sẽ nhận được thời gian đáp ứng tốt hơn khi tiêu tốn ít thông lượng.
Hình 2.7 Kiến trúc Hệ điều hành thời gian thực
2.3 Các phƣơng pháp đặc tả và thiết kế phần mềm nhúng 2.3.1 Phƣơng pháp đặc tả hình thức (formal method)
Các phương pháp hình thức là các kỹ thuật toán học cho việc đặc tả, phát triển và kiểm định các hệ thống phần mềm và phần cứng. Cách tiếp cận này đặc biệt quan trọng đối với các hệ thống cần có tính toàn vẹn cao, chẳng hạn hệ thống điều khiển lò phản ứng hạt nhân hay điều khiển tên lửa, khi an toàn hay an ninh có vai trò quan trọng, để góp phần đảm bảo rằng quá trình phát triển hệ thống sẽ không có lỗi, điều này cũng rất phù hợp cho phát triển các hệ thống nhúng vì đòi hỏi những yêu cầu ràng buộc khắt khe. Các phương pháp hình thức đặc biệt hiệu quả tại giai đoạn đầu của quá trình phát triển (tại các mức yêu cầu và đặc tả hệ thống), nhưng cũng có thể được sử dụng cho một quá trình phát triển hoàn chỉnh của một hệ thống.
Các phương pháp hình thức có thể được sử dụng để mô tả về hệ thống cần phát triển, tại bất kỳ mức độ chi tiết nào và bất cứ pha nào trong vòng đời phát triển phần mềm. Khi một đặc tả hình thức đã được phát triển xong, đặc tả đó có thể được sử dụng làm một hướng dẫn trong quá trình hệ thống thực được phát triển (nghĩa là được hiện thực hóa trong phần mềm hoặc phần cứng). Sau đó đặc tả này có thể được dùng làm cơ sở cho việc chứng minh các tính chất của hệ thống. Các đặc tả hình thức mô tả ở mức độ chính xác logic cao. Nó loại trừ những nhầm lẫn mập mờ không tránh khỏi trong
các đặc tả phi hình thức. Tính chính xác này giúp cho người diễn tả và người đọc chúng có tiếng nói chung, đạt được sự nhất quán, giúp cho phát triển hệ thống ổn định an toàn.
Định nghĩa đặc tả hình thức:
Đặc tả hình thức là một mô tả chính xác các hành vi và thuộc tính của hệ thống được viết trên một số ngôn ngữ có cơ sở toán học, nó mô tả một cách ngắn gọn và chặt chẽ các yêu cầu mà một hệ thống được giả định là sẽ thực hiện. Vì vậy có thể loại trừ những chi tiết mập mờ và mô tả được những thay đổi tổng quát cộng với những thay đổi của hệ thống trong tương lai.
Có khá nhiều phương pháp hình thức được áp dụng cho đặc tả, phát triển và kiểm định các hệ thống nhúng, thời gian thực. Trong bài luận văn này đưa ra giới thiệu các phương pháp phổ biến đã được nghiên cứu và ứng dụng rộng rãi để phát triển các hệ thống trong công nghiệp. Ngoài ra, do yêu cầu và đặc trưng của từng loại hệ thống nhúng người ta còn có thể kết hợp các phương pháp hình thức với nhau hoặc với các phương pháp bán hình thức (sẽ được trình bầy ở phần sau) để mô tả đầy đủ và chính xác về hệ thống cần xây dựng.
a. Timed CSP (Communicating Sequential Processes)
Timed CSP là ngôn ngữ đặc tả mở rộng về tính thời gian thực của CSP. Nó là một ngôn ngữ đặc tả hình thức để mô hình và phân tích các hành vi điều khiển động của các hệ thống song song và phân tán. Trong Time CSP yếu tố thời gian thực được mô hình bởi các số thực dương.
Một số tiến trình mô hình các mẫu hành vi của một hệ thống hay một thành phần, các mẫu này sẽ quyết định việc điều khiển các hành động nội tại và môi trường. Các thao tác tiến trình cho phép phân tách các tiến trình theo một cấu trúc phân cấp thành các tiến trình con tương tác với nhau. Trong Timed CSP có hai cách khác nhau để định nghĩa một tiến trình: thuật ngữ tiến trình và vị từ.
Timed CSP là ngôn ngữ đặc tả mạnh để mô hình các hành vi động. Tuy nhiên nó không cung cấp bất kỳ cấu trúc nào để mô hình hành vi có thể chuyển đổi dữ liệu. Vì vậy, Timed CSP thường được sử dụng kết hợp với một ngôn ngữ đặc tả khác như Z.
b. Đặc tả B
B là ngôn ngữ đặc tả được phát triển tại Bell Labs và xuất hiện khoảng năm 1969. Nó được áp dụng rộng rãi trong công nghiệp và trong các trường học để xây dựng hệ thống đòi hỏi tính đúng đắn, chặt chẽ (bao gồm cả hệ thống nhúng - thời gian thực).
Theo phương pháp B, những yêu cầu ban đầu được thể hiện thành tập các máy trừu tượng và sử dụng cách tiếp cận hướng đối tượng trong các giai đoạn phát triển. B dựa trên tập hợp các ký hiệu đủ mạnh để thể hiện các mức độ từ đặc tả, thiết kế đến thực hiện hệ thống. Nó cũng cung cấp các công cụ để kiểm tra cú pháp, kiểm tra mô
c. Đặc tả Z
Một đặc tả viết trong Z là sự trộn lẫn của các câu lệnh toán học, hình thức, với các văn bản giải thích phi hình thức. Phần mô tả hình thức: cho một số mô tả chính xác, khoa học của hệ thống. Còn phần phi hình thức để làm tài liệu.
Thành phần hình thức của Z sử dụng lý thuyết tập hợp quen thuộc (lý thuyết tập hợp có phân loại). Đặc biệt hơn nữa, đặc tả Z sử dụng các sơ đồ cho phép nhóm các đối tượng đặc tả lại thành các bộ phận.
Đặc tả Z có thể được ứng dụng vào tất cả các pha của vòng đời phần mềm. Và kinh nghiệm đã chỉ ra rằng việc xây dựng một mô hình toán học cho hệ thống như Z sẽ mạng lại lợi ích to lớn trong qúa trình phát triển phần mềm. Hiện nay có một số công cụ hỗ trợ Z như CICS của IBM, Inmos T800 của Transputer, …
d. ObjectZ và TCOZ (RT-Z) (tích hợp của ObjectZ và timed CSP)
Cốt lõi của ObjectZ là ngôn ngữ Z. ObjectZ mở rộng đặc tả theo hướng đối tượng cho phép đặc tả có thể tạo ra các lớp và tính kế thừa các lớp. ObjectZ được mở rộng để đặc tả các hệ thống có tính liên tục và thời gian thực.
RT-Z là kết hợp của ngôn ngữ Z và Timed CSP cho phép đặc tả các hệ thống thời gian thực. Ngôn ngữ Z đặc tả sâu tính cấu trúc còn Timed CSP lại biểu diễn rất tốt cho các hệ thống thời gian thực.
e. Mạng Petri (Pertrinet)
Năm 1962 Carl Adam Petri đã công bố phương pháp mô hình hình họa tác vụ
hay quá trình theo sự phụ thuộc nhân quả đã được phổ cập rộng rãi và được biết tới như ngày này với tên gọi là mạng Petri. Ngôn ngữ đặc tả hình thức nổi tiếng về tính hiệu quả.
Mạng Petri được sử dụng phổ biến để biểu diễn mô hình và phân tích các hệ thống có sự cạnh tranh trong quá trình hoạt động. Một hệ thống có thể hiểu là một tổ hợp của nhiều thành phần và mỗi thành phần thì đều có các thuộc tính. Các thuộc tính đó có thể thay đổi và được đặc trưng bởi các biến trạng thái. Một chuỗi các trạng thái sẽ mô tả quá trình động của một hệ thống. Mạng Petri thực sự là một giải pháp mô tả hệ thống động với các sự kiện rời rạc tác động làm thay đổi trạng thái của các đối tượng trong hệ thống theo từng điều kiện cụ thể trạng thái của hệ thống. Mạng Petri được thiết lập dựa trên 3 thành phần chính: (1) Các điều kiện, (2) các sự kiện, và (3) quan hệ luồng. Các điều kiện có thể là thoả mãn hoặc không thoả mãn. Các sự kiện là có thể xảy ra hoặc không. Và quan hệ luồng mô tả điều kiện của hệ trước khi sự kiện xảy ra. Các điều kiện đòi hỏi phải thoả mãn để một sự kiện xảy ra hoặc chuyển trạng
thái thực hiện thì được gọi là điều kiện trước (precondition). Các điều kiện mà được
thoả mãn khi một sự kiện nào đó xảy ra thì được gọi là điều kiện sau (postcondition).
2.3.2 Phƣơng pháp đặc tả bán hình thức (semi-formal method)
Các phương pháp bán hình thức là các kỹ thuật đặc tả, phát triển và kiểm định các hệ thống phần mềm và phần cứng theo cấu trúc sử dụng các thành phần đồ hoạ và
được ứng dụng rộng rãi trong phân tích thiết kế phần mềm nói chung bao gồm cả các hệ thống nhúng, thời gian thực như SDL, UML... Cách tiếp cận này giúp cho người phát triển mô hình hoá hệ thống một cách trực quan dễ hiểu và các bộ phận tham gia phát triển hệ thống có thể hiểu và đóng góp được nhằm xác định đúng hệ thống cần xây dựng. Các phương pháp này được áp dụng tại tất cả các pha trong vòng đời phát triển phần mềm.
a. Biểu đồ luồng dữ liệu (Data Flow Diagram)
Có nhiều cách mô tả thiết kế phần mềm, phụ thuộc vào thông tin gì được truyền đạt. Một phương pháp được sử dụng là biểu đồ luồng dữ liệu. Biểu đồ luồng dữ liệu chỉ ra mỗi tiến trình như là một khối (vòng). Những đường kẻ nối các khối chỉ ra các thông tin được chuyển giữa các tiến trình. Theo cách thiết kế này trước hết chúng ta sẽ phân tích các yêu cầu của hệ thống và xác định các mô-đun chức năng, rồi sau đó tiến hành vẽ biểu đồ theo luồng dữ liệu của các mô-đun chức năng đã phân tích, nhằm mục đích xác định được tác vụ theo các ràng buộc chặt chẽ mà hệ thống nhúng đòi hỏi.
Ví dụ hệ thống đồng hồ báo thức: có thể được chia làm 6 tác vụ như sau: DisplayTask, TimebaseTask, ButtonTask, AlarmcontrolTask, AlarmtoneTask, ErrorTask. Hình 2.8 thể hiện biểu đồ luồng dữ liệu giữa các tác vụ trong hệ thống đồng hồ báo thức.
Hình 2.8 Biểu đồ luồng dữ liệu hệ thống đồng hồ báo thức
b. Biểu đồ trạng thái (Statechart Diagram)
Biểu đồ trạng thái thể hiện từng trạng thái có thể có trong hệ thống và những đầu vào, ra gây ra thay đổi thành trạng thái khác. Như hình 2.9 thể hiện biểu đồ trạng thái tổng quát, hệ thống chuyển từ trạng thái này sang trạng thái khác nhờ các trigger. Trong một hệ thống phức tạp hơn, từng đầu vào gây ra những thay đổi trạng thái được thể hiện và chỉ rõ từ trạng thái cũ ra trạng thái mới. Cách đặc tả này hữu dụng trong
Hình 2.9. Biểu đồ trạng thái
c. Giả mã (Pseudo code)
Phương pháp tiếp theo là sử dụng giả mã để thiết kế phần mềm. Bước đầu tiên là mô tả lôgic và mô tả chức năng mức cao. Danh sách liệt kê này mô tả bằng tiếng anh chính xác những gì phần mềm sẽ làm. Bước tiếp theo là đi vào giả mã thực nhưng giả mã vẫn còn được mô tả dưới dạng tiếng anh có cấu trúc, đoạn text thêm vào mô tả những cờ gì, biến gì và những loại phần tử khác được xử lý để thực hiện những chức năng mô tả. Điểm thuận lợi của phương pháp này là các mô tả chức năng có thể được ghi ra và chi tiết được hoàn chỉnh trong quá trình thiết kế, cuối cùng được chuyển thành giả mã.
Những mô tả chức năng và giả mã hữu dụng cho những hệ thống đơn giản được viết bởi một lập trình viên. Nếu nhiều lập trình viên làm việc trên cùng một dự án và đặc biệt là nếu nhiều bộ xử lý được sử dụng thì phải dùng một số phương tiện để mô tả đầy đủ những thông tin được chuyển giữa các tiến trình hoặc các chức năng được thực hiện bởi các lập trình viên. Thông tin về phân chia thời gian cho các chức năng thời gian thực là rất quan trọng. Ví dụ, chức năng X phải được gọi trong Y mili giây của chức năng Z hoặc là sẽ mất sự đồng bộ trong hoạt động. Trong một hệ thống phức tạp, có nhiều mức tài liệu là rất hữu dụng. Những lược đồ khối tổng thể chỉ ra những dữ liệu gì được truyền ra vào hệ thống, những lược đồ khác chỉ ra sự truyền thông giữa các hệ thống nhỏ hoặc bảng mạch hoặc những chức năng chính của firmware và dùng giả mã hoặc lược đồ trạng thái để mô tả từng chức năng hoạt động. Ví dụ ở hình 2.10 là mô tả một phần mềm về bộ chuyển đổi giao thức đơn giản. Hệ thống nhận dữ liệu từ cổng tuần tự RS-232 từ một hệ thống chủ, thực hiện việc xử lý, lưu dữ liệu vào bộ đệm và gửi nó cho một hệ thống thứ hai thông qua một giao tiếp khác. Giao thức XON/XOFF được sử dụng để điều khiển luồng dữ liệu:
Hình 2.10 Đặc tả theo giả mã
Phần mềm xử lý xung quanh vòng lặp này. Hệ thống thực sự còn bao gồm một số việc về kiểm tra lỗi và những công việc khác nhưng đã được loại bỏ để đơn giản hoá mô tả. Việc sử dụng giả mã cũng có những hạn chế nhất định như khó mô tả được hệ thống lớn phức tạp và mỗi lần thêm một chức năng mới cho ứng dụng thì cần phải xác định lại mô tả giả mã, ví dụ cách truyền tham số cho một hàm, gán các thanh ghi để tính toán một biểu thức…Mỗi lần chuyển sang một nền phần cứng mới thì cần thực hiện lại xây dựng mã chương trình cho phù hợp với kiến trúc bộ xử lý mới.
d. Thiết kế sử dụng UML
UML đã trở thành một phương pháp luận thiết kế phần mềm nhúng quan trọng trong những năm gần đây [10][19] (ngoài ra còn có UML-Realtime một phương pháp thiết kế kết hợp giữa UML và ngôn ngữ hướng đối tượng thời gian thực ROOM do công ty Object time đưa ra). Có hai cách thông dụng để sử dụng công cụ thiết kế đó là: như một bản đặc tả thiết kế ứng dụng để hướng dẫn viết mã chương trình hoặc như là một phương tiện để sinh mã trực tiếp. Việc sinh mã vẫn còn có những hạn chế và cần nâng cao tính năng này do nhiều vấn đề riêng biệt đối với từng loại hệ thống không thể thể hiện hết được. Phương pháp phân tích thiết kế và lập trình hướng đối tượng cũng là sợi dây xuyên suốt trong quá trình thiết kế sử dụng UML.
Đối với UML có một đặc điểm thuận lợi là có thể xây dựng những trình biên dịch mô hình cho các nền phần mềm khác nhau, như vậy là có thể sinh ra chương trình chạy trên nhiều kiến trúc vi xử lý khác nhau tiết kiệm chi phí phát triển. Một nền phần mềm đơn giản là tập các công nghệ xác định cấu trúc phần mềm như cấu trúc dữ liệu, cách truy cập dữ liệu, các luồng và tác vụ, cấu trúc bộ vi xử lý và định vi chương trình. Tất cả các chi tiết này được đưa vào trong bộ biên dịch mô hình để xác định vào một nền phần cứng đích.
Hình 2.11 Qui trình phát triển blueprint
Về ứng dụng nhúng thời gian thực, UML tập trung vào hỗ trợ cho việc mô hình