Lâu lắm rồi mới làm được một serie hoàn chỉnh về RTOS, mục đích chính của mình ban đầu không phải là đi sâu quá vào RTOS, về lý thuyết task, queue, mutex, semaphore, mà chỉ là những thứ cơ bản nhất, để các bạn có thể hình dung được RTOS là gì ? Nó bao gồm những gì trong đó, làm sao để tạo ra được một project RTOS và build, nạp chương trình, kiểm tra hoạt động của từng thành phần, in ấn này nọ debug ra để quan sát, làm sao để chuyển một dự án bình thường non RTOS sang RTOS,…
Đấy mục tiêu ban đầu là thế, nhưng trong lúc làm thì cũng ngâm ít tài liệu này, bí kíp kia, cóp nhặt mỗi nơi một ít sao cho phù hợp, tất nhiên có đúng có sai, rất mong nhận được góp ý từ mọi người.
Nay mình làm một trang để tổng hợp lại các ví dụ để các bạn có nhu cầu tìm hiểu thì cũng có được một trang để tham khảo.
Phần cứng
Vì mình tận dụng các phần cứng có sẵn, do đó dùng luôn con STM32F407 Discovery, con này thì giá hơi mắc, nhưng được cái tốc độ cũng khá cao nên thuận tiện làm nhiều thứ, mình sẽ xem xét thử port những ví dụ ở trên F4 sang kit khác nếu có thời gian :D.
Phần mềm
Về chương trình ví dụ minh họa, hầu hết mình đều đã đăng lên git, ở mục
https://github.com/hocarm/FreeRTOS-STM32F4-Tutorial
Các bạn chỉ cần clone về và tham khảo thôi, nếu các bạn muốn tự mình trải nghiệm thì có thể tự làm theo các ví dụ hướng dẫn, sau đó vướng chỗ nào mình mở code mình làm sẵn ra xem vì sao của mình làm chưa chạy được.
Nội dung
Mình hiện tại đã làm ra 9 bài cơ bản, để các bạn có thể tiện theo dõi thì mình list ra bên dưới kèm thứ tự và nội dung để các bạn dễ follow theo học
RTOS cơ bản phần 1
Đây là phần đầu tiên mình viết, chủ yếu là lý thuyết, tổng quan các kiểu về RTOS, mình cũng cố tóm gọn lại rồi nên trong lúc làm có 1 số đoạn tóm tắt quá các bạn không hiểu, ko sao hết, cứ đọc để nắm cơ bản
RTOS cơ bản phần 2
Phần 2 này cũng gần 1 năm sau mới viết lại, trong 1 buổi chiều máu viết lách chém gió nó dồn lên não cái bay vào làm và viết luôn, nội dung chính tập trung vào phần thực hành, về làm một project non RTOS, sau đó chuyển cái này sang RTOS, phần này cũng ko đi quá sâu, chỉ là show hàng cách người ta chuyển dự án sang RTOS như thế nào
RTOS với CubeMX
Phần này là tiếp nối 2 phần trên, lại phải đi lại từ đầu, chủ yếu là cách để tạo ra project nhanh nhất, mở CubeMX lên xong tick mấy tick, gen code, build phát ăn ngay, sướng tê hết cả trym, cái này xưa mình có làm đoạn video với kit F1 xong bỏ đó, giờ chuyển qua F4 thì cũng y chang, đổi lại chip là xong. Bài này như kiểu blink LED vậy đó.
Sử dụng SWO để print thông tin từ STM32
Khi nắm được cách tạo project cơ bản, build nạp chương trình xuống dưới kit và tận hưởng niềm vui hân hoan khúc dạo đầu rồi thì cũng cần để debug thông tin với RTOS, với những chương trình nonRTOS thì debug khá dễ, chỉ print ra là xong, tuy nhiên nếu dùng print ở RTOS mà không có SWO thì rất khó để debug, ơn trời chỉnh vài cấu hình trong SWO là có thể debug ngon lành. Mục đích của bài viết này làm ra để dùng cho nhiều bài viết sau đó
RTOS Task
Từ nội dung tổng quát của RTOS cơ bản phần 1 thì mình làm thêm các ví dụ về Task, thêm, bớt, xóa, sửa, set priority,… chủ yếu để mọi người biết cách dùng các API mà FreeRTOS/CMSIS RTOS nó cung cấp
RTOS Queues
Tiếp tục sau task sẽ là queue, message queue, mail queue, gửi data từ task này sang task nọ,…
RTOS Semaphores
Các ví dụ về semaphore, các API thường dùng,…
RTOS Mutex
Các ví dụ về mutex
RTOS Software timer
Các ví dụ về software timer
còn nữa mà để có post rồi mình sẽ update sau nha anh em ,….
Nghiên cứu
Với những bài viết trên, như mình đã nói, chỉ trang bị cho các bạn các kiến thức và khái niệm cơ bản nhất, từ các ví dụ minh họa cơ bản hi vọng các bạn có thể dựa vào đó để hình dung ra được RTOS và các thành phần ở bên trong nó hoạt động như thế nào. Để level tăng cao hơn thì không còn cách nào khác ngoài đọc thêm các tài liệu tiếng anh, các bạn có thể tham khảo ở một số nguồn sau
- https://www.freertos.org/
- https://aws.amazon.com/freertos/
- https://www.freertos.org/Documentation/RTOS_book.html
Hi vọng nó sẽ bổ ích để các bạn có thể master RTOS trong tương lai
Thân ái,
SC