# RP2040에서 RTOS로의 전환

> Clean Markdown view of GeekNews topic #15722. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15722](https://news.hada.io/topic?id=15722)
- GeekNews Markdown: [https://news.hada.io/topic/15722.md](https://news.hada.io/topic/15722.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-07T09:54:59+09:00
- Updated: 2024-07-07T09:54:59+09:00
- Original source: [blog.brixit.nl](https://blog.brixit.nl/moving-to-a-rtos-on-the-rp2040/)
- Points: 1
- Comments: 1

## Topic Body

#### 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가 있음

## Comments



### Comment 27032

- Author: neo
- Created: 2024-07-07T09:54:59+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40879541) 
- 이 저자는 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는 오픈 소스임
  - [ThreadX GitHub 링크](https://github.com/eclipse-threadx/threadx/)

- Hubris를 실제 프로젝트에서 사용해보고 싶음
  - C로 더 많은 고통을 겪지만, Erlang/Elixir와 유사함

- microPython이 더 쉬운 경로라고 생각함
  - async/await 기반 협력 멀티태스킹이 잘 작동함

- 간단한 그린 스레드 타이머를 롤링함
  - 실제 프로세스 관리를 지원하지 않지만, 다양한 센서를 인터로게이트하고 신호를 처리할 수 있음

- FreeRTOS는 기본적으로 산업 표준임

- Rust RTIC는 rp2040을 지원하며 매우 가벼움
  - [RTIC 링크](https://rtic.rs/2/book/en/)
