Lý thuyết cơ bản: https://hocarm.org/rtos-co-ban-phan-1/ Ví dụ đơn giản: https://hocarm.org/rtos-co-ban-phan-2/
MONGOOSE OS để phát triển ứng dụng IOT
FreeRTOS với CuBeMX
https://www.youtube.com/watch?v=kCBJ4jJNBO4
https://www.youtube.com/watch?v=muOL9SH0p9g&list=PLfIJKC1ud8gj1t2y36sabPT4YcKzmN_5D
I. Những lưu ý khi chạy freeRTOS trên CubeIDE
1. Thư viện newlib
Khi lập trình vi điều khiển nếu ta muốn sử dụng những hàm quen thuộc như printf, malloc, ... Tuy nhiên vi điều khiển không có OS để hỗ trợ những hàm này. Newlib là thư viện cung cấp những hàm đó mà không cần OS.
2. Sử dụng Newlib cần lưu ý gì?
- Syscalls: Một số hàm như printf hay malloc cần các chức năng hệ điều hành như write, sbrk… nhưng vì STM32 không có OS, nên bạn phải override lại các hàm này. CubeIDE thường tạo sẵn file syscalls.c hoặc sysmem.c để xử lý.
- In ra UART với printf: Bạn cần cấu hình lại hàm __io_putchar() để định tuyến printf ra cổng UART.
int __io_putchar(int ch) { HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch;
}
3. Sử dụng Newlib với FreeRTOS.
- Bước 1. Trong file
*.ioc
=> Pinout & Configurations => FREERTOS => Advanced settings - Bước 2: Chọn Enable trong USE_NEWLIB_REENTANT.
II. Sự khác biệt giữa FreeRTOS với CMSIS RTOS
1. API FreeRTOS (API gốc của FreeRTOS)
a. Ưu điểm:
- Trực tiếp và mạnh mẽ: FreeRTOS API cung cấp quyền kiểm soát trực tiếp và chi tiết hơn đối với các tính năng của RTOS. Bạn có thể tận dụng tối đa các khả năng của FreeRTOS.
- Cộng đồng lớn và tài liệu phong phú: FreeRTOS có một cộng đồng người dùng và nhà phát triển khổng lồ, cùng với tài liệu và ví dụ minh họa rất chi tiết. Điều này giúp bạn dễ dàng tìm kiếm hỗ trợ và giải quyết vấn đề.
- Tính linh hoạt cao: FreeRTOS cho phép bạn tùy chỉnh nhiều khía cạnh của kernel, bao gồm các phương pháp cấp phát bộ nhớ (memory allocators), điều này rất hữu ích cho các hệ thống nhúng có tài nguyên hạn chế hoặc yêu cầu đặc biệt.
- Hiệu suất tối ưu: Vì không có lớp trừu tượng trung gian, FreeRTOS API có thể cung cấp hiệu suất tốt hơn một chút trong một số trường hợp.
b. Nhược điểm:
- Phụ thuộc vào FreeRTOS: Mã nguồn của bạn sẽ bị ràng buộc chặt chẽ với FreeRTOS. Nếu sau này bạn muốn chuyển sang một RTOS khác, bạn sẽ phải viết lại phần lớn mã liên quan đến RTOS.
- Đường cong học tập: Với nhiều hàm API và tùy chỉnh, việc học và nắm vững FreeRTOS API có thể tốn thời gian hơn đối với người mới bắt đầu.
2. API CMSIS RTOS (CMSIS-RTOS2)
a. Ưu điểm:
- Tính di động (Portability): Đây là ưu điểm lớn nhất của CMSIS RTOS. Nó cung cấp một giao diện chuẩn hóa cho các nhân RTOS khác nhau (như FreeRTOS, Keil RTX5, v.v.) chạy trên bộ xử lý ARM Cortex. Điều này có nghĩa là bạn có thể viết mã ứng dụng sử dụng CMSIS RTOS API và sau đó dễ dàng chuyển đổi giữa các RTOS khác nhau mà không cần thay đổi đáng kể mã nguồn ứng dụng.
- Giảm thời gian học tập: Nếu bạn đã quen thuộc với CMSIS RTOS API, bạn có thể dễ dàng làm việc với bất kỳ RTOS nào hỗ trợ API này, giảm bớt công sức học các API riêng của từng RTOS.
- Tích hợp tốt với hệ sinh thái ARM: CMSIS là một phần của hệ sinh thái ARM, được thiết kế để hoạt động tốt với các công cụ phát triển và phần cứng của ARM.
- Hỗ trợ tính năng nâng cao: CMSIS-RTOS2 cũng hỗ trợ các tính năng CPU nâng cao như secure/non-secure execution với TrustZone, hoạt động đa lõi, bảo vệ truy cập với MPU.
b. Nhược điểm:
- Lớp trừu tượng: Vì là một lớp trừu tượng, CMSIS RTOS có thể thêm một chút overhead so với việc sử dụng FreeRTOS API trực tiếp, mặc dù trong nhiều trường hợp, sự khác biệt này là không đáng kể và không ảnh hưởng đến hiệu suất thực tế.
- Hạn chế tính năng đặc thù: CMSIS RTOS định nghĩa một tập hợp tính năng tối thiểu phổ biến. Nếu ứng dụng của bạn cần các tính năng rất đặc biệt hoặc tối ưu hóa sâu của một RTOS cụ thể (mà FreeRTOS có thể cung cấp nhưng CMSIS RTOS không bao gồm trong API chuẩn), bạn có thể cần phải sử dụng các API gốc của RTOS đó song song hoặc bỏ qua CMSIS RTOS API.