- vừa được xem lúc

freeRTOS Note

0 0 1

Người đăng: Nguyễn Đặng Triều

Theo Viblo Asia

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.

newlib.PNG

  • 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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Khái niệm về Multitasking trên vi điều khiển!

Giới thiệu nhanh. Vi điều khiển (microcontroller) là trái tim của rất nhiều thiết bị nhúng như máy đo nhiệt độ, đồng hồ thông minh, hệ thống cảnh báo, robot.

0 0 12

- vừa được xem lúc

Quản lý ưu tiên và lập lịch tác vụ hiệu quả trong FreeRTOS

Giới thiệu. Như đã giới thiệu từ những bài trước, hệ điều hành thời gian thực (RTOS) như FreeRTOS cho phép bạn thiết kế các ứng dụng nhúng có khả năng thực hiện nhiều nhiệm vụ (task) đồng thời.

0 0 13

- vừa được xem lúc

Message Queue: Khám Phá Bí Mật Giao Tiếp Giữa Các Task Trong FreeRTOS

Giới thiệu nhanh. Trong phần trước, chúng ta đã tìm hiểu về Task trong FreeRTOS – những “nhân viên” trong nhà máy phần mềm, mỗi task đảm nhận một nhiệm vụ cụ thể, chạy độc lập theo lịch của Scheduler.

0 0 9

- vừa được xem lúc

Vấn đề khi gửi dữ liệu vào Queue: Dữ liệu đã nhận nhưng sao chưa thực thi?

Giới thiệu. Ở bài viết trước, mình đã nêu cho các bạn biết khái niệm Queue là gì, cách sử dụng nó ra sao và những lưu ý khi sử dụng nó.

0 0 3

- vừa được xem lúc

ISR Yield là gì? Làm sao để ngắt tương tác với task trong RTOS

Giới thiệu nhanh. Ở bài trước, khi nói về Queue, mình có nói tới khái niệm ISR Yield.

0 0 4