프로그램 동작이 알 수 없이 정상적이지 못한 경우, 많은 사용자들이 “혹시 프로젝트 옵션을 잘못 설정해서?”라는 우려를 하고 있습니다. 이번에는 IAR Embedded Workbench for ARM(이하 EWARM)에서 사용되는 프로젝트 옵션에 대해 살펴보도록 하겠습니다.

처음 IAR 툴을 사용하시는 분들을 위해 간략하게 EWARM을 사용하는 방법에 대해 알아 보겠습니다.

그림 1. IAR 임베디드 워크벤치 작업 순서

<그림 1>은 EWARM을 사용하는 일반적인 작업 순서를 도식화한 내용입니다. 우선 워크스페이스를 생성하고 프로젝트를 만듭니다. 이후 파일들을 프로젝트에 추가하며, 다음 작업으로는 프로젝트에 대한 옵션을 설정합니다.

그림 2. Workspace 생성
그림 3. 프로젝트 생성

옵션 설정 작업이 모두 완료되면 빌드를 하여 실행 이미지를 생성합니다. 오류 없이 빌드가 되면 ELF/DWARF형식의 실행 파일(.out)이 생성됩니다. Download and Debug 버튼을 클릭하여 C-SPY 디버깅 프로그램을 실행시켜 타겟 보드에 실행 코드를 다운로드하고 디버깅 작업을 진행합니다. 코드의 잘못된 부분을 수정하거나 추가하면서 개발 작업을 마무리합니다.

Workspace 생성은 방법은 File > New > Workspace를 선택하여 새로운 워크스페이스를 생성합니다. 하나의 워크스페이스에서 여러 개의 프로젝트를 관리하는 구조로 구성되어 있습니다.

프로젝트를 생성하기 위해서는 Project > Create New Project…를 선택하고 대화창의 지시에 따라 진행합니다. 이때 주의할 점은 파일들을 절대 패스(path)로 엑세스하게 되면 다른 폴더 구조에서 사용하려면 오류가 발생합니다.

그래서 상대 패스를 사용하게 되는데 주로 $PROJ_DIR$라는 환경 변수를 사용합니다. 이 환경 변수는 프로젝트 파일(.ewp)이 있는 위치의 폴더를 의미합니다. 또한 새로운 프로젝트 생성 시 마법사와 같은 순차적 설정 방식이 아니라 사용자 임의로 작업을 편리하게 선택하여 진행할 수 있습니다.

프로젝트를 생성하고 나면 소스 코드들의 파일을 추가해야 합니다. 또한 노란 색의 폴더 모양의 아이콘을 그룹이라고 합니다. 해당 소스 코드들을 그룹 별로 정리하면 효율적으로 관리할 수 있게 됩니다. 

그림 4. 파일 및 그룹 추가
그림 5. 파일 및 그룹이 추가된 예

워크스페이스 윈도우에서 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 호출합니다.
파일을 추가하는 경우 Add > Files를 선택하고 해당 소스 코드를 선택합니다. 그룹을 생성하려면 Add > Group을 선택하고 그룹명을 입력하면 새로운 그룹이 생성됩니다. 해당 그룹으로 소스 코드를 추가하려면 먼저 그룹을 선택하고 마우스 오른쪽 버튼을 클릭하여 파일을 추가하면 해당 그룹으로 파일이 추가 됩니다.

그림 6. 프로젝트 옵션

프로젝트 옵션은 다음 <그림 6> 과 같이 왼편의 카테고리(category) 항목을 보면 General option, Static Analysis, C/C++ Complier, Linke, Debugger등의 항목이 있습니다. Debugger 항목 이하로는 지원되는 디버그 프로브의 종류들입니다. 

그리고 오른쪽 상단을 보면 여러 탭(tab)들로 구성되어 있습니다. Target, Output, Library Configuration 등의 탭들을 확인할 수 있습니다. 각각의 탭마다 프로젝트에서 필요로하는 사항들을 설정하게 됩니다.

프로젝트 옵션에 대한 보다 자세한 내용은 IDE Project Management and Building Guide, Part 2. Reference information을 참조합시오.

