'Usage Fault’ 또는 'Hard Fault' 예외를 발생 시키는 정렬되지 않은 접근 다루기

기술노트 58203

아키텍처:

ARM

컴포넌트:

general

업데이트:

2021-07-15 오후 10:14

소개

본 기술 노트에서는 정렬되지 않은 액세스로 인해 'Usage Fault’ 또는 ‘Hard Fault' 예외가 발생할 경우 수행할 작업에 대해 설명합니다.

본 기술 노트는 ARMv6(ARMv6-M 제외), ARMv7-M 및 ARMv8-M 아키텍처에 기반한 기기에 적용된다. 다른 아키텍처, 특히 ARMv6-M에 대해서는 아래의 '기타 아키텍처' 제목을 참조하십시오.

논의

다음은 예외를 피하기 위한 두 가지 제안입니다:

  • 응용 프로그램에서 구성 및 제어 레지스터에서 'UNALGE_TRP' 비트를 지우거나 비트 설정을 피하도록 합니다.

이렇게 하면 장치가 정렬되지 않은 액세스를 허용합니다. 이러한 방식으로 장치를 설정하면 IAR C/C++ 컴파일러™가 보다 효율적인 코드를 생성할 수 있습니다. 런타임 라이브러리는 이를 활용하도록 설계되었습니다.

  • --no_unalign_access 옵션을 사용하여 응용 프로그램을 컴파일합니다.

첫 번째 제안에서는 장치가 정렬되지 않은 액세스를 허용하도록 합니다. 이러한 방식으로 장치를 설정하면 IAR C/C++ 컴파일러™가 보다 효율적인 코드를 생성할 수 있습니다. 런타임 라이브러리는 이를 활용하도록 설계되었습니다.

이 제안은 응용 프로그램에서 'UNALGE_TRP' 비트를 설정한 경우에 적용할 수 있습니다. 이 경우 링커는 영향을 받는 라이브러리 함수를 정렬되지 않은 액세스를 처리하는 기능 변형으로 리디렉션합니다. 이러한 변형은 효율성이 떨어집니다.

다른 아키텍처

이 기술 노트는 ARMv4, ARMv5 및 ARMv6-M 아키텍처를 기반으로 하는 장치에는 적용되지 않습니다.

  • Examples of the ARMv6-M architecture are Cortex-M0, Cortex-M0+ and Cortex-M1.
  • Examples of the ARMv4 and ARMv5 architectures are ARM7TDMI and ARM926S.

결론

ARMv6, ARMv7-M 및 ARMv8-M 아키텍처를 기반으로 하는 장치는 이 기술 노트를 활용할 수 있습니다. (ARMv7-M 아키텍처의 예로는 Cortex-M3, Cortex-M4, Cortex-M7)
자세한 내용은 하드웨어 설명서(예: '4.3.9)를 참조하십시오. 'Cortex-M3 Devices Generic User Guide'의 시스템 핸들러 제어 및 상태 레지스터와 'Cortex-M0 Devices Generic User Guide'의 '4.3.6. 구성 및 제어 레지스터'가 있습니다.

 

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

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