Các Bư C TH C Thi 2 Task Và Đ NG B Task

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

Các bước thực thi 2 Task và Đồng bộ task.

- Tạo 2 task: có mức độ ưu tiên bằng nhau


+ main_Task : Chức năng đọc dữ liệu từ cảm biến và ghi dữ liệu lên Queue
+ task_Sensor: Chức năng đọc giá trị từ Queue và in kết quả ra.

- Tạo Queue: cho phép các task có thể kết nối với nhau, nó là một FIFO
buffer được định nghĩa bởi độ dài (số phần tử mà buffer có thể lưu trữ) và
kích thước dữ liệu (kích thước của các thành phần trong buffer).
+Tạo Queue dùng hàm:
osMessageQDef(myQueue01, 16, uint8_t);
myQueue01: Tên của message queue
16: Số lượng item trong queue
Uint8_t : Size của item trong queue

+Tạo message và cấp phát bộ nhớ dùng  osMessageCreate() , hàm này sẽ trả về
một handle/ID được sử dụng bởi một API khác liên quan tới việc tạo
message queue.
myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL);
osMessageQ(myQueue01): Định nghĩa message queue
NULL: Task ID ở đây không sử dụng thì ta sẽ set NULL
- Đồng bộ gửi nhận giữa các Task với nhau.
+Gửi nhận data từ các task khác với message queue bằng cách dùng hàm
osMessagePut và osMessageGet

+osMessagePut hàm dùng để ghi giá trị vào queue


osMessagePut(myQueue01Handle, nhiet_do, 200);
osMessagePut(myQueue01Handle, do_am, 200);
myQueue01Handle : Message queue handle/ID được sử dụng
nhiet_do: dữ liệu được gửi đi
200: Thời gian timeout, 0 nghĩa là ko có timeout
+ osMessageGet hàm dùng để đọc giá trị từ queue.
retvalue = osMessageGet(myQueue01Handle, 5000);
myQueue01Handle : Message queue handle/ID
5000: Thời gian timeout
osMessageGet() sẽ return một osEvent structure/object, data sẽ được lưu trữ
trong message_event.value

- Muốn lấy dữ liệu từ osEvent thì cần phải sử dụng

+osEventName.v nếu giá trị là 32bit message(hoặc 8/16bit)


+osEventName.p và gõ lại giá trị datatype được lựa chọn.
my_print(" nhiet do =%d'c ", retvalue.value.p);
my_print(" do am =%d \n", retvalue.value.p);

You might also like