Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

임베디드 소프트웨어/Zephyr

Zephyr RTOS

방피터 2022. 7. 29. 16:12

난 임베디드 펌웨어를 작성할 때 RTOS를 선호해. 왜냐면.. 좋으니까!!! 예전에는 믿지 못하겠다며 안쓰는 사람들도 많았어. 물론 AC전압이 흐르고 모터를 돌리고 히터를 가열시키고 하는 임베디드 펌웨어 특성상 안정성이 최우선이겠지만.. 그런데 그건 -_-;; RTOS의 안정성에 문제가 있다기 보다... 내 손가락과 두뇌 안정성에 문제가 있지 않을까? ㅋㅋㅋㅋㅋ 그리고 나는 무엇보다 전체 코드를 while(1)에다가 폴링으로 때려 박는 방식이 너무 끔찍했어.

폴링으로 개발하면 에러가 두더지 게임

폴링으로 펌웨어를 개발을 하다보면 디버깅하거나 기능을 수정할 때 해당 기능과 관련이 없는 부분에서 새로운 오류가 발생하는 경우가 많고(특히 타이밍이 중요한 어플리케이션) memory overflow가 무서워서 malloc이나 free 사용을 못하기도 하지. 단순히 memory allocation의 문제가 아니라 이것들을 사용한 라이브러리가 매우 많은 점을 간과할 수가 없고 그렇다고 아무런 안전장치 없이 용감하게 사용하고 정신 승리해봐야 문제가 발생하는 걸 어떻게 막겠나? 또 무한 루프 안에서 함수 사이의 데이터 교환을 위해서 전역 변수를 남발하기도 하고.. 어휴 끔찍... 다음 사람이 유지보수하려면 더 끔찍...

막 코딩하고 정신 승리 해봐야 돌아오는 건 야근 뿐이다.

그런데 RTOS를 쓰면 이런 고민들이 싹 사라진다고 장담함! 무엇보다 기능별로 task를 만들어 돌릴 수 있어 기능별로 코드를 관리하기가 아주~~ 쉽고 기본적인 타이밍 기능들도 제공해 주기 때문에 딜레이같은거 구현하려고 하드웨어 타이머를 사용해야 하는 번잡스러움에서 해방될 수 있어. 또 mutex나 semaphore memory management나 intertask communication management같은 기능들도 제공이 되기 때문에 overflow나 전역변수 지옥에서 벗어날 수도 있지. 물론 약간의 진입장벽이 있어 ㅋㅋㅋ 공부를 해야 한다는 소리지. RTOS마다 기능이나 특징, 사용법 같은 게 약간씩 달라서 여러 가지 RTOS를 모두 마스터하기 보다는 주력 RTOS 하나를 선택하는 편이 좋이 좋겠지? ㅋㅋ 공부하기 싫잖아?(사실 난 공부 좋아함. 변태임.) 그리고 프로젝트 구조나 코드도 재사용하고 싶기도 하고.

 

여러 가지 RTOS들이 있는데 그 중에 유명한 건 앞으로 나와 니들이 조질 Zephyr RTOS, AWS에 인수된 FreeRTOS, MS Azure에 인수된 ThreadX 이 3가지야. 그런데 왜 Zephyr RTOS냐고? Zephyr RTOS가 github contribution 수가 가장 많고 게다가 contributor도 다양한 사람인 반면 freertos는 리차드 베리(freertos 만듬) 형님 혼자서 거의 다 하시고 Azure rtos는 github contribution 자체가 거의 없어. github contribution 횟수가 커뮤니티 활성도를 정확하게 나타낼 수는 없겠지만 그래도 많은 개발자들이 참여하고 있는 만큼 발전 가능성이 크지 않을까? "내 새끼"한테 정이 더 가지 않겠냐는 거지 ㅎㅎ

Zephyr github contribution
aws github contribution
azure rtos github contribution

위👆 그래프는 2021년에 쓴 다른 블로그에서 업어온거고 아래👇 는 2022년 7월29일 가져온거야 아직도 활발한 걸 확인할 수 있어.

2022년 7월 29일 현재

기능이나 특징은 나도 잘 몰라. 공부하면서 알아가는 거지 뭐 ㅋㅋ 사용할 보드는 W5500-EVB-Pico라는 보드고 RP2040가 메인 MCU로 사용되고 있어 그리고 W5500 있어서 ethernet 가능함. 이 보드에 Zephyr가 지원하는 CoAP(IoT 프로토콜 UDP) 올려보면 괜찮을 듯 해. MQTT(IoT 프로토콜 TCP) 만 해보고 CoAP는 서버가 없어서 못해봤거든.

W5500-EVB-Pico

새 보드에 Zephyr 프로젝트 설정하는 것부터 Device tree, 클라우드 연동까지 주욱주욱 해보자고. 안녕~

 

아 근데 Zephyr 발음!! "제피르" 인줄 알았는데 -_-;; "제퍼"임. 막 제피르 제피르 이러고 다녔는데;;; 뭐야~~ 위키피디아 실망임.

제퍼~
위키피디아 제피르????

 

반응형