General Options에 대한 설정 항목을 살펴보겠습니다. 먼저 Target 탭은 프로세서 설정과 Endian mode 그리고 Floating point settings로 이루어져 있습니다. 프로세서는 Core와 Device로 구분되어 있습니다.

디바이스가 지원되는 경우는 일반적으로 해당 디바이스를 개발하기 위한 헤더 파일, SFR(Special Function Register) 정보를 보기위한 ddf 또는 svd 파일과 같은 정보 파일이 필요합니다. 또한 내부 플래시 메모리에 실행 이미지를 다운로드하기 위해서는 플래시로더 프로그램이 필요합니다. 이러한 개발에 필요한 자료들이 지원됩니다.

그림 7. Little Endian

그러나 Core로 지원되는 경우는 앞에서 언급되었던 자료들이 지원되지 않아 사용자가 직접 준비를 해야 합니다. 저희 툴에서 지원되는 디바이스인지를 먼저 확인하시는 것이 좋습니다.
디바이스를 설정하는 방법은 Device를 선택하고 우측의 목록 선택 버튼을 클릭하고 해당 칩 제조사를 선택한 후 해당 디바이스를 선택하면 됩니다.

Endian mode, Floating point settings 등의 항목들은 선택한 디바이스에 따라 자동으로 메뉴가 활성화 또는 비활성화 됩니다. Cortex-M3/4 디바이스는 Little Endian이며, 가장 낮은 값이 가장 낮은 어드레스에 위치하는 구조입니다. 예를 들어,  0x12345678이라는 값이 0x20000100에 위치할 경우 0x78, 0x56, 0x34, 0x12의 순으로 가장 높은 값이 마지막 어드레스에 위치하게 됩니다.

이와 반대로 Big Endian의 경우는 반대의 순서로 큰 값부터 낮은 어드레스에 위치하게 됩니다.
Floating point settings 항목은 부동 소수점 연산자(FPU)에 대한 설정으로 Cortex-M4 디바이스에서 지원됩니다. FPU가 지원되는 디바이스는 빠른 연산을 위해 사용하는 것이 좋으며 사용하지 않을 경우 소프트웨어 라이브러리가 동작하여 처리 속도가 떨어지게 됩니다.

FPU 연산자를 사용하는 경우 초기화 코드가 필요한데 이를 실행하지 않고 연산 작업을 하는 경우 오류가 발생합니다. 옵션에서 FPU를 지정하면 자동으로 초기화 코드가 삽입됩니다. 단 시작 코드(startup code)에서 해당 루틴이 호출되지 않을 수 있으므로 이 점은 확인 하시는 것이 좋습니다.

그림 8. Output

Output 탭으로 이동하면 우선 Output file 항목이 보입니다. Executable과 Library 중 하나를 선택하는 옵션으로 실행 코드를 생성하려는 경우는(Executable) 벡터 테이블(vector table)과 초기화 작업 등과 같이 타겟 보드에서 실행하기 위한 코드들이 추가됩니다. Libray를 선택하면 .a 확장자를 가진 라이브러리 파일을 생성하게 됩니다.

.a파일은 프로젝트에 소스 코드처럼 추가하여 참조할 수 있는 헤더 파일만 있으면 사용자가 임의로 작성한 라이브러리를 사용할 수 있습니다. Output directory에서 Executable/library 항목은 실행 이미지 파일(.out, bin, 등) 또는 라이브러리 파일(.a)이 위치하는 폴더입니다. 일반적으로 프로젝트 파일이 있는 폴더에서 사용하는 빌드 설정(Build Configuration) 이름Exe 에 위치됩니다.  다음의 Obj는 오브젝트 파일들이, List 폴더는 List 파일들이 위치하는 폴더 입니다.

그림 9. Library Configuration

다음은 Library Configuration 탭으로 라이브러리 선택, 저수준 인터페이스(low-level interface), CMSIS 사용에 대해 지정할 수 있습니다.

라이브러리는 일반적으로 Normal과 Full 중 선택하여 사용하는데, FILE descriptor, multibyte 등을 사용하는 경우는 Full로 지정하여 사용해야 합니다. 그러나 그외의 경우는 Normal로 지정하여 보다 작은 라이브러리 코드를 사용해야 코드 크기를 줄일 수 있습니다.

Enable thread support in library를 선택하면 쓰레드를 지원하는 라이브러리를 자동으로 설정합니다. 쓰레드를 사용하지 않는 경우에는 선택을 해지합니다.

그림 10. Printf 형식

저수준 인터페이스에 대한 항목은 타겟 보드의 상태를 host PC에서 인식할 수 있는 방법을 말합니다. 일반적인 PC는 모니터, 키보드, 마우스와 같은 입출력 장치가 정해져 있습니다. 그러나 임베디드 시스템에서는 이러한 입출력 장치에 대한 지정이 없는 상태이며, 타겟 보드에서 실행되는 상황을 printf문, 오류 정보들의 메시지를 이용하여 확인하게 됩니다. Cortex-M 디바이스를 사용하는 경우 SWO포트를 통해 이러한 정보들을 전달 받을 수 있습니다. 

EWARM에서는 Terminal I/O 윈도우를 지원하여 printf문의 출력이 UART등으로 재설정(redirection) 되지 않은 경우에는 해당 메시지를 Terminal I/O 윈도우에서 확인 할 수 있습니다. Terminal I/O 윈도우는 C-SPY 디버깅 프로그램 실행 중에 사용할 수 있는 기능입니다.

CMSIS(Cortex Microcontroller Software Interface Standard)는 소프트웨어 이식성을 높여 코드의 재 사용률을 높이기 위한 ARM사에서 만든 규격안 입니다. EWARM 툴에는 CMSIS 지원 파일을 포함하고 있어 Use CMSIS를 선택하면 툴에 설치된 CMSIS 파일을 사용하게 됩니다.

그림 11. Library Options
그림 12. MISRA-C

만일 프로젝트 내에서 CMSIS 관련 파일이 포함되어 있는 경우(core_cm4.h, core_cm3.h 등)는 프로젝의 CMSIS 파일을 제거하시고 툴에 설치된 파일들을 사용하면 오류없이 사용 가능합니다. 이는 버전에 따른 호환성 오류가 발생하기 때문입니다.

DSP library는 CMSIS DSP 라이브러를 사용하도록 지정합니다. DSP를 사용하는 경우는 이 라이브러리를 사용해야 빠른 처리를 위한 코드로 실행이 됩니다.

Library Options 탭에는 printf 및 scan에 대한 지원 범위를 설정합니다. Floating point 또는 multibyte의 지원 여부를 선택하여 라이브러리를 설정합니다. 물론 지원되는 범위가 많을수록 라이브러리의 크기는 커질 수 밖에 없습니다.

Buffered terminal output는 printf문을 사용 시 Terminal I/O창에 느리게 표시되는 경우 이 항목을 선택하면 버퍼를 사용하여 보다 빠른 처리를 수행합니다. MISRA-C는 Motor Industry Software Reliability Association의 약자로 자동차 산업에서 사용하는 규격 안이지만, 현재는 여러 산업군에서도 사용되고 있습니다. EWARM 툴에서는 MISRA-C 2004, 1998 규격을 지원하고 있습니다. 

MISRA-C 체크 기능을 사용하기 위해서는 Enable MISRA-C 항목을 선택하고 MISRA-C버전을 선택하여 사용합니다. 그리고 필요한 항목들을 개별적으로 지정하여 사용할 수 있습니다. 


맺음말
EWARM에 대한 프로젝트 옵션 중 General Options에 대해 살펴 보았습니다. 지원되는 디바이스의 경우 디바이스를 선택만 하면 별도의 지정없이도 관련 파일들이 자동 연계 동작하는 구조로 사용이 편리합니다. 다음 호에는 C/C++ Compiler 옵션에 대해 살펴보도록 하겠습니다.

 

 

고성용 이사 / IAR 시스템즈
Sung-Yong.Ko@iar.com

회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지