티스토리 뷰

반응형

이전 글에서 nRF52810에서 nrf52832로 변경하였다고 이야기하였는데 그에 대한 상세한 이유에 대해서 오늘 이야기해볼까 합니다. 두 칩에 대한 상세한 스펙 비교는 아래 링크에서 확인하실 수 있습니다.

https://hero-space.tistory.com/73

 

목적에 따른 Bluetooth Chip 선택하기

IoT 시대라고 말하기에 어색할 만큼, 이제 모든 것이 연결되는게 당영한 세상입니다. 다만 그것을 어떻게 연결하고 연동하는지 관심을 갖다보면 그 사이사이에서 기술의 격차를 볼 수 있는데, 단

hero-space.tistory.com

CPU 자체로 만 보았을때는 부동소수점 연산이 되냐 안되냐의 정도의 차이지만 메모리로 보았을때는 롬에 해당하는 Flash가 192KB에서 최대 512KB로 3배의 차이가 나며 램의 경우도 24KB에서 64KB로 약3배 정도 차이가 있을 보여질 수 있습니다.  위 글에서 칩 선택시 자신이 개발할 내용이 어느정도 용량이 필요한지 판단해서 칩을 선택해야 가장 적합한 사이즈로 칩을 구비해서 생산비용도 절감할 수 있다고 말씀드렸지만 지속적으로 기능이 추가됨에 따라서 정확히 예측을 하기에는 쉽지 않습니다. 특히 스타트업의 경우에는 칩을 바꾸는 일은 생산과 개발 비용을 다시 부담해야하기에 중요한 결정일 수 밖에 없는데요. nRF52832와 nRF52810 두개 칩 모두 인기 모델의 칩이지만 많은 곳에서 원하다 보니 지금 수급이 원할하진 않습니다. (리드타임 최소 6개월 이상) 가격차이도 반도체 가격이 올라서 비슷하다면 nRF52832를 쓰는게 낫겠지만, 좀더 정말한 판단을 어떻게 했는지 상세히 설명드리도록 하겠습니다.

nRF52810 진짜 내가 사용할 수 있는 공간은 얼마야?

192KB의 롬 영역에서 bluetooth 기능을 위해 nRF SDK 중 가장 작은 S112를 세팅하면 100KB 그리고 Bootloader를 빼면 50KB 영역에 코딩을 할 수 있습니다. 임베디드 환경에서 50KB는 블루투스로 앱과 연결하여 간단한 시나리오 이를테면 센서를 감지하고, 이에 따른 동작을 하는 시나리오를 구성하는데 충분한 양입니다. 롬의 일부분은 저장공간으로 4K 정도 할당하면 이 또한 알차게 쓸 수 있는데요. 이번에 제가 기능 구현을 하면서 힘들었던 것이 멀티쓰레딩에 관한 것이었습니다. freeRTOS를 nRF칩에 올릴 수 잇지만 이 또한 최소 8K가 지원되고 부동소수점 계산도 들어가 있어서 nRF52810에 올리려면 여러가지 포팅 작업이 필요합니다. 근데 이것이 왜 필요한 것이가 생각해보면 제가 구현하는 시나리오에는 시퀀셜한 기능동작하는 사이에, 동시적으로 타이머에 따라 센서에 따라 동작하는 것이 있어 이런경우 ISR을 통해서 제어가 필요한데요. Interrupt Service Routine의 경우 기본적으로 스택이 작고 굉장히 작은 일을 수행하는게 일반적이어여 여기에 무리를 해서 제어코드를 많이 심어놓지 않게 됩니다. 따라서 제약이 걸리게 되는 것이지요. 그러다보니 RTOS없이 ISR을 사용하면서 이를 우회해서 결국 전역변수를 만들어서 접근하게 되고 코드가 점점 난잡해지는 상황이 발생하며, 타이밍에 따라 제대로 동작 안하는 현상도 일부 발생합니다. 간신히 동작이 되게 만들려면 우회하는 코드때문에 코드량이 늘어나서 롬영역이 후달리게 되면서 점점점 머리끝까지 부트로더 영역 직전까지 차지하게 되었고, 로그 한줄 넣는 것도 어렵게 됩니다. 물론 양산할때는 로그을 다 막고 나가기때문에 괜찮지만 개발하면서 디버깅시에는 로그를 풀 수 밖에 없는데 로그가 많으면 컴파일자체가 안되는 상황이 생깁니다. 말이 길었지만 결국 원할 개발을 할 수 없는 상황이 생김에 따라 전격적으로 nRF52832로 칩을 변경하기로 마음 먹었고, 512KB면 RTOS 부터, 필요한 패턴까지 적용하고 여러 Library를 포팅하면서 윤택한 코딩이 될 수 있으리라 확신했습니다. 물론 부트부터 다시 만들고, SDK와 내부 Application 코드도 설계부터 작성했지만 오히려 좀더 임베디드의 리소스 제약적인 부분에서 벗어날 수 있었고, 좀더 확장성 있는 설계 패턴을 적용할 수 있다고 판단하였습니다. 앞으로 임베디드 내부의 설계구조를 어떻게 잡았는지도 설명하는 글도 기술 하도록 하겠습니다.

  • 동시에 동작하는 시나리오가 있다.(타이머, 센서 등)
  • ISR 안에서 단순한 코드가 아닌 제어코드가 있다.
  • 기능이 확장될 가능성이 높다.

