임베디드 개발은 크게 두 가지로 분류할 수 있다. 리눅스를 올린 시스템과 리눅스를 올리지 않고 Baremetal 상태로 개발하는 방법, 그리고 FreeRTOS를 올려서 개발하는 방법이 있다. 보통 리눅스를 올린 상태에서의 개발을 임베디드 개발이라고 하고, Baremetal 또는 FreeRTOS 까지를 펌웨어 개발이라고 하는 것 같다.(어디까지나 나의 주관적인 생각)
CPU(MCU or MPU or SoC 등)에 리눅스를 올려서 사용하는 경우는 컴파일러는 GCC를 사용한다. Barametal이나 FreeRTOS를 올려서 사용하는 경우는 총 3가지로 나뉠 수 있다. 먼저 상용 컴파일러인 Keil과 IAR이다.
Keil은 ARM의 자회사로 ARM을 적용한 MCU의 거의 전 모델을 다 지원한다. IAR도 Keil과 거의 유사한 수준으로 지원한다. 마지막으로 MCU 제조사에서 제공하는 컴파일 환경을 사용하는 경우다. 이 경우는 이클립스 환경에서 GCC를 사용하거나, 자체적으로 개발한 컴파일러를 사용한다.
그렇다면 어떤 컴파일러를 사용하는게 가장 개발하기에 가장 좋을까? 제조사에서 제공하는 컴파일러를 사용하는 것이 가장 속편 할 것이다. 해당 MCU를 사용해 개발하는 환경이 가장 최적화되어있기 때문이다. 하지만, 코드 최적화와. hex파일 사이즈, 개발 언어 버(C99, C90, C++11이니 하는 것들)를 고려한다면 당연 상용컴파일러가 압도적인 성능을 보인다.
특히 ARM을 사용하는 경우라면 Keil을 가장 먼저 고려해봐야한다. 이유는 앞에서도 언급한 바와 같이 Keil은 ARM에서 만든 컴파일러다. 당연히 ARM을 타깃으로 개발한다면 가장 최적화된. hex 파일을 얻을 수 있을 것이다. (난 Keil과 아무련 관련 없음.)
언제부터인지는 모르겠지만 Keil에서 학생, 일반인, 비상업적 용도에 한에서 Essential 버전과 동일한 기능을 사용할 수 있는 Community 버전을 내놓았다. 아쉽게도 IAR은 아직 이런 Community버전이 없는것 같다.
IAR 데모 버전에는 용량 제한이 있기 떄문에 큰 용량의 파일을 컴파일할 수 없다. 따라서 이번 포스팅에서는 STM MCU를 사용해서 Keil, STM32 CubeIDE에서 동일한 소스코드로 컴파일했을 경우 최종 결과물인. hex 파일의 용량을 비교해 볼 것이다.
어느 정도 코드사이즈가 있는것으로 확인을 해봐야 하기 때문에 STM32 CubeMX를 이용해 개발된 예제를 가지고 와서 비교를 해볼 것이다.
프로젝트 생성등의 과정은 생략한다. 필요하다면 따로 포스팅해놓은 글을 참고하길 바란다!
왼쪽이 Keil을 사용해 만들어낸. hex파일이고, 오른쪽이 CubeIDE를 사용해 만들어낸. hex파일이다. 13.8KB의 압도적인 차이를 확인할 수 있다.
- 끝 -
'Hardware&Firmware' 카테고리의 다른 글
현직자가 알려주는 펌웨어(임베디드) 개발 시작하기, 펌웨어 개발 방법, MCU에서 펌웨어 개발하기 (35) | 2023.02.26 |
---|