[STM32 참고] uVision 프로젝트를 Eclipse에서 편집

Keil MDK에는 프리(32kB까지)의 컴파일러나 RTOS, 미들웨어가 붙어 유익한 반면, IDE인 uVision은 Eclipse와 비교해 사용하기 어렵게 느낀다. 예를 들면 uVision에서는, Eclipse의 함수의 콜원을 찾는 기능이나, 변수 위에 커서를 올리면 값이 표시되는 코드 해석의 기능이 없어, 있었다고 해도 사용하기 어렵다. 이러한 기능은 수수함에 도움이 되기 때문에, 코딩은 Eclipse로 할 수 있도록(듯이) 하고 싶다.


uVision 프로젝트를 Eclipse에서 편집하려면



uVision은 STM32Cube가 생성하는 코드를 이용하기 때문에, 인클루드 패스의 설정이나 심볼 정의를 실시하고 있다. 그 설정을 Eclipse의 CDT 프로젝트에 반영하면 코드 해석을 사용할 수 있게 된다. 설정을 어떻게 해야 할지는, 아래와 같이 uVision의 프로젝트 설정을 열어 확인할 수 있다.


[C/C++] 탭의 빨간색 프레임 부분에는 포함 경로와 정의해야 할 기호가 쓰여 있습니다.


빨간색 프레임 부분을 텍스트 편집기 등으로 열면 다음과 같습니다. 인클루드 패스가 10(상대 4, 절대 6)으로, 심볼 정의가 2개인 것을 알 수 있다. 이것을 Eclipse CDT 프로젝트에 반영한다.

옵션 발췌
--c99 --gnu -c --cpu Cortex-M0 -g -O0 --apcs=interwork --split_sections

[1]コード生成したファイルのインクルードパス
-I./RTE/CMSIS
-I./RTE/Device/STM32F042F6Px
-I./RTE/Device/STM32F042F6Px/STCubeGenerated/Inc
-I./RTE/_Target_1

[2]KeilPackに含まれるヘッダのインクルードパス
-I<KeilPackインストール場所>/ARM/CMSIS/5.5.1/CMSIS/Core/Include
-I<KeilPackインストール場所>/ARM/CMSIS/5.5.1/CMSIS/Driver/Include
-I<KeilPackインストール場所>/ARM/CMSIS/5.5.1/CMSIS/RTOS2/Include
-I<KeilPackインストール場所>/ARM/CMSIS/5.5.1/CMSIS/RTOS2/RTX/Include
-I<KeilPackインストール場所>/Keil/STM32F0xx_DFP/2.0.0/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-I<KeilPackインストール場所>/Keil/STM32F0xx_DFP/2.0.0/Drivers/STM32F0xx_HAL_Driver/Inc

[3]シンボル定義
-D__UVISION_VERSION="527" -D_RTE_ -DSTM32F042x6

-o .\Objects\*.o --omf_browse .\Objects\*.crf --depend .\Objects\*.d```

Eclipse CDT 설정 만들기



상기의 값을 그대로 설정해도 좋지만, 좀 더 편리한 방법이 있다. Eclipse에서는 각종 설정에 환경 변수를 사용할 수 있게 되어 있다. 또한 설정을 저장할 수 있습니다. 이것들을 조합해, 환경 변수를 사용해 범용화한 설정을 보존해 두면, 프로젝트나 개발 환경에서 바뀌는 부분을 환경 변수로 주는 것만으로 끝나게 되므로, 설정의 수고를 생략할 수 있다.

설정 파일을 만들려면 먼저 다음과 같이 CDT 프로젝트에 대해 uVision 설정에 해당하는 포함 경로 기호 정의를 수행합니다. 여기서는 KEIL_PACKSTM32_MCU라는 변수를 사용합니다.


그리고, 설정 화면 하에 있는 [Export Settings...]로부터, 인클루드 패스와 심볼 정의를 XML 파일에 출력한다. XML 파일은 이하와 같은 기술에 있다. 새로운 프로젝트를 만들고 싶다면 이 설정 파일을 유용하면 된다.

settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<cdtprojectproperties>
<section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.IncludePaths">
<language name="C Source File">
<includepath>RTE/CMSIS</includepath>
<includepath>RTE/_Target_1</includepath>
<includepath>${KEIL_PACK}/ARM/CMSIS/5.5.1/CMSIS/Core/Include</includepath>
<includepath>${KEIL_PACK}/ARM/CMSIS/5.5.1/CMSIS/Driver/Include</includepath>
<includepath>${KEIL_PACK}/ARM/CMSIS/5.5.1/CMSIS/RTOS2/Include</includepath>
<includepath>${KEIL_PACK}/ARM/CMSIS/5.5.1/CMSIS/RTOS2/RTX/Include</includepath>
<includepath>${KEIL_PACK}/Keil/STM32F0xx_DFP/2.0.0/Drivers/CMSIS/Device/ST/STM32F0xx/Include</includepath>
<includepath>${KEIL_PACK}/Keil/STM32F0xx_DFP/2.0.0/Drivers/STM32F0xx_HAL_Driver/Inc</includepath>
<includepath>RTE/Device/${STM32_MCU}</includepath>
<includepath>RTE/Device/${STM32_MCU}/STCubeGenerated/Inc</includepath>

</language>
<language name="C++ Source File">

</language>
<language name="Object File">

</language>
<language name="Assembly Source File">

</language>
</section>


<section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.Macros">
<language name="C Source File">
<macro>
<name>__UVISION_VERSION</name><value>527</value>
</macro>
<macro>
<name>_RTE_</name><value/>
</macro>
<macro>
<name>${STM32_MCU}</name><value/>
</macro>

</language>
<language name="C++ Source File">

</language>
<language name="Object File">

</language>
<language name="Assembly Source File">

</language>
</section>
</cdtprojectproperties>

Eclipse CDT 설정 사용



작성한 설정 파일을 프로젝트로 임포트하고, 2개의 환경 변수에 구체적인 값을 설정하면, 필요한 인클루드 패스와 심볼 정의가 유효하게 된다. KEIL_PACK 에 Keil MDK 패키지를 설치한 경로와 STM32_MCU 에 마이크로 컴퓨터를 식별하기 위한 심볼을 설정한다. 이렇게하려면 CDT 프로젝트의 속성에서 C/C++ Build > Environment에서 환경 변수를 추가해야합니다.

만약 Eclipse 전체에서 값을 설정하고 싶다면 Window > Preferences > C/C++ Build > Environment 에서 설정하면 된다.


요약



uVision 프로젝트를 만들고 Eclipse로 코딩하려면 uVision 프로젝트와 마찬가지로 include path 설정과 심볼 정의를 할 필요가 있다. Eclipse에서 환경 변수를 사용하여 범용화된 설정 파일을 만들고, 프로젝트별로 읽어들여, 환경 변수의 값을 설정하는 것으로, 적은 수고로 필요한 인클루드 패스의 설정과 심볼의 정의를 실시할 수 있어, 쾌적하게 코딩할 수 있게 된다.

덧붙여 Keil MDK의 디버거는 GDB와는 다른 것 같기 때문에, 현재의 Ver5에서는 Eclipse CDT상에서는 움직일 수 없는 모양.

좋은 웹페이지 즐겨찾기