2014-04-04 3 views
0

프로젝트를 Freescale TWR-K60F120M 개발 보드와 Kinetis K60 32 비트 ARM® Cortex ™ -M4 MCU로 이식하고 있습니다. 어셈블리 코드를 조작하는 동안 특정 레지스터에 작업 컨텍스트를 저장하는 함수가 있습니다.인터럽트 발생시 Thumb2와 ARM의 차이점

thumb2 (Cortex ™ -M4 명령어 세트)에 대한 인터럽트가 발생할 때 작업 컨텍스트가 저장된 레지스터를 아는 사람이 있습니까?

감사합니다.

+1

더 많은 문맥을 제공해야합니다. 어떤 OS 또는 베어 메탈? 팔에서 일련의 프로그래머 가이드라는 제목의 무료 책이 있습니다. 그것은 당신에게 약간의 통찰력을 제공 할 수 있습니다. – auselen

답변

1

팔 구조 참조 문서는이 작동 방식에 대해 아주 분명합니다. 차이점이있을 경우 특정 세부 정보를 위해 사용중인 핵심 문서를 참조해야합니다. cortex-m 대 non-cortex-m은 확실히 다르다. non-cortex-m (cortex-a, arm11 등)은 각 처리기의 설명서에 의사 코드가 있으며 암 모드로 전환한다고 생각합니다. arm mode와 thumb2를 가진 유일한 프로세서는 가장 최근의 cortex-a입니다. 그래서 여러분이 피질 -m과 피질 -m의 차이점을 묻는다면. 다시 암 문서에 잘 설명되어 있지만 :

cortex-m은 gpr을 보호하고 해당 어셈블리를 반환하기 위해 어셈블리 언어 래퍼 (또는 해당 추가 어셈블리를 생성하는 컴파일러 관련 지시문)가 필요하지 않도록 설계되었습니다. 올바른 지시. cortex-m은 하드웨어에서이를 수행하며 인터럽트 벡터 테이블에서 C 함수의 주소를 가질 수 있도록 설계되었습니다. non-cortex-ms는 일반적으로 thumb2를 지원하지 않지만, 엄지 모드 또는 암 모드에서 나는 그들이 물론 뒤로 전환 할 수있는 핸들러에 대해 암 모드로 전환한다고 생각합니다. cortex-m이 아닌 다른 스택에 스택을 가지고 있고 레지스터를 뱅킹했습니다. 그래서 인터럽트와 처리기에 따라 더 많은 인터럽트를 보존해야 할 수도 있습니다. 그리고 bx lr로 리턴 할 수는 없습니다. 예외를 기반으로 적절한 반환 명령을 사용해야합니다.

또한 cortex-m은 벡터 테이블의 주소 목록을 사용합니다. 전통적인 팔은 명령어 목록을 사용합니다 (대개 하나의 명령어로 테이블에서 나갈 때 b 또는 ldr pc를 사용해야합니다).

+0

나는 실제로 Trampoline OS 용 오일 템플릿을 연구 중이다. 기존 템플릿은 명령어 세트 ARM 용으로 작성되었으며 thumb2에 적합하도록 변경해야합니다. 템플릿은 매우 구체적이며, 작업의 컨텍스트가 저장되는 레지스터의 주소가있는 데이터 구조를 생성하므로,이 두 가지 명령어 세트의 차이점을 알아야합니다.) 템플릿. –

+0

infocenter.arm.com 하나 또는 일부 아키텍처 참조 설명서 및 기술 참조 설명서를 얻으십시오. ARMv8은 그다지 보이지 않습니다. ARMv7 (cortex-a/r)을 보면 아키텍처에 대한 명령어 세트와 아키텍처 정보가 포함되어있을뿐만 아니라 각 명령어가 해당 명령어를 지원하는 아키텍처를 알려줍니다. armv7m cortex-m은 thumb/thumb2 전용이며 각 명령어를 지원하는 아키텍처를 알려줍니다. –