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 호출어셈블리 언어 또는 C/C++에서 SVC를 호출할 수 있습니다.어셈블리 언어에서 필요한 레지스터 값을 설정하고 관련 SVC를 실행합니다. 예를 들면 다음과 같습니다.MOV R0, #65 ; load R0 with the value 65SVC 0x0 ; Call SVC 0x0 with parameter value in R0SVC 명령어는 거의 모든 <strong>ARM</strong> 명령어와 마찬가지로 조건부로 실행할 수 있습니다.C/C++에서 SVC를 __SVC 함수로 선언하고 호출합니다. 예를 들면 다음과 같습니다.__svc (0) void my_svc (int) ;...my_svc (65) ;이렇게 하면 다음과 같은 경우 추가 호출 오버헤드 없이 SVC를 인라인으로 컴파일할 수 있습니다.• 모든 인수가 R0-R3에만 전달되는 경우• 결과가 R0-R3에만 반환되는 경우매개변수는 SVC가 실제 함수 호출인 것처럼 SVC에 전달됩니다. 그러나 두 개에서 네 개 사이의 반환 값이 있으면 반환 값이 구조체에 반환되고 __value_in_regs지시문을 사용한다는 것을 컴파일러에 알려야 합니다. struct 값 함수는 대개 결과 구조체를 배치할 주소를 첫 번째 인수로 사용하는 void 함수와 같은 방식으로처리되기 때문입니다.예제 6-13 및 6-27페이지의 예제 6-14에서는 SVC 번호 0x0, 0x1, 0x2 및 0x3을 제공하는 SVC 처리기를 보여 줍니다. SVC 0x0 및 SVC 0x1은 각각 두 개의 정수 매개변수를 사용하며 단일 결과를 반환합니다. SVC 0x2는 네 개의 매개변수를 사용하며단일 결과를 반환하고, SVC 0x3은 네 개의 매개변수를 사용하며 네 개의 결과를 반환합니다. 이 예제는 예제 디렉토리의 ...\svc\main.c와 ...\svc\svc.h에 있습니다.예제 6-13 main.c#include #include "svc.h"unsigned *svc_vec = (unsigned *) 0x08;extern void SVC_Handler (void) ;6-26 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!