TECHNICAL FEATURE

IAR EWARM 기본편: 구조 및 메뉴 구성

IAR Embedded Workbench는 어셈블러, C 그리고 C++을 이용하여 임베디드 애플리케이션을 빌드하고 디버깅 하는 개발 툴 세트이며, IDE Tools, Build Tools, 그리고 IAR C-SPY Debugger 3 부분으로 구성되어 있다. 앞으로 다루는 내용은 EWARM 제품을 기초로 설명 하도록 한다.

글 고성용 이사(Sung-Yong.Ko@iar.com)/ IAR Systems Korea

 

연재 차례

1. IAR EWARM 기본편: 구조 및 메뉴 구성
2. IAR EWARM 고급편: 소스코드에서 실행코드까지
3. IAR EWARM C-SPY : 버그를 잡자. 디버깅 툴 C-SPY  

 


많은 개발자들이 사용하는 Eclipse IDE에 대한 플러그 인을 제공하고 있어 보다 편리한 IDE 환경을 제공 한다. 또한, 사용자가 손에 익은 외부의 편집기를 기본 편집기로 지정하여 사용 할 수 도 있으며 소스 코드 관리 시스템(Source Code Control System)과 연동 기능이 있어 여러 팀원들 간의 공동 작업에서 소스 코드를 효율적으로 관리 할 수 있다. 단, 소스 코드 관리 시스템이 설치 되어 있어야만 사용 할 수 있다.
 






또한 IAR visualSTATE 라는 상태 머신(State Machine) 툴 제품도 제공하고 있다. 이 제품은 도식화된 방식으로 모델링을 생성, 검증 할 수 있으며, 이를 토대로 소스 코드를 생성하는 기능이 있어, 제품 개발에 상당한 도움이 될 수 있다.





최근에는 ARM에서 만든 Cortex 코어를 이용하여 높은 성능, 저렴한 가격 그리고 충분한 메모리를 가진 MCU 제품들을 공급하고 있다. 고성능의 이러한 디바이스들은 많은 기능 즉, 많은 양의 프로그램을 요구하게 될 것이다. 이러한 맥락에서 국내에서도 RTOS/미들웨어(Middleware) 등의 사용이 점차 확대될 전망이며, 이러한 RTOS에 대한 디버깅을 위해 RTOS 플러그 인을 제공하여 RTOS에 대한 각종 정보를 파악/분석 할 수 있는 기능과 각종 디버거 프로브들이 지원 되므로 개발 시에 보다 효율적인 디버깅 환경을 제공하고 있다.







 

IAR 임베디드 워크벤치 프로그램을 구동하면 위와 같은 화면이 나온다. 윈도우 시작 버튼을 누른 후 모든 프로그램에서 IAR Systems 항목 중 IAR Embedded Workbench for ARM을 선택한다. 그리고 IAR Embedded Workbench을 선택하면 프로그램이 실행된다. 앞으로는 간략히 다음과 같이 표시하도록 한다.

모든 프로그램>IAR Systems>IAR Embedded Work bench for ARM>IAR Embedded Workbench


또한 확장자가 eww인 워크스페이스 파일을 더블 클릭하면 IAR EW 프로그램과 연계하여 실행되며, IDE가 시작한다. 여러 버전이 설치 된 경우 최근 설치된 버전이 구동 될 것이다. 종료 시는 메뉴에서 File>Exit를 선택하고 저장 할 변경 사항이 있는 경우 저장 여부를 확인한다. 워크스페이스 윈도우는 전체 프로젝트를 관리하는 창으로 소스 코드, 각종 설정 파일들, 오브젝트 파일 등의 내용들을 개별적 또는 그룹화 하여 관리 한다.


편집 윈도우는 소스 코드를 편집하는 에디터로 일반 텍스트, HTML Text 파일도 편집이 가능하고 메시지 윈도우는 빌드에 대한 정보, 각종 상황에 대한 정보 등의 내용을 표시한다. 화면에 각각의 윈도우들은 사용자가 임의로 구성 할 수 있으며 고정된 위치에 윈도우를 설정 할 수 도 있고(Docked Window), 경우에 따라 플로팅 윈도우(Floating Window)를 사용 할 수 도 있다. 또한 윈도우의 배치, 크기 등 임의 조절이 가능하며 개인 취향에 맞게 화면을 재 구성 할 수 있어 편리한 개발 환경을 제공한다.

