'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. 구성 및 제어 레지스터'가 있습니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.