RTOS như FreeRTOS trên vi điều khiển để làm gì vậy?

Tôi viết cái này sau khi vừa xong một dự án dùng FreeRTOS, và tôi hơi ước gì mình đừng dùng nó. Tôi đã làm một cái widget ô tô khá là xịn, với một đống thứ phức tạp và các thiết bị ngoại vi hiệu năng cao, như bộ nhớ USB, hỗ trợ thẻ SD, mấy thứ liên quan đến hệ thống tệp, đồ họa trên màn hình OLED nhỏ, vân vân.

Có một vài nhược điểm rõ ràng:

  • tăng độ phức tạp nói chung

  • việc cấp phát bộ nhớ động trong môi trường bị giới hạn là một ý tưởng rất khó, vì có những giới hạn về cả tổng RAM và thời gian chạy.

  • tất cả các vấn đề tồn tại trong lập trình đa luồng bỗng nhiên trở nên liên quan, nhưng lại không có các công cụ và cơ chế đồng bộ hóa tinh vi có sẵn trong các ngôn ngữ “lớn”

  • mỗi Task cần stack riêng, điều này có thể nhanh chóng làm tăng nhu cầu RAM vượt quá mức chấp nhận được

  • “ma thuật đen” của việc chiếm quyền điều khiển của RTOS có thể làm hỏng một số trình gỡ lỗi, và việc điều tra các sự cố trở nên khó khăn hơn nhiều

  • Vì hầu hết các uC không phải là đa lõi, việc đa nhiệm chiếm quyền điều khiển chỉ là gánh nặng.

  • Trừu tượng hóa có thể làm cho mọi thứ khó hiểu hơn

Nghĩ lại về dự án, mọi thứ sẽ dễ dàng hơn nhiều nếu tôi chỉ làm mọi thứ bằng cách sử dụng các mảng được cấp phát trước cho bộ nhớ, DMA phần cứng (dù sao thì nó cũng nhanh hơn), và chỉ dựa vào ISR cho các hành vi theo sự kiện, và đối với tất cả các thứ thời gian thực, tôi chỉ cần dùng bộ hẹn giờ phần cứng/vòng lặp while(true), cái này dễ như ăn cháo.

Tôi đã làm điều này như một dự án sinh viên, và nó giống như việc nhồi nhét càng nhiều thứ hay ho càng tốt. Nhưng một trong những bài học quan trọng của tôi là sự phức tạp/gánh nặng bổ sung của RTOS trên uC không được chứng minh trong trường hợp này, và tôi gặp khó khăn khi nghĩ đến một trường hợp mà nó có thể được chứng minh từ quan điểm thực tế.

Bạn có thể vui lòng liệt kê một vài ví dụ trong đó việc sử dụng RTOS dễ dàng hơn so với việc không sử dụng nó, hoặc trong đó dự án sẽ thực sự không thể thực hiện được nếu không có RTOS không?