전자기술

임베디드 소프트웨어 개발 방법

티가세 2007. 10. 22. 19:16

2.임베디드 소프트웨어 개발 방법

기계어, 어셈블리 언어, 고급언어

소프트웨어란, CPU를 동작시키기 위한 명령의 집합이다. 그림 3에서는 영어와 비슷한 알파벳과 숫자가 나열된 문자열이 표시되어 있지만, CPU가 실제로 이해하는 것은 ‘0’과 ‘1’을 조합한 수치밖에 없다. 이것을 기계어라고 부른다. 기계어 상태로는 사람이 이해할 없기 때문에, 그것을 사람이 이해할 있는 문자열로 치환, 소프트웨어를 개발한다. 이것을 어셈블리 언어라고 부른다.
어셈블리 언어는 가산이면 ADD, 감산이면 SUB 라고 하는 CPU의 하나하나의 동작을 기호로 옮겨놓은 것이다. 기계어보다는 사람이 이해하기 쉽기는 하지만, 처리 단위가 너무 세밀하여 대규모 프로그램을 작성하는 데는 적합하지 않다. 그래서, 보다 인간이 생각하는 처리 내용을 기술할 있는 언어를 생각해 내었다. 이것을 고급언어라고 부르며, 현재의 임베디드 소프트웨어에서는 일반적으로 C언어가 사용되고 있다(그림 4). 참고로, 그림 3에 나타낸 소프트웨어는 C언어로 작성된 리스트이다.

PC에서의 Windows 프로그래밍

여러분이 Windows 프로그램을 PC에서 개발하는 경우를 생각해 보기 바란다. 즉, PC상에서의 프로그래밍이 되지만, PC는 대부분의 경우, 디스플레이, 키보드, 마우스라고 하는 개발자에게 편리한 인터페이스가 있어서, 그들을 조작함으로써 프로그램을 작성해 나가게 된다. 또, Windows에서는 인터랙티브(interactive) 개발 환경이 제공되고 있으므로, 작성한 자리에서 디스플레이를 보면서 동작 확인이 가능하며, 게다가 작업 상태를 HDD에 보존해 두고, 나중에 작업을 재개할 수도 있다.
이와 같은 소프트웨어를 동작시키는 환경에서 프로그램 개발도 하는 것을「네이티브(native) 개발환경」이라고 한다. 또 스스로 자신용의 프로그램을 개발하게 되므로, 셀프 개발이라고도 부른다.

임베디드 기기의 소프트웨어 개발

임베디드 시스템의 경우, 반드시 디스플레이를 접속할 수 있는 RGB 커넥터나 문자를 자유자재로 입력하기 위한 키보드 접속 커넥터가 있는 것은 아니다. 그러한 커넥터를 갖고 있지 않은 경우도 많이 있다. 예를 들어, 앞서 언급한 전기밥솥에서는 상태 출력으로서는 LED 표시나, 고작 LCD로 자리의 숫자를 표시하는 정도밖에 수 없다. 물론 키보드도 접속할 없다(그림 5).

그러나, C언어가 그 대표적인 고급언어로 소프트웨어를 개발하려면, 영어와 같은 알파벳의 문자열이나 숫자를 많이 입력하지 않으면 안된다. 또, 정확하게 문자가 입력된 것을 화면 표시 등으로 확인하지 않으면 안된다.

크로스 개발 환경이란

그래서, 화면과 키보드 그리고 스토리지를 갖춘 PC에서 임베디드 기기용의 소프트웨어를 개발하고, 작성한 소프트웨어를 임베디드 기기에 전송하여 실행한다고 하는 수법이 채용되고 있다. 이와 같이, 프로그램을 개발하는 환경과 실행하는 환경이 다른 경우를 「크로스 개발 환경」이라 부른다(그림 6).

네이티브 개발 환경에서는「개발하고 있는 머신의 프로세서=어플리케이션이 실행되는 머신의 프로세서」로 되지만, 임베디드 시스템의 경우, 이 이퀄의 관계가 성립되지 않는다. 그 때문에 크로스라고 부르고 있는 것 같다.
그림 7에 대표적인 내장 크로스 개발 환경을 나타낸다. 개발하는 CPU 보드는 크로스 개발 환경에서는「타겟 시스템」이라 부른다. 그리고 개발을 위해 사용하는 머신(임베디드 시스템의 프로그램을 실제로 입력하는 머신)을「호스트」라고 부르는 것이 일반적이다.
호스트에는 Windows나 Linux 등을 주행시킨 PC를 이용한다. 타겟 시스템은 호스트 PC와 케이블 등으로 접속한다. 그리고 호스트에서 임베디드 시스템용의 프로그램을 작성하고, 타겟 시스템에 다운로드하여 동작을 확인해 나가게 된다.

소프트웨어 개발 도구

C언어로 대표되는 고급언어로 작성한 프로그램은, 컴파일러라고 불리는 도구(툴)에 의해 어셈블리 언어로 변환된다. 어셈블리 언어는 어셈블러하고 하는 툴에 의해 기계어로 변환된다. 또, 대규모 프로그램의 개발에서는 기계어로 변환된 서브루틴 등의 덩어리를 연결하여 하나의 프로그램을 작성한다. 이 기계어로 변환된 서브루틴의 덩어리를 오브젝트 파일이라고 부르며, 이것을 연결하여 최종적인 실행 형식 파일을 생성하는 툴을 링커라고 부른다. 이들 3종류가 소프트웨어 개발에서 중요한 툴이다.
네이티브 개발 환경에서나 크로스 개발 환경에서도 이들 소프트웨어 개발 도구의 기본적인 구성은 동일하다.

(1) 크로스 컴파일러
(2) 크로스 어셈블러
(3) 링커

크로스 개발용의 컴파일러나 어셈블러는 크로스 컴파일러나 크로스 어셈블러라고 부르지만, 링커의 경우는 크로스 링커라고 부르는 경우는 많지 않다.