1. 메뉴 바(Menu Bar)
메인 메뉴로 각종 IDE 환경을 사용하는데 필요한 명령들을 제공한다. 또한, 각 윈도우마다 기능상 다른 메뉴가 필요 할 수 있다. 이를 위해 마우스 오른쪽 버튼을 눌러 호출하는 문맥 메뉴(Context Menu)를 제공하여 해당 윈도우 및 화면의 각 부분마다 특정 기능 수행을 쉽게 하도록 도와준다.









2. 툴바(Toolbar)
툴바는 View 메뉴에서 활성화할 수 있으며, IDE 메뉴상의 가장 많이 사용되는 명령어 버튼을 제공해 편리성을 높였으며, 빠른 검색을 위해 텍스트 입력 창이 제공 된다. 버튼의 설명을 보고 싶으면 마우스 포인트를 그 버튼에 위치시키면 된다. [그림 3]은 툴바의 버튼들에 대한 명칭이며, 메뉴 명령과 상응한다.





● C-SPY를 시작할 때 Download and Debug 버튼이 Make and Debug 버튼으로 변경된다.
● Debug without Downloading 버튼은 Restart Debugger 버튼으로 변경된다.

3. 상태 바(Status Bar)
상태 바는 윈도우 하단부에 위치하며, 빌드 시 에러, 경고에 대한 숫자, 에디터 윈도우에서 삽입 되는 문자의 위치, 대문자, 숫자키 등의 정보를 표시한다. 상태 바는 View 메뉴에서 활성화시킬 수 있다.

4. 워크스페이스 윈도우(Workspace Window)





개발 범위가 큰 경우에는 수백 개의 파일이 작성 되기도 한다.  이러한 경우 여러 개발자들이 효율적으로 파일들을 관리 할 수 있는 구조적이며, 체계적인 방안이 필요하다. IDE 환경에서 모든 프로젝트 모듈에 대한 유지 관리가 편리 하도록 많은 기능을 제공한다. 이제 간단히 워크스페이스(Workspace)를 생성 하고 하나 또는 여러 개의 프로젝트들을 포함시켜 관리 하면 된다.








[그림 5]는 워크스페이스 윈도우 화면이다. 화면 구성과 간략한 설명을 보여 준다.
상단의 설정 드롭다운 메뉴(Confi guration Drop-down Menu)는 특정 프로젝트의 빌드에 대한 설정 종류를 선택 할 수 있다. 예를 들면, 하나의 프로젝트를 Flash에서 동작 하는 경우와 Ram에서 동작하는 경우에 서로 다른 설정을 지정하고 이를 간단히 선택하여 사용한다.

워크스페이스 창에서 마우스 오른쪽 버튼을 눌러 문맥 메뉴를 호출 할 수 있다.
프로젝트가 선택된 경우, 파일이 선택 된 경우에 따라 해당 메뉴가 활성화 또는 비활성화 된다.



5. 소스 브라우저 윈도우(Source Browser Window)
 소스 브라우저 윈도우는 활성화된 빌드 설정에서 정의된 모든 심볼에 대해 알파벳 순으로 계층적 구조 형태로 내용을 표시한다. 이는 소스 파일과 설정에서 포함된 파일의 심볼에 대한 정보가 사용됨을 의미한다. 라이브러리에서 링크된 정보는 유효하지 않다. 소스 브라우저 윈도우는 View 메뉴에서 활성화 할 수 있다.






6. 편집 윈도우(Editor Window)
상단부의 탭을 이용하여 파일을 선택할 수 있으며, 우측 상단의 역삼각형 모양의 버튼을 누르면 열려 있는 전체 파일 목록이 드롭다운 메뉴 형식으로 표시된다.

윈도우 탭에는 열린 소스 파일의 이름이 표시되고, 소스 파일에 대한 변경이 있을 경우 파일이름 우측에 * 가 표시 된다. 윈도우 탭에서 마우스 오른쪽 버튼을 눌러 문맥 메뉴를 이용하면 파일이 있는 폴더를 탐색기로 열 수 있으며, 파일의 정보도 쉽게 알 수 있다.




