1 điểm bởi GN⁺ 2024-07-07 | 1 bình luận | Chia sẻ qua WhatsApp

Chuyển sang RTOS: trải nghiệm trên RP2040

Martijn Braam

  • Bài viết của Martijn Braam, người làm các công việc liên quan đến máy tính
  • Đang thực hiện nhiều dự án vi điều khiển
  • Chủ yếu sử dụng bo mạch Raspberry Pi Pico, trải nghiệm phát triển khá tốt

Tổng quan dự án

  • Chế tạo bộ điều khiển phần cứng để điều khiển thiết bị video
  • Điều khiển camera PTZ và thiết bị chuyển mạch video
  • Do hiệu năng của bộ điều khiển hiện có không tốt nên cần làm một bảng điều khiển mới

Thiết kế phần cứng

  • Gồm 9 nút RGB, joystick analog và màn hình hiển thị
  • Sử dụng mô-đun giao tiếp RS-485 và Ethernet
  • Sau nhiều lần chỉnh sửa phần cứng, đã hoàn tất việc hiện thực chức năng

Phần mềm ban đầu

  • Bắt đầu với dự án cmake dùng pico-sdk
  • Gán lõi thứ hai cho mô-đun Wiznet, lõi thứ nhất xử lý I/O giao diện người dùng
  • Độ phức tạp tăng lên do phải xử lý nhiều tác vụ cùng lúc

FreeRTOS

  • Dùng FreeRTOS để xử lý song song nhiều tác vụ
  • Tạo nhiều tác vụ (Task): nút bấm, LED, mạng, DHCP, mDNS, ATEM, VISCA
  • Vấn đề của FreeRTOS: hệ thống bị treo khi dùng printf, thiếu lớp trừu tượng hóa phần cứng

Apache NuttX

  • Cung cấp môi trường tương tự hệ thống Unix
  • Sau khi thiết lập ban đầu có thể dùng shell thực sự
  • Có thể cấu hình phần cứng thông qua hệ thống menuconfig/Kconfig
  • Chức năng cơ bản không hoạt động do vấn đề cấu hình bus i2c
  • Không cần đường dẫn hệ thống tệp và shell

Zephyr

  • Cung cấp tiện ích Python để cấu hình dự án
  • Cần tải xuống kho git dung lượng 5GB
  • Yêu cầu cài đặt Zephyr SDK, nhưng cũng có thể dùng ARM toolchain hiện có
  • Hỗ trợ Raspberry Pi Pico còn hạn chế, nên đã thử dùng bo mạch khác
  • Dù đã sửa lỗi build và cảnh báo thì vẫn không hoạt động

Kết luận

  • Đã build thành công một số ứng dụng bằng FreeRTOS
  • Cần hiện thực giải pháp thay thế printf
  • Sẽ tiếp tục dùng FreeRTOS để cố gắng hiện thực chức năng mong muốn

Tóm tắt của GN⁺

  • Bài viết này nói về quá trình chuyển sang RTOS trong một dự án vi điều khiển
  • So sánh ưu và nhược điểm của FreeRTOS, Apache NuttX và Zephyr
  • Kết luận rằng FreeRTOS là lựa chọn phù hợp nhất
  • Giúp hiểu rõ nhiều yếu tố cần cân nhắc khi chọn RTOS
  • Các dự án có chức năng tương tự gồm FreeRTOS và Zephyr

1 bình luận

 
GN⁺ 2024-07-07
Ý kiến trên Hacker News
  • Có vẻ tác giả này đang kỳ vọng RTOS sẽ giống như môi trường Arduino

    • Nhiều bản Arduino dùng mbed hoặc freertos
    • Zephyr dễ dùng và cũng hỗ trợ Pi Pico
  • Tóm tắt ngắn gọn về các RTOS:

    • FreeRTOS: được hỗ trợ trên hầu hết SOC/thiết bị, nhưng driver thì khác nhau theo từng SOC/thiết bị
    • Zephyr: hỗ trợ lớp trừu tượng hóa phần cứng thực sự và hỗ trợ phần lớn SOC
    • NuttX: hỗ trợ chưa tốt, nhưng nếu chạy được thì rất tuyệt
  • Cài cả toolchain cho toàn hệ thống theo kiểu UNIX truyền thống là một nỗi đau

    • Dùng Python làm công cụ sẽ gây ra vấn đề về phiên bản
    • Công cụ nên là các binary được liên kết tĩnh
  • PlatformIO đang đi đúng hướng

    • Cần quản lý toolchain, SDK, thư viện và cấu hình dự án
    • Bản build phải có khả năng tái lập ở mọi nơi
  • Đang chuyển các dự án RP2040 sang Rust và Embassy

    • Rust khó làm quen nhưng rất đáng giá
  • Zephyr hỗ trợ Pi Pico 100%

    • Không rõ là họ chưa xem tài liệu hay sao
  • ThreadX là mã nguồn mở

  • Muốn thử dùng Hubris trong các dự án thực tế

    • Khổ sở với C nhiều hơn, nhưng nó giống Erlang/Elixir
  • Tôi nghĩ microPython là con đường dễ hơn

    • Cooperative multitasking dựa trên async/await hoạt động rất tốt
  • Tự viết một bộ hẹn giờ green thread đơn giản

    • Không hỗ trợ quản lý process thực sự, nhưng có thể thăm dò nhiều cảm biến khác nhau và xử lý tín hiệu
  • FreeRTOS về cơ bản là tiêu chuẩn công nghiệp

  • Rust RTIC hỗ trợ rp2040 và rất nhẹ