본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

STM32CubeIDE에서 C++ 프로젝트 개발하기

by 베니스상인 2020. 4. 11.

STM32는 주로 C 기반을 개발하지만 좋은 라이브러리를 사용할 때는 클래스로 개발된 것들이 많아서 C++을 사용해야 할 때가 있다.

 

오늘은 확장성 있는 개발을 위해 STM32CubeIDE에서 C++ 프로젝트를 만드는 것을 다루어본다.

 

 

 

원래 STM32CubeIDE는 C/C++을 지원하고 있으니 클래스 사용이 가능하지만 C/C++로 프로젝트를 생성하더라도 컴파일러가 정상적으로 컴파일 되지 않는다.

 

 

아래와 같이 STM32 프로젝트로 생성하고, Target Langeuage를 C++로 생성한다.

 

 

 

 

C++로 프로젝트를 생성했지만 파일들은 *.c로 생성된다.

 

 

 

클래스를 만들고 빌드하면 아래와 같이 빌드 에러가 난다. 

 

 

../Core/Inc/ClassTest.h:11:1: error: unknown type name 'class'
 class ClassTest {
 ^~~~~
../Core/Inc/ClassTest.h:11:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
 class ClassTest {
                 ^
../Core/Src/main.c:48:1: error: unknown type name 'ClassTest'
 ClassTest myCLS;

 

에러 메시지를 보면 Class를 찾지 못한다고 나온다. 컴파일러가 C++ 코드를 인식하기 못해서 발생하는 문제이다. 

 

이 문제를 해결하기 위해서는 클래스를 사용한 main.c를 C++ 컴파일러가 인식할 수 있도록 변경해주어야 한다.

 

Project Explorer에서 main.c 를 rename 해서 main.C 또는 main.cpp로 변경해준다.

 

그리고 다시 빌드를 하면 에러 메시지가 없어지는 것을 확인할 수 있다.

 

C++ 컴파일러는 확장자가 *.cpp 또는 *.C일 때 컴파일이 가능하다.

 

한가지 문제점은 Device Configuration Tool을 이용하여 ioc 파일을 수정하고 코드를 업데이트하게 되면 기존의 main.C는 그대로 두고 새로운 main.c 파일을 만들어버린다. 

 

따라서 사용자는 새로운 main.c의 업데이트된 내용을 main.C로 변경해줘야하는 번거로움이 있다.

 

 

요즘 아두이노도 기본적으로 C++을 사용하는데 불편함이 없는데 이 부분은 STM32CubeIDE에서 향후에 개선되어야 할 부분이라 생각한다. 

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

728x90

댓글