위 와같은 케이스가 있다면 nRF52810보다는 nRF52832를 사용하는 것이 좋습니다. 이 글을 쓰는 지금 이미 nRF52832로 개발을 끝낸 상황이지만 nRF52810을 하면서 처절한 코딩에서 벗어나서 윤택한 코딩을 하고 추가적인 기능도 더 넣을 수 있다는 생각에 만족스럽습니다. 또한 NRF에서 제공하는 예제 차제도 nRF52832가 더 많기 때문에 하나의 칩으로 다양한 시나리오를 만드는데 있어서 더 빠른 프로토 타이핑을 할 수 잇다고 생각됩니다.

RTOS 그거 꼭 써야 돼?

제가 RTOS(Realtime Operating System) 을 써야겠다고 했을때 업체 사장님께서는 왜 써야하는지 의문을 갖고 물어 본적이 있습니다. 저는 완전 로우 레벨의 개발자라기 보다는 미들웨어부터 어플리케이션 서버까지 다룰 수 있는 풀스택이기 때문에 디바이스 오리엔트한 관점이라면 굳이 불필요하다고 생각되어 질 수 있으나, 멀티스레딩을 위해선 반드시 필요하다고 여겨집니다. 대학교때는 MicroC-OS 를 사용해서 임베비드 보드(Arm) 기반으로 제어소프트웨어를 다루면서 쓰레딩의 개념을 하나씩 잡았고 컴퓨터싸이언스 학부 과정에서 운영체제 과정을 가장 즐겁게 들으면서 운영체제 자체가 주는 이점에 대해서 명확하게 개념이 잡혀 있던 상태기 때문에 동시에(실제로 동시가 아닌 시분할 이지만) 무언가를 동작시킨다면 반드시 필요한 것이며, 이는 나아가 멀티코어 기반에서 멀티쓰레딩시 어떻게 코딩할 것인가의 더 확장할 수 있습니다. 다만, 지금은 규모가 작은 칩인 싱글코어 기반으로 하기에 RTOS 중에 선택을 하게 되었는데, VxWorks를 비롯해 기술 지원을 하는 여러가지 OS들이 있지만 노르딕사 자체에서도 예제로 제공하는 freeRTOS를 통해서 진행하기로 하였습니다. 아무래도 이러한 예제코드가 있다는 것이 이 칩을 선택한 이유 중에 하나이기도 하구요. freeRTOS는 Amazon Greengrass에도 적용 되어 있는 무료지만 무료답지 않은 탄탄한 RTOS입니다. 다만 주의해야할 것은 태스크의 우선순위와, 태스크의 스케줄링의 개념은 반드시 알고 적용해야 전체 소프트웨어가 계획적으로 움직 일 수 있습니다.

https://www.freertos.org/

 

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

Market-leading MIT licensed open source real-time operating system (RTOS) for microcontrollers and microprocessors. Includes IoT and general purpose libraries.

www.freertos.org

비단 FreeRTOS LTS가 아니더라도, 큰 문제없이 사용할 수 있습니다. 

NRF SDK내의 FreeRTOS

저는 nRF_SDK_17.1.0 SDK 버전을 사용하고 있고, 안에 들어가면 external 폴더 내의 freertos라는 폴더를 볼 수 있습니다.

위 와같이 source 폴더와 license, config, portable 폴더로 구성되어 있고 상세한 설명을 위와 같은데, 샘플로 제공되는 만큼 별다른 설정 없이 구축해서 사용할 수 있습니다. 가장 간단한 프로그램을 작성해서 17.1.0 SDK와 함께 올리면 롬에 아래와 같이 적재됩니다.(아직 부트로더는 올리기 전) 그럼 오늘은 여기까지 하고 다음시간에 찾아오겠습니다.!

개발환경

- eclipse, gcc 빌드

https://hero-space.tistory.com/82

 

이클립스로 노르딕 블루투스 예제 실행하기1

오늘은 노르딕 SDK를 다운 받은 뒤, 포함되어 있는 예제 프로젝트를 자신의 컴퓨터 환경에 셋업하여 빌드해보는 과정을 진행해보도록 하겠습니다. 우선 SDK다운 받아서 압축을 풀고 안에 있는 폴

hero-space.tistory.com

https://hero-space.tistory.com/82

 

이클립스로 노르딕 블루투스 예제 실행하기1

오늘은 노르딕 SDK를 다운 받은 뒤, 포함되어 있는 예제 프로젝트를 자신의 컴퓨터 환경에 셋업하여 빌드해보는 과정을 진행해보도록 하겠습니다. 우선 SDK다운 받아서 압축을 풀고 안에 있는 폴

hero-space.tistory.com

 

반응형
댓글