시리즈

[MCU강의④] MCU용 소프트웨어 개발 방법

한주엽

<편집자 주> 디지털데일리는 총 11회에 걸쳐 마이크로컨트롤러유닛(MCU)의 면면을 파헤치는 해설 기사를 게재합니다. MCU는 다양한 전자제품에 탑재되는 핵심 반도체 가운데 하나입니다. 글 싣는 순서는 다음과 같습니다. ①MCU란 무엇인가? ②MCU의 내부 구성 ③CPU란 무엇인가? ④MCU 소프트웨어 개발 ⑤CPU 실행방법 ⑥ALU의 구성 ⑦MCU용 언어 ⑧호스트 PC를 타겟 보드에 연결하는 툴 선택하기 ⑨범용 IO ⑩MCU 개발에 사용되는 소프트웨어 개요 ⑪MCU의 팹 공정.

MCU는 어떻게 프로그래밍 되었는가에 따라 기능도 달라진다. 프로그램 개발은 어떻게 하는지, 무엇이 필요한지 알아보자.

MCU 프로그램을 개발하는 방법은 두 가지다. 첫 번째는 프로그램 개발 환경과 개발된 프로그램이 동일한 네이티브 개발(native development)이다. 두 번째는 개발 및 실행 환경이 다른 크로스-플랫폼 개발이다. MCU 프로그래밍에서 보다 일반적으로 사용되는 환경은 바로 크로스-플랫폼이다. 크로스-플랫폼 개발 시에는 다양한 개발 툴을 활용할 수 있다.

MCU용 소프트웨어를 개발하려면 하드웨어 툴로 ▲프로그램 개발을 위한 PC(개발 환경) ▲개발된 프로그램을 실행하기 위한 MCU 탑재 보드(실행 환경) ▲PC와 보드를 연결하는 디버그 케이블 ▲인-서킷 에뮬레이터(in-circuit emulator, ICE)나 기타 다른 유형의 에뮬레이터 등이 필요하다. 소프트웨어 툴로는 ▲통합 개발 환경 ▲운영체제(OS) ▲라이브러리 ▲미들웨어가 정도가 있다. 적어도 PC, MCU 탑재 보드, 통합 개발 환경, 디버그 케이블이 있어야 MCU용 소프트웨어를 개발할 수 있다.

◆통합 개발 환경(Integrated Development Environment, IDE)

IDE란 소프트웨어 개발에 필요한 다양한 기능을 제공하는 PC용 애플리케이션 패키지를 의미한다. IDE는 일반적으로 에디터, 컴파일러, 어셈블러, 링커, 프로그래머, 그리고 디버거를 포함하고 있다. ‘잘’ 작동하는 프로그램을 만들려면 에디팅, 빌딩, 쓰기, 디버깅이 반복적으로 수행돼야 한다.

에디터는 프로그램 코드를 편집할 때 쓴다. 일반적으로는 C 같은 고급 프로그래밍 언어가 MCU 프로그래밍에 사용된다. 고급 프로그래밍 언어를 사용하면 사람이 이해하기 쉬운 방식으로 프로그램을 작성할 수 있다. 그러나 프로그램의 크기 또는 연산 시간에 제약이 있을 시에는 어셈블리 언어를 사용하기도 한다.

코드가 작성되면 컴파일러로 컴파일된다. 여기서 ‘컴파일’이란 사람이 작성한 고급 프로그래밍 언어를 MCU가 이해하는 목적 코드로 변환하는 작업을 의미한다. 어셈블리 언어로 쓰여진 코드는 어셈블러를 써서 목적 코드로 변환한다. 컴파일된 모든 목적 코드 파일은 하나로 엮여(링킹), 대상 MCU에 적합한 실행 파일로 생성된다. 실행 파일은 인텔 포맷(.hex), 모토로라 포맷(.s19), 또는 기타 다른 포맷 중 하나일 것이다. 실행 파일은 어떤 데이터들이 개별 주소로 쓰여져야 하는지에 관한 정보를 갖고 있다. 컴파일링, 어셈블링, 그리고 링킹 프로세스 전체를 설명하기 위해 ‘빌드(build)’나 ‘메이크(make)’와 같은 표현을 쓰기도 한다.

실행 파일은 프로그래머를 통해 MCU에 쓰여진다. 이렇게 하기 위해서 PC(개발 환경)는 디버그 케이블을 통해서 대상(실행 환경)에 연결되어야 한다. 쓰기 작업이 완료되면 그 프로그램을 실행한 뒤 개발자가 의도한 대로 작동하는 지 확인을 해야 한다. 이 때 사용되는 것이 디버거다. 디버거는 프로그램의 전체적인 실행 뿐만 아니라 코드를 한 줄씩 별도로 실행할 수 있으며(스테핑, stepping), 한 개의 기능을 실행해보고 멈추거나(스텝 오버, step over), 기능이 실행되는 중간에 코드 첫번째 줄에서 중단하거나(스텝 인투, step into), 기능을 실행하고 나서 중단하거나(스텝 아웃, step out), 중단점(브레이크포인트, breakpoint)에 도달할 때까지 코드를 계속 실행할 수도 있다.

디버거는 또한 메모리, 레지스터 등을 모니터링할 수 있다. 따라서 특정 코드가 실행될 때 변수 또는 레지스터가 어떻게 바뀌는지를 확인할 수 있다. 어떤 IDE는 프로그램 실행 동안 어떻게 변수가 바뀌는지를 모니터링 할 수 있다.

글 : 마사루 스가이(ST마이크로 MMS그룹)

한주엽
webmaster@ddaily.co.kr
기자의 전체기사 보기 기자의 전체기사 보기
디지털데일리가 직접 편집한 뉴스 채널