1P by neo 5달전 | favorite | 댓글 1개

RTOS로의 전환: RP2040에서의 경험

Martijn Braam

  • 컴퓨터 관련 작업을 하는 Martijn Braam의 글
  • 여러 마이크로컨트롤러 프로젝트 진행 중
  • Raspberry Pi Pico 보드를 주로 사용, 개발 경험이 좋음

프로젝트 개요

  • 비디오 장비를 제어하는 하드웨어 컨트롤러 제작
  • PTZ 카메라와 비디오 스위칭 장비 제어
  • 기존 컨트롤러의 성능이 좋지 않아 새로운 패널 제작 필요

하드웨어 디자인

  • 9개의 RGB 버튼, 아날로그 조이스틱, 디스플레이 포함
  • RS-485와 이더넷 통신 모듈 사용
  • 여러 번의 하드웨어 수정 후 기능 구현 완료

초기 소프트웨어

  • pico-sdk를 사용한 cmake 프로젝트로 시작
  • 두 번째 코어를 Wiznet 모듈에 할당, 첫 번째 코어는 사용자 인터페이스 I/O 처리
  • 여러 작업을 동시에 처리해야 하는 복잡성 증가

FreeRTOS

  • FreeRTOS를 사용하여 여러 작업을 병렬로 처리
  • 여러 작업(Task) 생성: 버튼, LED, 네트워크, DHCP, mDNS, ATEM, VISCA
  • FreeRTOS의 문제점: printf 사용 시 시스템이 멈추는 현상, 하드웨어 추상화 부족

Apache NuttX

  • Unix 시스템과 유사한 환경 제공
  • 초기 설정 후 실제 셸(shell) 사용 가능
  • menuconfig/Kconfig 시스템을 통해 하드웨어 설정 가능
  • i2c 버스 설정 문제로 기본 기능 작동 안 함
  • 파일 시스템 경로와 셸이 필요하지 않음

Zephyr

  • 프로젝트 설정을 위한 파이썬 유틸리티 제공
  • 5GB의 git 저장소 다운로드 필요
  • Zephyr SDK 설치 요구, 기존 ARM 툴체인 사용 가능
  • Raspberry Pi Pico 지원 부족, 다른 보드 사용 시도
  • 빌드 오류와 경고 해결 후에도 작동하지 않음

결론

  • FreeRTOS를 사용하여 일부 애플리케이션 빌드 성공
  • printf 대체 구현 필요
  • FreeRTOS를 계속 사용하여 원하는 기능 구현 시도

GN⁺의 정리

  • 이 글은 마이크로컨트롤러 프로젝트에서 RTOS로 전환하는 과정을 다룸
  • FreeRTOS, Apache NuttX, Zephyr의 장단점을 비교
  • FreeRTOS가 가장 적합한 선택으로 결론
  • RTOS 선택 시 고려해야 할 다양한 요소를 이해하는 데 도움
  • 비슷한 기능을 가진 프로젝트로는 FreeRTOS와 Zephyr가 있음
Hacker News 의견
  • 이 저자는 RTOS를 Arduino 환경과 동일하게 기대하는 것 같음

    • 많은 Arduino가 mbed 또는 freertos를 사용하고 있음
    • Zephyr는 사용하기 쉬우며 Pi Pico도 지원함
  • RTOS 간단 정리:

    • FreeRTOS: 대부분의 SOC/장치에서 지원되지만, 드라이버는 각 SOC/장치별로 다름
    • Zephyr: 실제 하드웨어 추상화를 지원하며 대부분의 SOC를 지원함
    • NuttX: 지원이 좋지 않지만, 작동하면 매우 멋짐
  • 전통적인 UNIX 방식으로 시스템 전체에 툴체인을 설치하는 것은 고통스러움

    • Python을 도구로 사용하는 것은 버전 문제를 일으킴
    • 도구는 정적으로 링크된 바이너리여야 함
  • PlatformIO는 올바른 방향으로 가고 있음

    • 툴체인, SDK, 라이브러리, 프로젝트 구성을 관리해야 함
    • 빌드는 어디서나 재현 가능해야 함
  • RP2040 프로젝트를 Rust와 Embassy로 전환 중임

    • Rust는 익숙해지기 어렵지만 만족스러움
  • Zephyr는 Pi Pico를 100% 지원함

    • 문서를 확인하지 않았는지 의문임
  • ThreadX는 오픈 소스임

  • Hubris를 실제 프로젝트에서 사용해보고 싶음

    • C로 더 많은 고통을 겪지만, Erlang/Elixir와 유사함
  • microPython이 더 쉬운 경로라고 생각함

    • async/await 기반 협력 멀티태스킹이 잘 작동함
  • 간단한 그린 스레드 타이머를 롤링함

    • 실제 프로세스 관리를 지원하지 않지만, 다양한 센서를 인터로게이트하고 신호를 처리할 수 있음
  • FreeRTOS는 기본적으로 산업 표준임

  • Rust RTIC는 rp2040을 지원하며 매우 가벼움