GN⁺: RP2040에서 RTOS로의 전환
(blog.brixit.nl)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을 지원하며 매우 가벼움