Tools>Options>Editor 메뉴에서 Show line number 항목을 체크하면 좌측에 라인 번호가 표시 되고, DLIB 라이브러리 함수에 대해 해당 함수에서 F1키를 누르면 해당 함수에 대한 도움말이 표시 된다.

Window 메뉴에는 편집 창을 분할하여 사용 할 수 있는 명령이 있어 하나의 파일을 여러 화면으로 분할 하여 볼 수도 있으며, 편집 창을 가로나 세로로 분할하여 서로 다른 파일들을 편집 할 수 있다. 이러한 기능들은 사용자가 원하는 방식대로 편집 창을 구성하여 작업의 효율성을 높여 준다.

Tools>Options>Editor>Syntax highlighting 항목을 활성화 하면 C/C++ 키워드, 주석 등의 구문에 대한 색상을 자동으로 표시한다. 폰트의 모양, 색상들의 내용도 임으로 설정 할 수 있다.

괄호 맞추기 기능은 괄호, 중괄호 등의 시작과 끝에 대한 범위를 명확히 하기 위해 제공되는 기능이다. 시작이나 마지막 부분의 괄호에 커서를 위치하면 대응하는 곳의 위치를 표시하며, Edit 메뉴에서 Match Brackets(CTRL+B)를 선택하면 해당 블록의 부분에 대해 명확히 구분하여 표시 한다.

또한 편집 윈도우의 좌측 하단에 Go to Function fn()버튼을 누르면 함수 리스트 창이 나타나고, 이동을 원하는 함수에서 더블 클릭 하면 해당 함수로 바로 이동한다.

외부 편집프로그램을 이용할 경우에는 Tools>Option> Editor>External Editor 메뉴를 선택하면 Type에 Command Line과 DDE(Windows Dynamic Data Exchange) 방식을 선택 할 수 있다.
Command Line의 경우는 C:WindowsNOTEPAD.EXE와 같이 파일에 대한 전체 경로명을 입력한다.

빌딩(Building)
앞에서 우리는 Embedded Workbench 구조 및 메뉴 구성 및 편집 기능에 대하여 알아 보았다. 지금부터 빌드 시, 필요한 각종 정보를 설정하는 방법에 대해 알아 보도록 하자.

1. 프로젝트 옵션 설정






워크스페이스 윈도우에서 활성화된 프로젝트를 선택하고 마우스 오른쪽 버튼을 눌러 문맥 메뉴 중 Options을 선택 하거나 메뉴 바에서 Project>Option 를 선택하면 위와 같은 대화 창이 나온다. 이 대화 창을 이용하여 프로젝트에 대한 옵션들을 설정 할 수 있으며, 화면 상(GUI)에 없는 내용에 대한 설정은 다음의 별도의 명령을 이용하여 설정 한다.

General option
Compiler options
Assembler options
Output converter options
Linker options 
Library builder options
Customer build options
C-SPY driver options

1) General options
기본 값으로 만들려면 Factory Settings 버튼을 이용한다. (Project>Option>General options)

① Target options
Processor variant 
Core / Device _ 프로세서의 코어 / 특정 디바이스 설정
Endian mode
Little _ 낮은 값이 앞 번지에 위치
Big _ 큰 값이 앞 번지에 위치
BE8 _ 데이터는 big-endian, 코드는 little-endian 사용
BE32 _ 데이터, 코드 모두를 big-endian 사용
FPU
None (default) _ 소프트웨어 부동소수점 라이브러리 사용
VFPv2 … _ 아키텍처 VFPv2 …

② Output
Output file
Executable _ 빌드 시 실행 파일을 생성한다.
Library _ 빌드 시 라이브러리 파일을 생성한다.
Output directories
Executables/libraries _ 실행 파일 생성 디렉토리 설정
Object files _ 오브젝트 파일들의 생성 디렉토리 설정
List files _ 리스트 파일들의 생성 디렉토리 설정

③ Library Configuration
Library _ 런타임 라이브러리를 선택한다. (라이브러리 종류 참조)
Configuration file _ 사용하는 라이브러리 설정 파일 지정
Library low-level interface implementation
None _ I/O low level 미사용, __write 함수를 작성 한다.
Semihosted _ BKPT명령을 사용하여 세미호스트 I/O 구현(cortex-M 사용 시)
and stdout/stderr via _ (다른 코어 사용시 SVC 사용)
semihosting
Semihosted _ stdout/stderr 출력만 SWO를 사용하고 그 외 모든 함수는 BKPT and stdout/stderr via를 사용한다. 빠른 SWO를 사용하면 데이터를 전송 하기 위해 SWO 실행을 중단 할 필요가 없다.(Cortex-M 사용 시)
IAR breakpoint _ Cortex-M이외의 코어인 경우 SVC명령을 사용하지 않고 IAR 라이브러리를 사용
CMSIS _ Cortex-M 디바이스인 경우만 사용 할 수 있다.
Use CMSIS _ CMSIS 헤더 파일들을 컴파일러 경로에 추가 한다. 소스코드에 CMSIS 헤더가 포함된 경우 사용 하면 안 된다.
DSP library _ CMSIS DSP 라이브러리를 사용

④ Library Options
Printf formatter
Scanf formatter
Buffered terminal output
라이브러리 종류별 설명은 아래 표로 요약된 내용을 참조한다. 

 


 

 


⑤ MISRA C _ MISRA-C:1998 and MISRA-C:2004
                      MISRA C 규칙에 대한 소스 코드의 검사 기능으로 컴파일러와 링커에 대한 세부 내용을 설정한다. 자동차 산업 군에서 사용되는 소프트웨어 규격으로 이에 대한 점검 기능을 수행한다.(Motor Industry Software Reliability Association)

2) Compiler options
기본 값으로 만들려면 Factory Settings 버튼을 이용한다. (Project>Option>C/C++ Compiler)
Multi-file Compilation _ 다중 파일 컴파일 기능은 최적화 기법의 하나로 워크스페이스에 선택된 프로젝트 파일의 그룹을 하나의 파일로 처리한다.
Discard Unused Publics _ 사용 하지 않는 퍼블릭 함수 및 변수를 제거한다.

① Language 1
Language
C / C++
Auto _ 파일의 확장자에 따라 C(*.c) 또는 C++(*.cpp) 선택
C dialect
C89 _ 표준 C 대신 C89 규격을 활성화 한다.
C99 _ 표준 C 로 알려진 규격
Require prototypes _ 모든 함수에 대해 올바른 프로토타입 여부를 검사한다.
C++ dialect
Embedded C++ _ C++의 특화된 형태로 class, overloading 지원
Extended Embedded C++ _ namespace나 표준 템플릿 라이브러리 지원
C++ _ 표준 C++ 선택
With exceptions _ C++언어에서 예외처리 지원
With RTTI _ C++언어에서 Runtime type information(RTTI) 지원
Destroy static objects _ 프로그램 종료 시 정적 변수들의 소멸관련 코드 생성
Language conformance
Standard with IAR _ 표준 C/C++언어에서 ARM 특화 키워드를 사용한다.
Extensions _ IDE에서 사용하는 기본값이다.
Standard _ IAR시스템즈의 확장어를 비활성화 한다. 완화된 C/C++ 사용.
Strict _ C/C++ dialect에 선택한 내용 준수, 많은 확장/완화 사용 못함

② Language 2
Plain 'char' is _ 기본 char타입을 unsigned char로 취급. Signed 설정 시는 런타임 라이브러에서 unsigned char에 대한 동작이 안 된다.
Floating-point semantics
Strict conformance _ 부동소수점 표현식에 C와 부동소수점 표준을 준수
Relaxed _ 부동소수점에 대한 최적화를 위한 완화된 언어 규칙 아래 조건의 경우 성능 향상이 있다.
            - 단/배정도(Single/double-precision)모두 포함된 표현
            - 값의 손실 없이 double-precision을 single로 변환
            - 표현식의 결과를 single로 변환
Enable multibyte support _ 주석, 스트링 문자열, 고정 문자열에 허용, 코드 변환 없이 그대로 생성된다.

③ Code
Generate interwork code _ ARM과 Thumb 모드를 혼용할 수 있다.
Processor mode   
Arm _ full 32-bit instruction set 사용
Thumb _ reduced 16-bit instruction set 사용
Position-independence _ 위치 독립(Position-Independent) 코드와 데이터

④ Optimizations
Level _ 최적화 등급 선택, High인 경우 Speed와 Size선택 가능
Enabled transformations _ 최적화 알고리즘을 선택하여 세밀한 최적화 조절 가능

⑤ Output
Generate debug information _ C-SPY와 다른 심볼릭 디버거에 필요한 정보 추가
Code section name _ IAR ILINK 링커에서 참조하는 코드가 생성되는 영역, 사용자가 다른 영역으로 변경하여 사용 할 수 있으며 사용자 섹션이 정의 되어 있어야 한다.

⑥ List
Output list file
Output assembler file _ 어셈블러 리스트 파일을 만든다.

⑦ Preprocessor
Ignore standard include directories 
Additional include directories 
Preinclude file _ 소스파일을 읽어 컴파일 하기 전에 미리 지정한 파일을 포함한다.
Defined symbols _ #define 과 동일한 기능으로 심볼을 전의한다. TESTVER=1 의 예제처럼 공백이 없어야 한다.
Preprocessor output to file
Preserve comments _ 주석을 유지한다.
Generate #line directives _ #line 지시어를 생성한다.

⑧ Diagnostics
진단메시지에 대한 내용을 설정한다.
Enable remarks _ Remark라는 낮은 등급의 메시지를 생성한다.
Suppress these diagnostics _ 지정한 메시지의 출력을 숨긴다. Pe117,Pe177
Treat these as remarks _ 지정한 메시지를 Remark로 간주한다. Pe177
Treat these as warnings _ 지정한 메시지를 경고로 간주한다. Pe826
Treat these as errors _ 지정한 메시지를 오류로 간주한다. Pe117
Treat all warnings as errors _ 모든 경고를 오류로 간주한다.
⑨ Extra Options _ 명령 줄(command line) 인터페이스 기능을 제공한다.
Use command line options _ GUI에서 제공되지 않는 내용에 대한 명령을 사용한다.

3) Assembler options

① Language
User symbols are case sensitive
Enable multibyte support _ 다중바이트 문자 지원에 대한 설정, 변환 없이 그대로 전달된다.
Macro quote characters _ 기본적으로 <> 문자를 사용한다.
Allow alternative register names, mnemonics and operands _ ARM DS/RVCT 어셈블러로 작성된 어셈블러 소스 코드를 위해 사용한다. 명령 줄 옵션 -j기능과 동일하다.

② Output
Generate debug information

③ List
Output list file _ sourcename.lst 파일을 생성한다.
Include header _ 헤더를 포함한다. 헤더는 제품버전, 어셈블한 날짜/시간 정보 및 명령 줄의 내용에 대한 정보를 포함한다.

④ Preprocessor
Ignore standard include directories _ 표준 포함 파일에 대해 사용하지 않는다.

4) Linker options
① Config
Linker configuration file _ 프로젝트 설정에 따라 자동으로 기본 링커 설정파일 선택, Override default를 선택 후 원하는 파일을 지정 할 수 있다.

② Library
Automatic runtime library selection _ 프로젝트 설정에 따라 알맞은 라이브러리를 자동적으로 선택
Additional libraries _ 링크 시 필요한 라이브러리를 추가한다.
Override default program entry _ 기본적으로 프로그램 시작점은 __iar_program_stsrat 이다.

③ Input
Keep symbols _ 정의된 심볼을 유지한다. 기본적으로 사용하지 않는 심볼은 자동 삭제됩니다.
Raw binary image _ 바이너리 파일을 링크 시 포함한다.

④ Optimizations
Inline small routines _ 함수를 호출하는 대신 그 함수 코드를 삽입한다.
Merge duplicate sections _ 읽기 전용 영역에 대해 하나만으로 관리한다. 같은 주소를 갖는 다른 내용의 함수나 상수가 발생할 수 있으니 주의를 요한다.
Perform C++ Virtual Function Elimination
Allow C++ exceptions _ 선택하지 않은 경우 코드 중에 throw가 포함되면 에러 발생

