[임베디드] MCU용 소프트웨어 개발
MCU용 소프트웨어 개발 방법은 보통 두 가지로 나뉜다. 프로그램 개발 환경과 개발 프로그램이 실행되는 환경이 동일한 네이티브 개발(native development)과, 개발 환경과 실행 환경이 다른 크로스 플랫폼 개발이다. 이 중에서도 일반적으로 크로스 플랫폼 개발이 주로 사용된다. 이러한 크로스 플랫폼 개발 시 사용하는 툴은 다양하다.
크로스 플랫폼
필요한 항목(일반적으로)은 아래와 같다.
- 프로그램 개발을 위한 PC 환경 (개발 환경)
- 개발된 프로그램을 실행하기 위핸 MCU 탑재 보드 (실행 환경)
- PC와 보드를 연결하는 디버그 케이블
- 인 서킷 에뮬레이터(in-circuit emulator, ICE) 등
- IDE(통합 개발 환경)
- 운영체제
- 라이브러리
- 미들웨어
이중에서도 디버그 케이블에 대해 좀 더 자세히 알아보겠다.
디버그 케이블
정의
개발자는 IDE를 통해 소프트웨어를 구축하고 프로그래밍하여 실행 파일을 생성한다. 개발자가 C언어 등으로 작성한 코드는 컴파일, 링킹 과정을 거쳐 MCU에서 실행 가능한 실행 파일로 만들어진다. 실행 파일에는 어떤 데이터들이 개별 주소로 쓰여져야 하는지에 대한 정보를 가지고 있다.
만들어진 실행 파일을 MCU에 쓰기 위해서는, 개발 환경과 실행 환경을 연결해주기 위해 디버그 케이블이 필요하다. 쓰기 작업이 완료되면 그 프로그램을 실행한 뒤 개발자가 의도한 대로 작동하는지 확인해야 하는데, 이러한 디버깅 작업에는 다음과 같은 방법이 있다.
- 스테핑(stepping): 코드를 한 줄씩 별도로 실행
- 스텝 아웃(step out): 기능을 실행하고나서 중단
- 중단점(breakpoint): 특정 포인트에 도달할 때까지 코드를 실행
디버거는 메모리와 레지스터 등을 모니터링할 수 있기 때문에, 특정 코드가 실행될 때 변수 또는 레지스터가 어떻게 바뀌는지를 확인할 수 있다.
ICE(In Circuit Emulator)
타깃 회로에 있는 마이크로프로세서를 대체하는 에뮬레이터. 회로에서 마이크로프로세서를 제거하고 그 자리에 해당 에뮬레이터를 붙여서 디버깅을 실행할 수 있다. 즉, 타깃 회로에 있는 다른 칩들의 관점에서 보면 에뮬리이터는 마이크로프로세서로 보인다. 그러나 해당 애뮬레이터는 일반 PC의 소프트웨어 디버거와 비슷한 디버깅 능력을 제공하여 메모리 값과 레지스터 값 등을 조사할 수 있다.
대부분의 에뮬레이터가 에뮬레이트 된 마이크로프로세서가 타깃 시스템의 메모리 대신 사용하도록 하는 하나 이상의 메모리 블록을 내부에 가지고 있다. → 이것을 “오버레이 메모리”라고 한다. 주소 범위를 설정해서 에뮬레이트 된 마이크로프로세서가 특정 범위의 주소에서 데이터를 읽고 쓸 때, 에뮬레이터가 타깃의 메모리 대신 오버레이 메모리를 사용할 수 있도록 한다. 이를통해 코드를 오버레이 메모리에 올라가도록 하여, 디버깅을 위해 소프트웨어를 타깃에 다운로드 하는 쉬운 방법을 제공한다.
Leave a comment