4.7.34.  __semihost

이 내장 함수는 SVC 또는 BKPT 명령어를 컴파일러가 생성한 명령어 스트림에 삽입합니다. 이를 통해 타겟 아키텍처와 독립적인 C 또는 C++에서의 세미호스팅 호출을 수행할 수 있습니다.

구문

int __semihost(int val, const void *ptr)

인수 설명:

val

세미호스팅 요청의 요청 코드입니다.

자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.

ptr

인수/결과 블록에 대한 포인터입니다.

자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.

반환 값

세미호스팅 호출의 결과에 대한 자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.

사용법

C 또는 C++에서 이 내장 함수를 사용하여 타겟 및 명령어 세트에 대한 적절한 세미호스팅 호출을 다음과 같이 생성하십시오.

SVC 0x123456

모든 아키텍처에 대해 ARM 상태인 경우

SVC 0xAB

ARMv7-M을 제외한 Thumb 상태인 경우. 이 동작은 ARM 또는 타사의 모든 디버그 타겟에서 보장되지는 않습니다.

BKPT 0xAB

Thumb-2만 해당하는 ARMv7-M의 경우

제한

ARMv7 이전의 ARM 프로세서는 SVC 명령어를 사용하여 세미호스팅 호출을 수행합니다. 그러나 Cortex-M3 프로세서용으로 컴파일할 경우 세미호스팅은 BKPT 명령어를 사용하여 구현됩니다.

예제

char buffer[100];
...
void foo(void)
{
    __semihost(0x01, (const void *)buf); // equivalent in thumb state to 
                                         // int __svc(0xAB) my_svc(int, int *);
                                         // result = my_svc(0x1, &buffer);
}

--thumb 옵션을 사용하여 이 코드를 컴파일하면 다음이 생성됩니다.

||foo|| PROC
    ...
    LDR      r1,|L1.12|
    MOVS     r0,#1
    SVC      #0xab
    ...

|L1.12|
    ...
buffer
    %        400

추가 참고

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential