การเปลี่ยนไปใช้ RTOS: ประสบการณ์บน RP2040
Martijn Braam
- บทความของ Martijn Braam ผู้ทำงานด้านคอมพิวเตอร์
- กำลังทำโปรเจกต์ไมโครคอนโทรลเลอร์หลายตัว
- ใช้บอร์ด Raspberry Pi Pico เป็นหลัก และมีประสบการณ์การพัฒนาที่ดี
ภาพรวมโปรเจกต์
- สร้างฮาร์ดแวร์คอนโทรลเลอร์สำหรับควบคุมอุปกรณ์วิดีโอ
- ควบคุมกล้อง PTZ และอุปกรณ์สวิตช์วิดีโอ
- คอนโทรลเลอร์เดิมมีประสิทธิภาพไม่ดี จึงจำเป็นต้องสร้างแผงควบคุมใหม่
การออกแบบฮาร์ดแวร์
- มีปุ่ม RGB 9 ปุ่ม, จอยสติ๊กแบบอะนาล็อก และจอแสดงผล
- ใช้โมดูลสื่อสาร RS-485 และ Ethernet
- หลังจากแก้ไขฮาร์ดแวร์หลายครั้ง ก็ทำฟังก์ชันต่าง ๆ ได้ครบ
ซอฟต์แวร์ระยะแรก
- เริ่มจากโปรเจกต์ cmake ที่ใช้ pico-sdk
- จัดสรรคอร์ที่สองให้กับโมดูล Wiznet ส่วนคอร์แรกใช้จัดการ I/O ของส่วนติดต่อผู้ใช้
- ความซับซ้อนเพิ่มขึ้นจากการต้องจัดการหลายงานพร้อมกัน
FreeRTOS
- ใช้ FreeRTOS เพื่อประมวลผลงานหลายอย่างแบบขนาน
- สร้างงาน (Task) หลายตัว: ปุ่ม, LED, เครือข่าย, DHCP, mDNS, ATEM, VISCA
- ปัญหาของ FreeRTOS: ระบบค้างเมื่อใช้
printf และขาด hardware abstraction
Apache NuttX
- ให้สภาพแวดล้อมคล้ายระบบ Unix
- หลังตั้งค่าเริ่มต้นแล้วสามารถใช้งาน shell จริงได้
- ตั้งค่าฮาร์ดแวร์ได้ผ่านระบบ menuconfig/Kconfig
- ฟังก์ชันพื้นฐานไม่ทำงานเพราะปัญหาการตั้งค่า i2c bus
- ไม่จำเป็นต้องมีพาธของไฟล์ระบบและ shell
Zephyr
- มี Python utility สำหรับตั้งค่าโปรเจกต์
- ต้องดาวน์โหลด git repository ขนาด 5GB
- ต้องติดตั้ง Zephyr SDK แต่สามารถใช้ ARM toolchain เดิมได้
- การรองรับ Raspberry Pi Pico ยังไม่ดีนัก จึงลองใช้บอร์ดอื่น
- แม้จะแก้ build error และ warning แล้วก็ยังไม่ทำงาน
บทสรุป
- สร้างบางแอปพลิเคชันได้สำเร็จด้วย FreeRTOS
- จำเป็นต้องทำส่วนทดแทน
printf
- จะใช้ FreeRTOS ต่อไปเพื่อพยายามทำฟังก์ชันที่ต้องการให้ได้
สรุปโดย GN⁺
- บทความนี้พูดถึงกระบวนการเปลี่ยนไปใช้ RTOS ในโปรเจกต์ไมโครคอนโทรลเลอร์
- เปรียบเทียบข้อดีข้อเสียของ FreeRTOS, Apache NuttX และ Zephyr
- สรุปว่า FreeRTOS เป็นตัวเลือกที่เหมาะสมที่สุด
- ช่วยให้เข้าใจปัจจัยหลายอย่างที่ต้องพิจารณาเมื่อเลือก RTOS
- โปรเจกต์ที่มีฟังก์ชันใกล้เคียงกันก็มี FreeRTOS และ Zephyr
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผู้เขียนคนนี้ดูเหมือนจะคาดหวังให้ RTOS ทำงานเหมือนกับสภาพแวดล้อม Arduino
สรุป RTOS แบบสั้น ๆ:
การติดตั้ง toolchain ทั้งระบบตามแนวทาง UNIX แบบดั้งเดิมนั้นน่าปวดหัว
PlatformIO กำลังเดินไปในทิศทางที่ถูกต้อง
กำลังย้ายโปรเจกต์ RP2040 ไปใช้ Rust และ Embassy
Zephyr รองรับ Pi Pico ได้ 100%
ThreadX เป็นโอเพนซอร์ส
อยากลองใช้ Hubris ในโปรเจกต์จริง
คิดว่า microPython เป็นเส้นทางที่ง่ายกว่า
เขียนตัวจับเวลา green thread แบบง่าย ๆ ขึ้นมาเอง
FreeRTOS โดยพื้นฐานแล้วคือมาตรฐานอุตสาหกรรม
Rust RTIC รองรับ rp2040 และมีน้ำหนักเบามาก