10.07.2015 Views

PDF version - ARM Information Center

PDF version - ARM Information Center

PDF version - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

프로세서 예외 처리이를 처리하는 데는 다음과 같은 몇 가지 방법을 사용할 수 있습니다.• SVC 번호에서 SVC 명령어를 생성하여 적절한 위치에 저장한 다음 실행합니다.• 인수에 대해 수행할 실제 연산의 코드를 추가 인수로 사용하는 일반 SVC를사용합니다. 일반 SVC에서는 연산을 디코딩하여 수행합니다.두 번째 메커니즘은 레지스터에 필요한 연산 번호 (대개 R0 또는 R12) 를 전달하여어셈블리 언어로 구현할 수 있습니다. 그런 다음 적절한 레지스터의 값에 대해 작동하도록 SVC 처리기를 다시 작성할 수 있습니다.일부 값은 SVC의 주석 필드에 전달해야 하므로 이 두 가지 방법을 함께 사용할 수도 있습니다.예를 들어 운영 체제에서 단일 SVC 명령어를 사용하고, 레지스터를 사용하여 필요한 연산의 번호를 전달할 수 있습니다. 이렇게 하면 응용 프로그램 관련 SVC에 사용할 수 있는 SVC 공간의 나머지 부분만 남게 됩니다. 특정 응용 프로그램에서 명령어의 연산 번호를 추출할 때의 오버헤드가 너무 큰 경우 이 방법을 사용할 수있습니다. <strong>ARM</strong> 및 Thumb의 세미호스팅된 명령어는 이러한 방식으로 구현됩니다.예제 6-15에서는 __svc를 사용하여 세미호스팅 호출에 C 함수 호출을 매핑하는방법을 보여 줍니다. 이 예제는 예제 디렉토리의 ...\emb_sw_dev\source\retarget.c에 있는 retarget.c를 기반으로 합니다.예제 6-15 세미호스팅 호출에 C 함수 매핑#ifdef __thumb/* Thumb Semihosting */#define SemiSVC 0xAB#else/* <strong>ARM</strong> Semihosting */#define SemiSVC 0x123456#endif/* Semihosting call to write a character */__svc (SemiSVC) void Semihosting (unsigned op, char *c) ;#define WriteC (c) Semihosting (0x3,c)void write_a_character (int ch){char tempch = ch;WriteC ( &tempch ) ;}6-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0203IKNon-ConfidentialUnrestricted Access

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!