⑤ Output
Output filename _ ILINK의 출력 파일명을 지정한다. 기본적으로 프로젝트명과 확장자 out를 사용한다.

⑥ List
Generate linker map file
Generate log file _ 리스트 디렉토리에 projectname.log명으로 로그정보를 저장한다. 로그 정보에서 실행 파일이 만들어진 내용을 이해하는데 도움이 될 것이다.

⑦ #define
Defined symbols _ 링크 시 사용되는 심볼을 정의한다. TESTVER=1 와 같이 공백 없이 표현한다. 존재하는 심볼에 대해 재정의하면 에러를 발생한다.

⑧ Checksum _ 미사용 영역 채움 코드 및 체크섬을 설정한다. 실행 파일이 정확하게 프로그래밍 되었는지를 확인하는 검증으로 실행 파일 내에 체크섬 검토 모듈이 포함되어 사용한다.

 


실습: 새로운 워크스페이스 작성
간단한 예제를 실습해 보면서 앞서 살펴본 내용을 정리하여 보자

1. 워크스페이스 새로 만들기
File>New>Workspace를 실행하여 새로운 워크스페이스를 생성한다.

2. 프로젝트 새로 만들기
Project>Create New Project를 실행한다. 기본 프로젝트 템플릿에서 원하는 항목을 선택하기 위한 대화창이 표시된다. C의 main을 선택하고 OK 버튼을 누른다. (C에서 +부분을 펼치면 main이 나온다.) 프로젝트 이름과 저장될 위치를 설정하는 대화창이 표시된다.

Test1 이라고 프로젝트 이름을 지정하고 Save 버튼을 누른다. 그러면 워크스페이스 창에 Test1 - Debug라는 프로젝트와 Main.c 파일과 Output이라는 그룹이 생성된다.
Debug와 Release 2개의 빌드 설정 항목을 기본적으로 만들어 준다.

3. 소스 파일 편집
편집 창에는 main.c 소스파일이 열려 있다. 여기에 다음과 같이 소스를 추가한다.
툴바의 Save All 버튼을 누르면 워크스페이스 이름을 묻는다. Test라고 입력하고 저장한다.


 

#include
int main()
{
  printf("Hello IAR!n");
  return 0;
}

 



 

4. 빌드 옵션 설정
워크스페이스 창에서 프로젝트를 선택한 후 마우스 오른쪽 버튼을 눌러 문맥 메뉴를 호출한다. Option을 선택하고 General Options에서 Core를 Cortex-M3로 설정한다.
Debuger는 Simulator로 설정한다.

5. 프로젝트 빌드
Project>Rebuild All을 실행하여 프로젝트를 빌드한다.

6. 빌드 중 오류 정정
에러가 발생된 경우 빌드 메시지 창에서 해당 내용을 더블 클릭하면 에러가 발생된 소스 위치로 커서가 이동하며, 내용에 따라 수정한다.

7. 디버깅(C-SPY) 작업
툴바의 Download and Debug 버튼을 실행한다. (또는 Project>Download and Debug) 그러면 C-SPY 디버깅 프로그램이 실행되며, 화면이 C-SPY 화면으로 전환된다.
View>Terminal I/O 창을 선택하여 창이 보이도록 한다. Debug>Go나 툴바의 Go버튼을 누른다. Terminal I/O창에 Hello IAR! 문구가 보일 것이다.


※ 다음호에서는 "IAR EWARM 고급편 : 소스코드에서 실행코드까지"라는 더욱 알찬 내용을 통해 찾아 뵐 것이다.

 

 

 [그림 1] 제품 포트폴리오 오버뷰(Overview)

[그림 2] IAR 임베디드 워크벤치 IDE 화면 예시 (IAR Embedded Workbench IDE)

[그림 3] 툴바의 버튼 명칭

[그림 4] 프로젝트 관리 구성도

[그림 5] 워크스페이스 윈도우 화면 예시

[그림 6] 소스 브라우저 윈도우 화면 예시

[그림 7] 편집 윈도우 화면 예시

[그림 8] 빌드 시, 워크스페이스 윈도우 옵션 화면 예시

 


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