SlideShare a Scribd company logo
4.1 queue (hàng đợi, mailbox)
link video bài giảng của thầy
4.1.1 lý thuyết
mục đích: chia sẻ vùng nhớ dùng chung
mail box: là 1 cùng nhớ dùng chung, việc đưa data vào và lấy dữ liệu ra theo cơ chế
hàng đợi (queue)-kiểu FIFO.
khi cần truyền data thì task (interrupt) truyền sẽ đẩy data vào mail box.
khi cần nhận data thì task (ngắt) cứ vào mail box để lấy data ra thôi. Nhưng thường
task nhận data có mức ưu tiên cao và nghe liên tục để tránh mất dữ liệu. Khi task
nhận dữ liệu kiểm tra hàng đợi ko có dữ liệu thì task bị block, khi có data thì ngay lập
tức running.
lưu ý:
mail box: đầy nếu gửi dữ liệu vào thì mất dữ liệu.
khai báo semaphore sẵn sàng ban đầu=0;
4.1.2 một số hàm sử dụng phổ biến
osMessageQueueNew: hàm này dùng để khởi tạo hàng đợi (mail box- queue). Tham
số của nó bao gồm: số phần tử trong hàng đợi, kiểu data của phần tử (có thể là biến
cấu trúc) trong hàng đợi.
osMesageQueuePut-gửi data: hàm này dùng để đẩy data vào hàng đợi. tham số của
hàm bao gồm: tên hàng đợi (mesage queue id), trỏ đến biến lưu giá trị gửi, trỏ đến
mức ưu tiên của data gửi (bình thường để 0, thời gian time out (thường là 0.
osMesageQueueGet-lấy data: hàm này dùng để lấy data từ hàng đợi. tham số của nó
bao gồm: tên hàng đợi (mesage queue id), trỏ đến biến lưu giá trị nhận, mức ưu tiên
của data gửi (bình thường để 0, thời gian time out (thường là osWaitForever).
4.1.3 cấu hình cubemx
tasks queues:tên mesage queue, số lượng phần tử hàng đợi, kiểu dữ liệu mỗi phần tử đó,
quene: số phần tử, tên cấu trúc
4.1.4 một số chương trình ví dụ
4.1.4.1 chương trình 4.4 11400
high task nhận data liên tục, sau 1s low task gửi, sau 1s default task gửi.
link video bài giảng của thầy
link project, chương trình 4.4 copy từ file main.c
4.1.4.2chương trình 4.5 15800
sử dụng ngắt để đẩy dữ liệu vào hàng đợi hoặc lấy dữ liệu từ hàng đợi (mức ưu tiên thấp
nhất của task cũng cao hơn task).
khi máy tính gửi 1 ký tự xuống vdk→ vđk vào ngắt kiểm tra ký tự → gửi data vào hàng đợi
(đồng thời high task running→bị ngắt cho vào ready)→ ngắt thực hiện xong thì high mới
running.
enable ngắt hoặc DMA uart
link video bài giảng của thầy
link project, chương trình 4.5 copy từ file main.c
4.1.4.3 chương trình 4.6 20500
put data liệu dạng cấu trúc (có id, value) giúp biết đc đối tượng gửi lên là ai.
Mô tả chương trình: low task, default task gửi id của mỗi task, data (giá trị biến count tăng
giảm). high task lấy dữ liệu và hiển thị.
link video bài giảng của thầy
link project, chương trình 4.6 copy từ file main.c
4.2 ngắt
4.2.1 ngắt dùng semaphore
ngắt có mức ưu tiên thấp nhất thì vẫn cao hơn mọi task, nên nó có thể ngắt đc mọi
task, nhưng nếu chương trình ngắt đó quá dài thì có thể làm mất tính đa nhiệm của
hệ thống. giải pháp khi có ngắt xảy ra thì nó sẽ kích hoạt 1 task khác thực hiện trình
phục vụ ngắt thông qua việc release (semaphore=1. và task thực thi chương trình
ngắt có mức ưu tiên cao sẽ acquire khi semapore =1 sẽ hết block và thực thi ngay và
reset semaphore=0 (lưu ý: khai báo semaphore sẵn sàng ban đầu=0.
ngoài ra nếu sử dụng binarysemaphore thì việc xử lý ngắt có thể bị sót khi ngắt có
nhiều ngắt xảy ra khi task ISR đang thực thi và nó chỉ thực thi sự kiện ngắt của
semaphore cuối cùng thôi→ sử dụng counting semaphore (nhiều semaphore cho 1
tài nuyên), mỗi ngắt sẽ tăng semaphore lên, task ISR thực thi sẽ giảm 1 semaphore
(nếu qua semaphore max thì vẫn có thể sót ngắt nhé, nếu ko có semaphore thì task
bị treo).
phần hàm sử dụng và cấu hình cubemx tương tự đã nói trong phần semaphore. chỉ chú ý
thêm:
semaphore available=0 để tránh khi mới reset thì ISR task thực hiện luôn;
/* creation of myBinarySemISR */
myBinarySemISRHandle = osSemaphoreNew(1, 0, &myBinarySemISR_attributes);
VD chương trình 5.1 2000
high task dùng uart có semaphore, low task dùng uart có semaphore chờ nhấn nút,
default task dùng uart ko cần senaphore, ISR task xử lý khi có ngắt. Ngắt uart
link video bài giảng của thầy
link project, chương trình 5.1 copy từ file main.c
4.2.2 ngắt dùng hàng đợi (queue - mailbox)
Nếu dùng semaphore thì 1 ngắt tương ứng với 1 task, con khi ta có nhiều ngắt và
muốn quản lý trong 1 task duy nhất thì có thể dùng hàng đợi (queue-mailbox), cụ thể
như sau: khi có ngắt ở mỗi ngắt thì thì ngắt sẽ put data, id vào hàng đợi. task có mức
ưu tiên cao nhất (hết block) sẽ lấy data kiểm tra của id, data để thực hiện ngắt tương
ứng.
VD chương trình 4.9
high task, default task, low task sử dụng uart bình thường, ngắt uart gửi thông báo vào
hàng đợi, ngắt ngoài gửi thông báo vào hàng đợi. ISR task nhận thông báo và thực hiện
trình phục vụ ngắt.
link project, chương trình 4.9 copy từ file main.c
link video bài giảng của thầy
/* creation of myCountingSemISR */
myCountingSemISRHandle = osSemaphoreNew(5, 0, &myCountingSemISR_attributes);

More Related Content

PDF
Rtos 3 semaphore vs mutex
PDF
FREERTOS_với_ESP32_IOTCHIP_GOODDDDDDDDDD
PDF
RTOS 5 event vs notify
PDF
Rtos 2: time slice vs preeption (cùng mức ưu tiên vs có chiếm quyền
PDF
Lập Trình UART Trên STM32: Giao Tiếp Nối Tiếp, Xử Lý Ngắt Và Ứng Dụng Thực Tế
PPTX
TL5.4.1 - #Week10-Chapter5-3.pptx - Hệ ddieuf hành
PPTX
Threads - Lập trình hệ thống IT4786
PDF
Python Beginner Class day-14-thread
Rtos 3 semaphore vs mutex
FREERTOS_với_ESP32_IOTCHIP_GOODDDDDDDDDD
RTOS 5 event vs notify
Rtos 2: time slice vs preeption (cùng mức ưu tiên vs có chiếm quyền
Lập Trình UART Trên STM32: Giao Tiếp Nối Tiếp, Xử Lý Ngắt Và Ứng Dụng Thực Tế
TL5.4.1 - #Week10-Chapter5-3.pptx - Hệ ddieuf hành
Threads - Lập trình hệ thống IT4786
Python Beginner Class day-14-thread

Similar to Rtos 4 queue vs interrupt (20)

PDF
De tai he dieu hanh nam 2010 2011
PDF
C23_Buoi3_UART _ I2Cdddddddddddddddd.pdf
PPTX
Lecture 11 - Cau truc du lieu Queues.pptx
PPT
4.chap4 synch
PDF
Bai tap ly thuyet He dieu hanhBai tap ly thuyet He dieu hanh.pdf
PPT
Bai04 quan ly tien trinh
PPT
PDF
Intro Parallel Computing for student11.pdf
DOC
De cuong thiet bi ngoai vi
PPTX
CauTrucDuLieu_BaiGiang5_Stack_Queue.pptx
PDF
Ch03
PDF
[Duong tran] shared_variable
PPTX
Giao trinh Stack va Queue trong DSA.pptx
PPTX
Chapter1 - Data link Layer (1) - HCMUT - 2023
PDF
Chương 3 - Cac Giao Thuc Co Ban su dung thuong xuyen
DOC
Ctdl ktlt tuan5
PDF
Baitap dongbo.bdf
PPTX
BE 09- asynchronous messagesssssssss.pptx
PDF
PDF
02 stack queue
De tai he dieu hanh nam 2010 2011
C23_Buoi3_UART _ I2Cdddddddddddddddd.pdf
Lecture 11 - Cau truc du lieu Queues.pptx
4.chap4 synch
Bai tap ly thuyet He dieu hanhBai tap ly thuyet He dieu hanh.pdf
Bai04 quan ly tien trinh
Intro Parallel Computing for student11.pdf
De cuong thiet bi ngoai vi
CauTrucDuLieu_BaiGiang5_Stack_Queue.pptx
Ch03
[Duong tran] shared_variable
Giao trinh Stack va Queue trong DSA.pptx
Chapter1 - Data link Layer (1) - HCMUT - 2023
Chương 3 - Cac Giao Thuc Co Ban su dung thuong xuyen
Ctdl ktlt tuan5
Baitap dongbo.bdf
BE 09- asynchronous messagesssssssss.pptx
02 stack queue
Ad

Recently uploaded (20)

PPTX
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
DOCX
Ôn tập văn học phương đông thi giữa kì ..
PPTX
2. tràn khí màng phổi bệnh học nộii.pptx
PDF
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
PPTX
Triet hoc con nguoi va triet hoc thac si
PDF
Dao tao va Phat trien NỘI DUNG ÔN THI CHO SINH VIÊN
PPTX
Bai 44 Thuyet dong hoc phan tu chat khi Cau tao chat .pptx
DOCX
6.CQ_KT_Ke toan tai chinh 2_Pham Thi Phuong Thao.docx
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PDF
SÁNG KIẾN “NGHIÊN CỨU VÀ ĐỀ XUẤT GIẢI PHÁP TỰ RÈN LUYỆN KỸ NĂNG MỀM CHO HỌC S...
PPTX
Bài 6 Du an bua an ket noi yeu thuong.pptx
DOCX
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
PPT
Bai 42 Su chay thanh dong cua chat long va chat khi Dinh luat Becnuli.ppt
PPTX
slide chương 2 excel cơ bản...........,,
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PPT
SINH 8 TUYẾN YÊN TUYẾN GIÁP CÂU TẠO VÀ CHỨC NĂNG
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
DOCX
Ôn tập Văn học phương đông tài liệu tham khảo
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PDF
SÁNG KIẾN THIẾT KẾ MÔ HÌNH HỆ SINH THÁI HƯỚNG NGHIỆP CHO HỌC SINH THPT TRONG ...
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
Ôn tập văn học phương đông thi giữa kì ..
2. tràn khí màng phổi bệnh học nộii.pptx
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
Triet hoc con nguoi va triet hoc thac si
Dao tao va Phat trien NỘI DUNG ÔN THI CHO SINH VIÊN
Bai 44 Thuyet dong hoc phan tu chat khi Cau tao chat .pptx
6.CQ_KT_Ke toan tai chinh 2_Pham Thi Phuong Thao.docx
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
SÁNG KIẾN “NGHIÊN CỨU VÀ ĐỀ XUẤT GIẢI PHÁP TỰ RÈN LUYỆN KỸ NĂNG MỀM CHO HỌC S...
Bài 6 Du an bua an ket noi yeu thuong.pptx
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
Bai 42 Su chay thanh dong cua chat long va chat khi Dinh luat Becnuli.ppt
slide chương 2 excel cơ bản...........,,
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 12 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
SINH 8 TUYẾN YÊN TUYẾN GIÁP CÂU TẠO VÀ CHỨC NĂNG
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
Ôn tập Văn học phương đông tài liệu tham khảo
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
SÁNG KIẾN THIẾT KẾ MÔ HÌNH HỆ SINH THÁI HƯỚNG NGHIỆP CHO HỌC SINH THPT TRONG ...
Ad

Rtos 4 queue vs interrupt

  • 1. 4.1 queue (hàng đợi, mailbox) link video bài giảng của thầy 4.1.1 lý thuyết mục đích: chia sẻ vùng nhớ dùng chung mail box: là 1 cùng nhớ dùng chung, việc đưa data vào và lấy dữ liệu ra theo cơ chế hàng đợi (queue)-kiểu FIFO. khi cần truyền data thì task (interrupt) truyền sẽ đẩy data vào mail box. khi cần nhận data thì task (ngắt) cứ vào mail box để lấy data ra thôi. Nhưng thường task nhận data có mức ưu tiên cao và nghe liên tục để tránh mất dữ liệu. Khi task nhận dữ liệu kiểm tra hàng đợi ko có dữ liệu thì task bị block, khi có data thì ngay lập tức running. lưu ý: mail box: đầy nếu gửi dữ liệu vào thì mất dữ liệu. khai báo semaphore sẵn sàng ban đầu=0; 4.1.2 một số hàm sử dụng phổ biến
  • 2. osMessageQueueNew: hàm này dùng để khởi tạo hàng đợi (mail box- queue). Tham số của nó bao gồm: số phần tử trong hàng đợi, kiểu data của phần tử (có thể là biến cấu trúc) trong hàng đợi. osMesageQueuePut-gửi data: hàm này dùng để đẩy data vào hàng đợi. tham số của hàm bao gồm: tên hàng đợi (mesage queue id), trỏ đến biến lưu giá trị gửi, trỏ đến mức ưu tiên của data gửi (bình thường để 0, thời gian time out (thường là 0. osMesageQueueGet-lấy data: hàm này dùng để lấy data từ hàng đợi. tham số của nó bao gồm: tên hàng đợi (mesage queue id), trỏ đến biến lưu giá trị nhận, mức ưu tiên của data gửi (bình thường để 0, thời gian time out (thường là osWaitForever). 4.1.3 cấu hình cubemx tasks queues:tên mesage queue, số lượng phần tử hàng đợi, kiểu dữ liệu mỗi phần tử đó,
  • 3. quene: số phần tử, tên cấu trúc 4.1.4 một số chương trình ví dụ 4.1.4.1 chương trình 4.4 11400 high task nhận data liên tục, sau 1s low task gửi, sau 1s default task gửi. link video bài giảng của thầy link project, chương trình 4.4 copy từ file main.c 4.1.4.2chương trình 4.5 15800 sử dụng ngắt để đẩy dữ liệu vào hàng đợi hoặc lấy dữ liệu từ hàng đợi (mức ưu tiên thấp nhất của task cũng cao hơn task). khi máy tính gửi 1 ký tự xuống vdk→ vđk vào ngắt kiểm tra ký tự → gửi data vào hàng đợi
  • 4. (đồng thời high task running→bị ngắt cho vào ready)→ ngắt thực hiện xong thì high mới running. enable ngắt hoặc DMA uart link video bài giảng của thầy link project, chương trình 4.5 copy từ file main.c 4.1.4.3 chương trình 4.6 20500 put data liệu dạng cấu trúc (có id, value) giúp biết đc đối tượng gửi lên là ai. Mô tả chương trình: low task, default task gửi id của mỗi task, data (giá trị biến count tăng giảm). high task lấy dữ liệu và hiển thị. link video bài giảng của thầy link project, chương trình 4.6 copy từ file main.c 4.2 ngắt 4.2.1 ngắt dùng semaphore ngắt có mức ưu tiên thấp nhất thì vẫn cao hơn mọi task, nên nó có thể ngắt đc mọi task, nhưng nếu chương trình ngắt đó quá dài thì có thể làm mất tính đa nhiệm của hệ thống. giải pháp khi có ngắt xảy ra thì nó sẽ kích hoạt 1 task khác thực hiện trình phục vụ ngắt thông qua việc release (semaphore=1. và task thực thi chương trình
  • 5. ngắt có mức ưu tiên cao sẽ acquire khi semapore =1 sẽ hết block và thực thi ngay và reset semaphore=0 (lưu ý: khai báo semaphore sẵn sàng ban đầu=0.
  • 6. ngoài ra nếu sử dụng binarysemaphore thì việc xử lý ngắt có thể bị sót khi ngắt có nhiều ngắt xảy ra khi task ISR đang thực thi và nó chỉ thực thi sự kiện ngắt của semaphore cuối cùng thôi→ sử dụng counting semaphore (nhiều semaphore cho 1 tài nuyên), mỗi ngắt sẽ tăng semaphore lên, task ISR thực thi sẽ giảm 1 semaphore (nếu qua semaphore max thì vẫn có thể sót ngắt nhé, nếu ko có semaphore thì task bị treo).
  • 7. phần hàm sử dụng và cấu hình cubemx tương tự đã nói trong phần semaphore. chỉ chú ý thêm: semaphore available=0 để tránh khi mới reset thì ISR task thực hiện luôn; /* creation of myBinarySemISR */ myBinarySemISRHandle = osSemaphoreNew(1, 0, &myBinarySemISR_attributes);
  • 8. VD chương trình 5.1 2000 high task dùng uart có semaphore, low task dùng uart có semaphore chờ nhấn nút, default task dùng uart ko cần senaphore, ISR task xử lý khi có ngắt. Ngắt uart link video bài giảng của thầy link project, chương trình 5.1 copy từ file main.c 4.2.2 ngắt dùng hàng đợi (queue - mailbox) Nếu dùng semaphore thì 1 ngắt tương ứng với 1 task, con khi ta có nhiều ngắt và muốn quản lý trong 1 task duy nhất thì có thể dùng hàng đợi (queue-mailbox), cụ thể như sau: khi có ngắt ở mỗi ngắt thì thì ngắt sẽ put data, id vào hàng đợi. task có mức ưu tiên cao nhất (hết block) sẽ lấy data kiểm tra của id, data để thực hiện ngắt tương ứng. VD chương trình 4.9 high task, default task, low task sử dụng uart bình thường, ngắt uart gửi thông báo vào hàng đợi, ngắt ngoài gửi thông báo vào hàng đợi. ISR task nhận thông báo và thực hiện trình phục vụ ngắt. link project, chương trình 4.9 copy từ file main.c link video bài giảng của thầy /* creation of myCountingSemISR */ myCountingSemISRHandle = osSemaphoreNew(5, 0, &myCountingSemISR_attributes);