일부 GCC 인라인 어셈블러 구조로 부터 마이그레이션

기술노트 86655

아키텍처:

ARM

컴포넌트:

compiler

업데이트:

2021-05-11 오전 9:24

소개

본 기술 노트는 GCC 인라인 어셈블러로 부터 IAR Embedded Workbench for ARM으로 마이그레이션 하는 방법에 대해 설명합니다. 본 기술 노트는 ARM 7/9 장비에 적용되며 Cortex 장비에는 적용되지 않습니다.

감사인사

Mr. Ivan Paulik, Pasat, Bratislava, Slovakia, Europe에 의해 예제가 작성되었습니다. IAR Systems는 그들의 연구 결과를 IAR Embedded Workbench for ARM 사용자들과 공유한 것에 대해 진심으로 감사를 표합니다.

 

배경지식

종종 우리에게 "GCC에서 IAR Embedded Workbench for ARM으로 마이그레이션 가이드"를 만들 것을 요청하는 사용자들이 있습니다. 이것이 사소한 작업처럼 보일 수 있으나(IAR이 다른 마이그레이션 가이드를 작성한 것처럼), "하나의 단일 GCC 컴파일러"가 없기에 사소하진 않습니다. 모든 GCC 변형에 대해 다룰 수 없습니다.

제안

GCC와 IAR Embedded Workbench for ARM사이의 가장 어려운 영역은 인라인 어셈블러와 본 기술 노트 (와 첨부내용)에서 다루게 될 그러한 구조 (기타 다른 문제들)입니다. 목표는 다음 9개의 예제와 설명이 GCC와 IAR Embedded Workbench for ARM간의 차이에 대한 문제를 극복하는데 도움이 되었으면 합니다. 또한 다른 문제는 마이그레이션을 수행하는 개발자에 의해 분류될 수 있습니다.

일반적인 참고사항

GCC 컴파일러는 사용자에게 더 많은 책임을 부여하는 것처럼 보여집니다만, IAR Embedded Workbench for ARM은 키워드, 응용프로그램에서 공일한 구조를 포함하는 내장 함수 및 옵션을 제공합니다.

예제

예제 1 -- MCU 레지스터 중 하나를 참조하는 코드.

Example 1.pdf

일반 레지스터를 읽거나 사용하지 않고, 이러한 구성을 다시 작성하시기 바랍니다. 예제에서 언급한 바와 같이, IAR C/C++ Compiler for ARM (ICCARM)은 R0레지스터를 재사용하여 큰 위험성을 가지고, 이는 런타임 에러를 발생시킵니다.

EXAMPLE 2 -- SWI 명령어 사용.

Example 2.pdf

GCC의 구조를 IAR Systems C/C++ Compiler for ARM의 __SWI 키워드로 대체하세요.

EXAMPLE 3 -- 인라인 어셈블러에서 매개 변수를 사용하여 함수를 호출하기

Example 3.pdf

컴파일을 보다 효율적으로 하기 위해 인라인 어셈블리 사용을 최소화 해야하므로 ICCARM에서는 이와 같이 사용해서는 안됩니다. IAR Systems의 제안은 인라인 어셈블리를 어셈블리 파일에서 실제 어셈블리 함수로 다시 작성하는 것입니다.

EXAMPLE 4 --"prolog" 와 "epilog" 없이 함수 사용하기.

Example 4.pdf

이와 같은 GCC 구조를 유지하는 것은 큰 위험성을 가집니다. IAR Systems의 제안은 인라인 어셈블리를 어셈블리 파일에서 실제 어셈블리 함수로 다시 작성하는 것입니다.

EXAMPLE 5 -- 패킹된 데이터 구조체 사용.

Example 5.pdf

GCC에서 IAR Systems C/C++ Compiler for ARM으로의 구문 변환에 기술하였습니다.

EXAMPLE 6 -- start, end 등등 세그먼트에 대한 참조.

Example 6.pdf

IAR Systems C/C++ Compiler for ARM의 영역 연산자 (section operators)의 사용법으로 다시 작성하세요.

EXAMPLE 7 -- 암시적 입력과 반환 값 처리 없이 함수에 자체 "prolog"와 "epilog" 생성하기.

Example 7.pdf

GCC 구성을 제거하고 Interwork 옵션을 사용하세요.

EXAMPLE 8 -- 인터럽트 함수 사용하기.

Example 8.pdf

GCC에서 IAR Systems C/C++ Compiler for ARM으로의 구문 변환에 기술하였습니다.

EXAMPLE 9 -- 데이터 구조 정렬.

Example 9.pdf

GCC에서 IAR Systems C/C++ Compiler for ARM으로의 구문 변환에 기술하였습니다.

알림:

본 기술 노트는 모든 GCC - IAR Embedded Workbench for ARM 변환에 대한 모든 문제를 다루지 않습니다, 하지만 마이그레이션을 위한 시작점이 될 것입니다.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.