Event Management
Event
Event là một cấu trúc dữ liệu đại diện cho một sự kiện cụ thể có thể xảy ra trong hệ thống và được sử dụng như một phương tiện đồng bộ hóa. Event được sử dụng để đồng bộ hóa thứ tự hoạt động giữa các Task hỗ trợ trạng thái Waiting. Trong AUTOSAR OS, chỉ có Extended Task mới có thể sử dụng Event. Extended Task sẽ chờ đợi trong trạng thái Waiting cho đến khi một Event cụ thể xảy ra.
Extended Task có thể chuyển sang trạng thái Waiting để chờ đợi một Event cụ thể và ngừng thực thi, hoặc một Task khác có thể kích hoạt Event để đánh thức Task đang ở trạng thái Waiting và chuyển nó sang trạng thái Ready để tiếp tục thực thi. Ví dụ, Task B có thể cần kết quả tính toán từ Task A, do đó Task B sẽ chờ đợi (Wait) cho đến khi Task A phát ra Event báo hiệu rằng kết quả đã sẵn sàng.
Event Mechanism
• Tất cả các Task không ở trạng thái Suspended đều có thể thiết lập Event (Set Event) cho Extended Task (bao gồm cả Basic Task).
• Extended Task ở trạng thái Running sẽ chờ đợi trong trạng thái Wait cho đến khi Event được chỉ định xảy ra.
• Khi Event mà Extended Task đang chờ đợi xảy ra, Extended Task ở trạng thái Waiting sẽ chuyển sang trạng thái Ready.
• Nếu Event đã xảy ra và Extended Task đang ở trạng thái Running khi nó chờ đợi Event, thì Task sẽ duy trì trạng thái Running.
• Extended Task có một Event Number.
• Chỉ Extended Task ở trạng thái Wait mới có thể xóa (Clear) Event đó.

Hình trên là biểu đồ thời gian của quá trình đồng bộ giữa Task T1 và Task T2. Khi Task T2 phát sinh một Event, thông điệp sự kiện sẽ được truyền đến Task T1 và sau đó được yêu cầu đến Scheduler. Scheduler sẽ chuyển Task T1 từ trạng thái Waiting sang Ready, sau đó đến trạng thái Running, đồng thời chuyển Task T2 từ trạng thái Running sang Ready. Sau khi xử lý Event xong, trạng thái của các Task sẽ được chuyển đổi về trạng thái ban đầu.
API List
• StatusType SetEvent (TaskType <TaskID>, EventMaskType <Mask>)
o Nếu Event <Mask> mà Task <TaskID> đang chờ, chuyển trạng thái của Task từ Waiting sang Ready.
• StatusType ClearEvent (EventMaskType <Mask>)
o Hủy kích hoạt Event hiện tại.
o Chỉ có Task sở hữu Event muốn hủy mới có thể sử dụng.
• StatusType GetEvent (TaskType <TaskID>, EventMaskRefType <Mask>)
o Trả về trạng thái bit của tất cả các Event mà Task <TaskID> đang có.
• StatusType WaitEvent (EventMaskType <Mask>)
o Chuyển non-suspended extended Task sang trạng thái Wait.
※ StatusType: Được sử dụng để lưu trữ thông tin trạng thái đối với tất cả các dịch vụ API.
Xem thêm Chuyên Mục





