개요 

NORDIC 사에서 배포하는 nRF5 SDK 의 폴더 구성은 사용자(개발자) 입장에서는 좋은 구조 아니다. 

본 글에서는 nRF5 SDK 기반으로 코드 구현 및 프로젝트 관리 용이한 프로젝트 작업 폴더 구축 방법 정리. 

 

참고 : 본 템플릿3과 이전 작업된 템플릿2 차이점

- 이전에 제작된 프로젝트 템플릿2의 구성은 1개의 프로젝트 폴더마다 nRF5 SDK 폴더를 모두 보유하고 있는 형식이었기에 프로젝트가 많이 만들어진 경우 중복된 파일들이 누적되게 된다.  이번 템플릿3은 모든 프로젝트에서 동일한 1개의 nRF5 SDK 활용하는 방식이므로 프로젝트수가 많아져도 단일 SDK 파일들을 공유하여 사용하므로 용량 증가 없이 컴팩트한 관리 가능. 

- 템플릿3 구조의 장점 : 프로젝트에서 nRF5 SDK 버전을 쉽게 변경하여 적용가능하므로 융통성 있는 대응 가능. 예 ; nRF5 SDK 중에 간혹 버그 있는 경우도 있고 특정 프로젝트에서는 SDK 에서 제공되는 소스를 수정하여 사용해야 하는 경우도 있다. 이런경우 수정된 SDK 폴더를 별도로 생성하여 프로젝트에서 해당 SDK 사용하도록 설정하기 편리한 구조이다. 

 

폴더셋팅. 프로젝트 작업용 메인폴더생성 및 nRF5 SDK 파일들 배치. 

메인 폴더명 : WORK_MULTI_NRF5SDK 

 

 

 

- 위와같은 폴더 구조를 만들어두고, 이 폴더 속에 신규 프로젝트 1개마다 신규 폴더 1개 만들게되며 모든 프로젝트에서는 공통의 nRF5 SDK 를 활용하게 된다. 위 그림의 붉은박스의 것이 nRF5 SDK 2개 버전 모두 배치된 상태. 본인이 사용하는 SDK 버전들을 배치한다. 이후 신규 버전이 배포된것을 활용하는 경우  해당 SDK 폴더를 배치한다.  

한편, nRF5 SDK 에는 프로젝트에서 활용하지 않는 example 폴더등은 필요없다. 불필요한 폴더들 삭제한다. 아래 동영상에 삭제하는 과정 및 SDK_15.2.0 폴더를 그대로 복사하여 이름에 MyModify 라고 수정된것을 추가하는 것도 보이고 있다. 제조사에서 배포한 SDK 에 간혹 버그가 있다든지 혹은 SDK의 일부 기능을 수정하는 경우 SDK 원본은 유지하고 이 폴더속의 것을 수정하여 활용하기 위하여 미리 만들어둔것임. 

 

 

프로젝트 작업 폴더 전체 Git 설정

- 깃사용하지 않는 경우 패스. 

- 요즘 코더에게 깃은 필수, 폴더 전체를 git 관리대상으로 하고, 아래 첨부된 .gitignore_gcc_keil  파일 다운로드 받아서 파일명을 .gitignore 로 수정해서 배치

gitignore 파일 다운로드   

.gitignore_gcc_keil
0.00MB

깃설정방법 전체 동영상. 깃 관리툴로는 소스트리 이용하고 있기에 소스트리에 깃설정된 폴더 관리등록함.  

 

 

활용 1. SDK 예제중 SES 프로젝트 blinky 재구성 

상기 nRF5 프로젝트 작업 폴더구성에 nRF5 SDK 에서 제공하는 SES 예제프로젝트 가져와서 재구성하는 방법.

- 동영상 중에서 Visual Studio 는 ses 프로젝트 파일인 .*.emProject 오픈하여 텍스트편집용도로 사용하는 것이며 Visual Studio 아닌 다른 편집기 이용해도됨. 

 

활용 2. SDK 예제중 KEIL 프로젝트 blinky 재구성

상기 nRF5 프로젝트 작업 폴더구성에 nRF5 SDK 에서 제공하는 KEIL 예제프로젝트 가져와서 재구성 하는 방법.

-SES  에서의 설정과 차이점 : SES 에서는 프로젝트에서 파일 경로 지정시 $() 과 같은 사용자 마크로 정의 가능하고 이를 경로 설정시 사용가능했기에 심플한 설정이 이뤄졌지만 KEIL 인 경우 프로젝트의 경로 설정시 사용자 마크로 정의되지 않는다. 따라서 경로지정시 마크로없이 실제 폴더 이름을 기록하고 있다. 이런설정방식에서는 해당 SDK를 다른 버전으로 사용하려는 경우에는 본 동영상에서 보이는 방식으로 경로명을 수정해야 한다. 

 

 

 

프로젝트 템플릿3 blinky_PCA10056

상기 활용1, 활용2의 작업과정 모두 완료된 프로젝트 폴더 압축한 파일 다운로드 하여 본인 PC에서 상기 폴더셋팅과 동일하게 한 폴더하위에 압축풀어 본인 프로젝트 작업의 시작점으로 사용가능. 

 

파일명 : nRF5SDK_template3_blinky_pca10056_igotit.zip 다운로드 클릭 

 

 

프로젝트 템플릿3 활용 예. 

프로젝트 템플릿3 다운로드 받고 압축풀고 프로젝트명 본인에 맞게 변경하여 활용과정 전체. 

 

 

- 위 동영상 마지막 부분에 KEIL 에서 플래시 다운로드 할때 에러는 keil 프로젝트 파일명을 수정하고 오픈한 경우 rebuild 하고 플래시 라이팅해서 발생한 오류임. 리빌드하고 기록하면 정상적으로 펌웨어 기록됨. 

- 다른 이유로 keil 에서의 j-link 오류 발생시 해결방법 상세보기 : https://igotit.tistory.com/2304

 

KEIL. 문제해결. J-link 버전 낮아서 MCU 지원 못하고 다운로드 오류생기고...

J-Link 문제증상 1 KEIL MDK 에서 J-Link 이용 하여 디버깅 혹은 프로그램 기록하려고 하는데 J-link 버전이 낮아 해당기기 지원하지 못한다는 메시지 나오는 경우 있다. 아래 화면 처럼 경고창 뜬다. 위 경고창..

igotit.tistory.com

 

SES 프로젝트에서  nRF5 SDK 버전 변경 방법. 

처음에 프로젝트 진행시에는 nRF5 SDK 버전 15.2.0 으로 진행하다가 새버전의 SDK가 배포되어 이를 적용해야 하는 경우 SES 의 Project Macro 에 설정한 경로만 변경하면 적용된다. 

아래 동영상 예에서는 nRF5 SDK 버전 15.2.0 에서 버전 15.3.0 으로 변경하는 사례를 보여준다. 

 

 

 

예제 ble_app_uart 프로젝트 폴더 재구성

 

아래예는 예제중 BLE NUS 기능 있는 프로젝트인 ble_app_uart 를 재구성하는 예

SES 에서 ble_app_uart 재구성 예 

 

 

 

KEIL 에서 ble_app_uart 재구성 예

 

 

 

예제 ble_app_template 프로젝트 폴더 재구성 

 

아래 예는 nRF5 SDK 제공예제중 그나마 지저분 하지 않은 ble_app_template 를 복사하여 프로젝트 폴더 재구성하는 예. 

 

SES 에서 ble_app_template 재구성 예

 

 

KEIL 에서 ble_app_template 재구성 예

 

 

 

ex_ble_app_template 기반 내프로젝트 만들기.

위와 같이 만들어진 ex_ble_app_template 폴더 내의 프로젝트는 수정하지 않고 신규프로젝트 시작시 이를 복사하여 폴더명 프로젝트 이름 변경하여 활용한다. 

아래영상에서는 ex_ble_app_template 를 복사하여 D1F137 이라는 이름의 프로젝트 로 수정하는 과정 전체. 

 

 

 

 

nRF5 SDK 버전 변경 적용예 

상황 : 기존 작업중이었던 프로젝트에서는 nRF5 SDK 버전 15.3.0 을 적용중에 있었는데 SDK 버전 16.0.0 이 배포(2019년 10월 21일)되고 있다. 신규 SDK 로 적용하는 전체 과정을 아래 영상에 보인다.  

 

 

 

 

결론

본 글에서의 프로젝트 폴더 재구성하면, SDK 에서 제공되는 어떤 예제 프로젝트이든지 쉽고 빠르게 재구성가능하며, 이후 유지관리 측면에서도 매우 편리한 작업 환경 구축된다.

 

 

다음단계

 

기초 학습 자료. 

- 본 프로젝트 폴더 재구성 이후 초기 학습용 자료들.  

 

GPIO 제어 레지스터 직접 접근 코딩하기 : https://igotit.tistory.com/2314

 

nRF52840. GPIO 코딩. SDK 없이 레지스터 직접 제어

개요. - nRF52840 의 GPIO 제어 코드를 nRF5 SDK 없이 레지스터 직접 접근하여 코딩하는 예 정리. - SDK 없이 레지스터 직접 제어 코드 작성해봐야 하는 이유 . 실활용목적에서는 SDK 기반하여 작성하겠지만 초보..

igotit.tistory.com

 

SDK 시간지연함수 구현 : https://igotit.tistory.com/2323

 

nRF52840. SDK기반 코딩. step by step 1. 시간지연함수

개요 이전에 작업했던 생코딩 GPIO 제어 프로젝트에 SDK 에서 제공하는 시간지연 함수 nrf_delay_ms() 호출하기 위한 설정과정 상세히 보인다. 사전준비 1. sdk없이 만든 GPIO 제어 프로젝트. https://igotit.tist..

igotit.tistory.com

 

SDK GPIOTE 구현 : https://igotit.tistory.com/2326

 

nRF52840. SDK기반 코딩. step by step 2. GPIOTE

개요 - 이전 작업했던 SDK 이후 코딩 이후 SDK 에서 제공되는 GPIOTE 활용하기 위한 설정 정리. 사전준비. 1. nRF52 SDK 기반 코딩 step by step 1. https://igotit.tistory.com/2323 - SDK 제공 시간지연 함수들..

igotit.tistory.com

 

타겟보드 관련 소스 재구성 .

본 글에서 마지막 과정에서 ble_app_template 기반 재구성한 프로젝트 코드 소스에는 대상보드가 nRF52840 DK 인 것에 해당하는 GPIO 초기화 및 스위치제어등의 코드들이 있다. 본인 개발보드가 nRF52840 DK 가 아니고 별도 자체 제작된 보드인 경우 에는 이들 코드들은 모두 필요없고 이를 본인 보드에 맞도록 재구성 처리한다. 

별도정리됨. -> https://igotit.tistory.com/2339

 

nRF52. 예제프로젝트 기반 내 프로젝트 정리하기.

개요 이전 작업한 아래 링크의 "ex_ble_app_template 기반 내프로젝트 만들기" 한 것은 타겟보드 nRF52840 DK 에만 적용되는 코드들이 있다. 나의 타겟보드에 맞게 재구성 하는 과정 정리. https://igotit.tistory..

igotit.tistory.com

 

 

 

 

 

본 글 포함된 상위 정리글

 

https://igotit.tistory.com/244 의 nRF5

 

STM32. nRF52. ESP32. EFM8. EFM32. PSoC 활용 정리.

STM32. nRF52. ESP32. EFM8. EFM32. PSoC 총정리 제조사 칩 주요특징 실리콘랩 8bit MCU EFM8 시리즈 32bit EFM32 시리즈 EFM8 싸다. STM STM32 . 최고 항상 만족. Cypress pSoC pSoC6 은 기대해볼만. NORDIC nRF5..

igotit.tistory.com


첫등록 : 2019년 10월 3일 

최종수정 : 2019년 10월 24일 

 

본 글 단축주소 : https://igotit.tistory.com/2308

 


 

Posted by 리치굿맨

댓글을 달아 주세요

  1. MK

    좋은 내용 잘 보고 있습니다. 질문이 있는데요,
    글 초반에 폴더 세팅하는 부분에서 SDK 폴더를 복사하여 불필요한 예제파일 등을 지우고 만든 _MyModify 폴더는 이후에는 사용되지 않던데요, SES 의 Options 에서 Project Macros 설정하는 부분에서 _MyModify 폴더를 지정하려고 만든거 맞나요? (동영상에서는 _MyModify 폴더가 아니라 원본 폴더를 지정하고 있던데...)

    2020.07.15 16:29 [ ADDR : EDIT/ DEL : REPLY ]
    • _MyModify 폴더는 SDK 원본을 수정해야 경우를 대비해 미리 만들어둔 것일뿐입니다. 실제 프로젝트에서는 _MyModify 폴더는 지정하지 않고 원본 폴더 지정하는것 맞습니다.

      제조사에서 배포된 nRF5 SDK 소스에 버그 있는 경우에 SDK 의 소스를 직접 수정하여 정상화 하 시킨 경우 작업중이던 프로젝트 설정에서 정상화 시킨 _MyModify 로 경로 변경할 목적입니다.

      제조사에서 배포된 SDK 에 버그가 있는 경우 외에는 SDK 소스에는 사용자 코드 기록하지 않고 배포된 원본을 그대로 유지 사용하는 것이 정상적입니다

      2020.07.19 20:57 신고 [ ADDR : EDIT/ DEL ]
  2. ThingNet

    안녕하세요?
    좋은 정보 감사드립니다.
    예제 프로그램 복사해 신규프로젝트 만들때 엄청 고생했는데
    좋은방법 알려주셔서 정말 감사합니다.

    그런데 한 가지 질문이 있어서요.

    처음 설정후 작업과정에서 SDK에서 추가로 파일들 가져오면 링크가
    macro path 기반이 아니라 상대패스 기반으로 되지 않나요?

    일반적으로는 문제가 없겠지만 혹시 SDK를 변경할 때
    macro path만 변경하면 추후에 추가된 파일들은 상대패스 기반이라 변경전
    SDK 것을 사용하게 되는것이 아닌가 해서요.

    변경 시점에서 상대패스를 다시 macro path로 바꾸어 주면 되기는 하겠지만
    좀 더 자동화스러운 방법은 없을까 해서 질문드려봅니다.

    2021.04.16 13:42 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 맞습니다. 초기 설정이후 SDK 에 있는 파일들을 프로젝트에 포함시키게 되면 상태패스 로 설정됩니다.

      이에,, 이후 SDK 버전 변경해야할 경우, 이후 추가된 파일들의 상대패스를 macro path 로 변경해주는 방법 뿐인것 같습니다.

      2021.04.16 15:48 신고 [ ADDR : EDIT/ DEL ]