| |||
Home > 컴파일러 관련 기능 > 명령어 내장 함수 > __semihost | |||
이 내장 함수는 SVC 또는 BKPT 명령어를 컴파일러가
생성한 명령어 스트림에 삽입합니다. 이를 통해 타겟 아키텍처와 독립적인 C 또는 C++에서의 세미호스팅 호출을 수행할
수 있습니다.
int __semihost(intval, const void *ptr)
인수 설명:
val세미호스팅 요청의 요청 코드입니다.
자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.
ptr인수/결과 블록에 대한 포인터입니다.
자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.
세미호스팅 호출의 결과에 대한 자세한 내용은 개발자 설명서에서 부록 A 세미호스팅을 참조하십시오.
C 또는 C++에서 이 내장 함수를 사용하여 타겟 및 명령어 세트에 대한 적절한 세미호스팅 호출을 다음과 같이 생성하십시오.
SVC 0x123456모든 아키텍처에 대해 ARM 상태인 경우
SVC 0xABARMv7-M을 제외한 Thumb 상태인 경우. 이 동작은 ARM 또는 타사의 모든 디버그 타겟에서 보장되지는 않습니다.
BKPT 0xABThumb-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
어셈블러 설명서에서 4-133페이지의 BKPT
어셈블러 설명서에서 4-134페이지의 SVC
개발자 설명서에서 부록 A 세미호스팅