Các kiểu lập trình trên RTOS

Các kiểu lập trình trên RTOS

(1) Service-Call-Type Programming

Service Call là gì?

Service call là các lệnh (command) được sử dụng để yêu cầu các chức năng của OS. Mục tiêu của hàm hoặc các giá trị cần thiết như thời gian phải được chỉ định dưới dạng các tham số thông qua một lệnh. Các tham số cần thiết phụ thuộc vào từng lệnh.


Service-Call-Type Programming là gì?

Cách thức lập trình này yêu cầu các chức năng của OS thông qua các command để thực thi các xử lý cần thiết. Yêu cầu các chức năng thông qua command được gọi là "issuing" một service call.

Trong lập trình C, gọi hàm tương ứng service call với các tham số để yêu cầu xử lý từ OS. Mỗi hàm sẽ trả về trạng thái tương ứng với yêu cầu (giá trị thường là OK, hoặc NG) hoặc số ID. Một số service call trả về địa chỉ vùng nhớ chứa các thông số của service call.

Hàm thực thi trong service call khác với hàm gọi bình thường. Khi một service call được gọi nó sẽ đưa task về trạng thái WAITING hoặc DORMANT, scheduler sẽ được kích hoạt chuyển sang task khác.
Quá trình thực thi task đã gọi service call sẽ bị gián đoạn cho đến khi task thoát khỏi trạng thái WAITING và được dispatched. Nói cách khác, trong khi một task tiếp tục xử lý mà không có bất kì service call nào được issuing, thì việc thực thi sẽ không được chuyển sang một task khác vì scheduler không được kích hoạt.

Chỉ có một trường hợp mà việc thực thi được chuyển sang một task khác ngay cả khi task đang được thực thi không gọi service call, đó là khi một trình xử lý ngắt (interrupt handler) gọi service call. Việc thực thi bắt buộc chuyển sang trình xử lý ngắt. Lưu ý rằng khi task đang được thực thi có mức ưu tiên cao hơn các tác vụ khác, việc thực thi không được chuyển sang tác vụ khác, trong trường hợp này, task được gọi từ bộ xử lý ngắt được đặt trong hàng đợi thực thi.

(2) Event-Driven Programming (Lập trình hướng sự kiện)

Event-Driven là gì?

Một chương trình event-driven hoạt động với sự thay đổi các trạng thái task mỗi khi có sự kiện tương ứng xảy ra.

Có một vài loại sự kiện, ví dụ: timer event hoặc interrupt event có thể dùng như một trigger và thay đổi một só trạng thái bên trong hệ thống cũng như gửi các message đến các task khác, ...
Trong hệ thống nhúng, các chương trình hoạt động bằng cách được kích hoạt, được đặt ở trạng thái DORMANT hoặc WAITING, hoặc thoát khỏi trạng thái WAITING, khi được kích hoạt bởi các sự kiện này.
Về vấn đề này, Event-Driven khác với data (form)-driven được sử dụng trong phần mềm máy tính thông thường. Trong các ứng dụng dựa trên Windows trong máy tính cá nhân, Hệ điều hành giám sát mọi sự kiện, chẳng hạn như nhấp vào nút hoặc cập nhật hộp văn bản hiển thị trên cửa sổ và kích hoạt chương trình tương ứng khi phát hiện một sự kiện. Đây cũng được gọi là Event-Driven Programming, nhưng nó khác với lập trình được sử dụng trong RTOS.

(3) Driver-Type Programming

Driver là chương trình sử dụng cho một phần cứng nhất định nào đó, ví dụ chương trình giao tiếp cho module ethernet,...

Mỗi nhà sản xuất sản phẩm phần cứng cung cấp trình điều khiển (driver) cho sản phẩm cho mỗi hệ điều hành. Bằng cách nhúng các trình điều khiển vào HĐH đích, các kỹ sư phát triển ứng dụng có thể vận hành phần cứng thông qua các chức năng giao diện lập trình ứng dụng (API) tiêu chuẩn; do đó, các kỹ sư có thể xử lý các thiết bị tiên tiến mà không cần kiến thức về các chi tiết cụ thể về phần cứng hoặc xử lý interrupt phức tạp.

Ngay cả đối với một sản phẩm phần cứng không được cung cấp driver, ứng dụng phải được tạo theo cấu trúc loại trình điều khiển để phần mềm ứng dụng có thể được sử dụng lại và các kỹ sư có thể được chỉ định một cách hiệu quả cho các công việc phát triển phù hợp; nghĩa là, chỉ các kỹ sư phát triển trình điều khiển mới cần có kiến thức về phần cứng, còn các kỹ sư phát triển ứng dụng không cần biết về phần cứng.

Nguồn: https://www.tron.org/seminar/on-the-web-seminar/chap-4/

 

Các chủ đề nâng cao về lập trình vi điều khiển (Embedded MCU) các bạn tham khảo tại: Blog - AK Embedded Software

Mọi thông tin góp ý về bài viết các bạn gửi về: