CMSIS Configuration Wizard Embedded Studio 적용 및 편집

치삼이·2021년 7월 4일
1
post-thumbnail

💡 CMSIS Configuration Wizard Embedded Studio 적용 및 편집

Nordic SDK를 사용하다 보면 여러 주변장치에 관련된 매크로를 사용해야합니다. 예를 들면 NARFX_UART_ENABLE 같은 매크로를 1/0 으로 설정해 UART를 활성 혹은 비활성 시킵니다. 이러한 매크로는 sdk_config.h 에 정의되있으며, 이 헤더 파일을 열어 매크로를 하나하나 찾아 1/0 으로 설정하는 것은 매우 귀찮고 불편합니다.

이런 불편함을 해결하기위해 Nordic SDK에는 CMSIS Configuration Wizard 라는 프로그램을 이용해 이를 시각화시켜 사용자에게 편리한 환경을 제공해줍니다. 이번에는 Embedded Studio 에 CMSIS Configuration Wizard를 적용하고 사용하는법 그리고 간단한게 sdk_config.h 를 편집해 보겠습니다.

1. 환경설정

Nordic SDK 내부에 📁 external_tools/cmsisconfig/ CMSIS_Configuration_Wizard.jar 라는 파일이 있습니다. 이 파일이 CMSIS Configuration Wizard 프로그램이며 SDK 기본적으로 들어가 있습니다.

우선 CMSIS Configuration Wizard 사용을 위해 툴의 PATH를 Global Macros에 추가 합니다. Embedded Studio의 상단 Tools > ⚙️ options > Building > Global Macros 를 클릭합니다. 그 뒤 다음 아래 매크로를 추가합니다.

CMSIS_CONFIG_TOOL=$(SDK_PATH)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar

위의 매크로 설정에서 $(SDK_PATH)에는 여러분이 설정한 SDK의 PATH를 입력해주시면 됩니다.

이제 다시 Embeddede Studio 상단에서 File > Open Studio Folder... > Extenal Tools Configuration 을 클릭하면 편집창에 tools.xml 파일이 열립니다. 하단 </item> </if> 사이에 아래 코드를 복사 한뒤 붙여넣기를 해주시면 됩니다.

  <item name="Tool.CMSIS_Config_Wizard" wait="no">

    <menu>&amp;CMSIS Configuration Wizard</menu>

    <text>CMSIS Configuration Wizard</text>

    <tip>Open a configuration file in CMSIS Configuration Wizard</tip>

    <key>Ctrl+Y</key>

    <match>*config*.h</match>

    <message>CMSIS Config</message>

    <commands>

      java -jar &quot;$(CMSIS_CONFIG_TOOL)&quot; &quot;$(InputPath)&quot;

    </commands>

</item>

이제 Porject Explorer에서 sdk_config.h 파일을 우클릭 해보면 아래와 같은 항목이 추가 되있음을 확인 할 수 있습니다.

저는 아무리 클릭해도 실행이 되지 않네요... 에러가 생긴거 같습니다. 에러는 Output에서 확인 합니다.

내용을 확인해 보니 JAVA가 없어서 생긴 오류입니다.

2. JDK 설치

⚠️ 만약 CMSIS Configuration Wizard가 실행이 된다면 이부분은 스킵하셔도 됩니다.

CMSIS Configuration Wizard의 확장자가 .jar 인것으로 보아 JAVA로 짠 프로그램같습니다. 이제 jar 실행을 위해서 JRE(Java Runtime Environment) 혹은 JDK(Java Development Kit)를 다운로드 받겠습니다. 그 전에 JRE와 JDK의 차이를 간단하게 알아보고 다운받겠습니다.

  • JRE : Java 프로그램을 실행하기 위한 환경을 구축해 주는 도구로 Java 프로그램을 실행하기위해 꼭 필요하다

  • JDK : Java로 프로그램 개발하기 위해 꼭 필요한 도구들의 모음 JRE는 JDK안에 포함된다.

한마디로 JDK는 개발을 위해 JRE는 실행을 위해 필요한 도구들 입니다.

저는 JDK를 설치할 예정이며 JDK 중에서도 OpenJDK 1.8을 다운로드 합니다.

🔗OpenJDK 1.8

위 링크에 들어가 각자의 OS와 아키텍쳐에 맞게 다운로드 받으시면 됩니다. 저는 OS는 Windows10, 아키텍쳐는 x86 입니다. .msi 확장자로 된 설치 파일을 이용하면 자동으로 PATH 환경 변수에 추가가 됩니다.

JDK가 잘 설치되었는지 확인하기위해 명령어 프롬프트에서 Java -version 을 입력해 확인합니다.

이제 💻 PC를 재부팅하고 다시 Embedded Studio에서 CMSIS Configuration Wizard를 실행시켜 보겠습니다.

3. CMSIS Configuration Wizard의 Annotations

💡 Segger Embedded Studio에서 CMSIS Configuration Wizard를 실행하기 위해선 일단 파일의 이름이 sdk_config.h 이어야 합니다. 이러한 조건은 tools.xml 에서 명시된 사항이며, CMSIS Configuration Wizard의 규칙이 아닙니다.

sdk_config.h 를 열어 내용을 확인하신 분들이라면 눈치 채셨을수도 있겠지만 CMSIS Configuration Wizard는 이 헤더 파일 내부의 Annotations(주석)의 Item과 Modifier를 확인하여 GUI의 형태로 사용자에게 인터페이스를 제공합니다.


//==========================================================
...
#ifndef NRFX_UARTE_ENABLED
#define NRFX_UARTE_ENABLED 0
#endif
// <o> NRFX_UARTE0_ENABLED - Enable UARTE0 instance 
#ifndef NRFX_UARTE0_ENABLED
#define NRFX_UARTE0_ENABLED 0
#endif

// <o> NRFX_UARTE_DEFAULT_CONFIG_HWFC  - Hardware Flow Control
 
// <0=> Disabled 
// <1=> Enabled 

#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC
#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0
#endif

// <o> NRFX_UARTE_DEFAULT_CONFIG_PARITY  - Parity
 
// <0=> Excluded 
// <14=> Included 

#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY
#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0
#endif
...

CMSIS Configuration Wizard Annotation의 규칙을 알아보겠습니다.

  • 시작의 구문은 // <<< Use Configuration Wizard in Context Menu >>> 입니다.
  • 끝의 구문은 // <<< end of configuration section >>> 입니다.
  • Annotations은 코드의 주석으로 작성되며 이중 슬래쉬(//) 로 시작해야 합니다/
  • 항목에 설명 텍스트를 추가할 수 있습니다.
  • 텍스트 항목을 제외한 공백문자는 무시 됩니다.
  • 주석 항목 Annotations Item을 묶는 것 외에 CMSIS Configuration Wizard 내에서 < or > 를 사용하는 것은 안됩니다.

이제 CMSIS Configuration Wizard에서 사용하는 Item들을 살펴보겠습니다.

  • <h>: Heading 입니다. Header를 만들어 여러 Item 혹은 Modifier의 그룹을 생성할 수 있습니다.
  • <e>: Enable Heading 입니다. Header와 기능은 같지만 체크박스를 만들어 줍니다. (⚠️ 체크박스를 해제 해도 그룹 내의 값은 활성화 가능합니다.)
  • <e.i>: 특정 비트(i)를 반전시킵니다. 아래 코드를 sdk_config.h 의 CMSIS Configuration Wizard 섹션에 넣고 실행시켜 봅시다.
// <e.4>Serial Number
// <i>Enable Serial Number String.
// <i>If disabled, Serial Number String will not be assigned to USB Device.
#define USBD0_STR_DESC_SER_EN           1

그럼 17이 나오게 됨을 확인할 수 있습니다. 여기서 i는 4이고 1은 0000 0001 이며 4번째 비트를 반전시키면 0001 0001(17) 입니다.

  • <n>: 일반 플레인 텍스트 입니다.
  • <i>: 툴팁 입니다. 호버링 기능으로 마우스를 가져대면 텍스트가 나옵니다.
  • <q>: 체크 박스입니다. Enable을 시키면 매크로가 1로 치환됩니다.
  • <o>: 숫자가 엔트리가 가능한 Item 입니다.

이밖에 더 많은 Item과 여기서 다루지 않았던 Modifier은 공식 홈페이지를 참고하시면 됩니다.

🔗CMSIS Configuration Wizard Annotation

이제 배웠던 내용을 잠깐만 사용하도록 하겠습니다. 📁 $(SDK_PATH)/examples/peripheral/uart/pca10040/blank/config 에 있는 sdk_config.h 내용을 CMSIS Configuration Wizard로 열어 보도록 하겠습니다. 그 뒤 nRF_Drivers > NRFX_UART_ENABLED > NRFX_UARTE0_ENABLED 항목을 유심히 살펴보면 Enable/Disable을 결정하는 Annotations이 체크박스가 아닌 숫자 엔트리 값으로 설정되어 있습니다. 물론 개발자가 의도한 것 일수도 있지만 저는 보기에 불편하니 바꿔야 겠죠?

// <e> NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver
//==========================================================
#ifndef NRFX_UARTE_ENABLED
#define NRFX_UARTE_ENABLED 0
#endif
// <o> NRFX_UARTE0_ENABLED - Enable UARTE0 instance 
#ifndef NRFX_UARTE0_ENABLED
#define NRFX_UARTE0_ENABLED 0
#endif

위의 Annotations 중에 // <o> NRFX_UARTE0_ENABLED - Enable UARTE0 instance Item <o><q> 로 바꾸어 체크박스의 형태로 바꾸겠습니다.

Enable/Disable을 결정하는건... 숫자 엔트리보다 체크박스가 더 좋아보입니다.

0개의 댓글