행복한 하루

아두이노 나노(Arduino Nano)와 아두이노 나노 33 IoT에 FreeRTOS에서 올리기 본문

Embedded/Arduino

아두이노 나노(Arduino Nano)와 아두이노 나노 33 IoT에 FreeRTOS에서 올리기

변화의 물결 2021. 8. 23. 15:28

 

 

 

 

안녕하세요.

 

  Arduino FreeRTOS 버전이 몇 가지 있는 것 같은데 메인 소스 코어는 동일해 보이고 누가 주로 수정했는지에 따라 조금씩 차이가 있는 듯합니다. 테스트 버전은 아두이노 IDE에 "라이브러리 매니저"로 받을 수 있는 버전으로 해보았습니다.


1.  FreeRTOS 설치하기

1) Arduino Nano 버전

 - "툴-> 라이브러리 관리" 메뉴를 선택하고 FreeRTOS로 검색합니다. 최신 버전 라이브러리를 설치합니다.

 

2) Arduino Nano 33 IoT 버전

- "툴-> 라이브러리 관리" 메뉴를 선택하고 FreeRTOS로 검색합니다. 위와 다르게 SAMD21 버전을 설치해주어야 합니다. 아두이노 나노 33 IoT 경우 마이크로 컨트롤러가 다르다 보니 SAMD21 버전으로 설치해야 합니다.

 

 

3) Arduino Nano Every 버전

 - 아쉽게도 아두이노 나노 Every버전은 지원되지 않는다고 나옵니다. 그리고 향후에 가능하지 않을까 여운만 github에 글이 남겨져 있습니다.  마이크로 컨트롤러 Atmega4809 버전은 아직 적용되지 않은 것으로 보입니다.

 

 그러나 다른 외국분이 별도로 수정한 라이브러리가 있어 따라 해 보았습니다.  작동에 대한 보장은 할 수 없다고 나와 있습니다.  최신 소스 부분과 알려주는 소스 위치가 몇 곳 다르게 나와서 완벽하게 호환되는지 컴파일을 시키지 못했습니다.

https://tomalmy.com/freertos-on-arduino-nano-every/

 

2. 소스 테스트해보기

 1) Arduino Nano 버전

 - "툴" 메뉴에서 Arduino 나노 환경에 맞게 설정해줍니다.

 

 

 - "파일-> 예제-> FreeRTOS->AnalogRead_DigitalRead"를 선택합니다.

 - 자세히 영문 주석이 달린 아날로그 값과 디지털 값을 읽을 수 있는 소스를 확인할 수 있습니다.

 - 다운로드를 실행합니다. 컴파일 이상이 없다면 업로드 완료가 됩니다. 그리고 시리얼 모니터를 실행시키면 빠르게 아날로그 값과 디지털 값이 표시됩니다. 현재 아날로그 핀에 장비가 연결되어 있지 않다 보니 출렁이는 값으로 보입니다.

 

 

2) Arduino Nano 33 IoT 버전

 - "툴" 메뉴에서 Arduino 나노 환경에 맞게 설정해줍니다.

 

 - "파일-> 예제-> FreeRTOS->Basic_RTOS_Example"를 선택합니다.

 - 조금 양이 있는 코드가 나타나게 됩니다. 다운로드를 한 후 시리얼 모니터를 실행해서 결과를 보면 A, B Task과 스레드에 의해 어떻게 처리되고 있는지 모니터링할 수 있도록 자세한 값들이 나타납니다.

3. 기타 사항 

 - 기본적인 소스는 서로 간(Nano와 33 IoT) 사용 가능한 듯하고 1)에서 본 Nano 소스를 33 IoT 버전에서 테스트해보려면 헤더 파일을 교체해주면 됩니다. <Arduino_FreeRTOS.h>를 주석처리만 해주면 컴파일되고 33 IoT 버전에서도 동일하게 동작하는 것을 확인할 수 있습니다.

//#include <Arduino_FreeRTOS.h> // Arduino Nano 버전 (AVR 용)
#include <FreeRTOS_SAMD21.h> // Arduino Nano 33 Iot 버전 사용 시(SAMD21 용)

 

 - 코어가 하나다 보니 FreeRTOS에서는 딜레이 시간에 전체 멈추는 것이 아니라, 딜레이 시간을 잘 쪼개서 다른 동작(스레드)을 시키고 있습니다. 스레드 간 작동시키는 방법은 대략 2가지가 있는 듯했습니다. 세마포어(Semaphore)를 통해서 시퀀스에 맞게 돌아가는 방법과 큐(Queue)를 사용해서 스레드 처리가 조금 유동적이게 작동하게 하는 방법 등이 있는 것으로 생각됩니다.

https://arsviator.blogspot.com/2016/01/freertos-2.html 

 

 - 이번에는 FreeRTOS를 다운로드하고 실행하는 것에 대해 알아보았다면, 향후 소스를 좀 더 손보게 된다면 설명을 소스코드에 대해 알아보도록 하겠습니다. 조금 상세한 내용들을 아래 링크를 참고하시면 도움이 되리라 생각됩니다.

 

 

  

감사합니다.

 

 

 

 <참고 사이트> 

1. [아두이노강좌]아두이노에서 MultiTasking 수행하기-Using FreeRTOS

https://m.blog.naver.com/simjk98/221884052885

2. 아두이노에서 FreeRTOS 사용하기 - 1

https://arsviator.blogspot.com/2016/01/freertos-1.html

3. 아두이노에서 FreeRTOS 사용하기 – 2 (xQueueCreate 관련 내용)

https://arsviator.blogspot.com/2016/01/freertos-2.html

4. FreeRTOS라이브러리(멀티 스레드)

https://kocoafab.cc/tutorial/view/609

5. FreeRTOS on Arduino Nano Every

https://tomalmy.com/freertos-on-arduino-nano-every/

6. Arduino_FreeRTOS_Library

https://github.com/feilipu/Arduino_FreeRTOS_Library  

 

 

Comments