저는 최근에 ARM 플랫폼에서 임베디드 프로그래밍을 시작했습니다. 코드 샘플에서 C 언어로 프로젝트를 작성 했음에도 불구하고 코드 사이의 일부 위치에서 자체 작성한 어셈블리 함수를 호출하는 것으로 나타났습니다. 더 놀라운 점은 조립 기능에서 수행하는 작업이 모두 mov smth, smth_else
입니다. 코드는 몇몇 전문 팀에서 작성했기 때문에이 작업을 수행하면 어떤 이점이 있습니까? 내 제한 관찰에서왜 임베디드 어셈블리 코드를 작성하고 싶습니까?
UPDATE , 난 그냥이 연습은 예를 필요로하지 않도록 유비쿼터스이라고 생각했습니다, 그러나 그것은 그렇지 않다 것으로 보인다. 그래서 내가 언급 한 사례 중 하나입니다 :
는/**
* @brief Return the Process Stack Pointer
*
* @param none
* @return uint32_t ProcessStackPointer
*
* Return the actual process stack pointer
*/
uint32_t __get_PSP(void) __attribute__((naked));
uint32_t __get_PSP(void)
{
uint32_t result=0;
__ASM volatile ("MRS %0, psp\n\t"
"MOV r0, %0 \n\t"
"BX lr \n\t" : "=r" (result));
return(result);
}
이 CMSIS Cortex-M3 Core Peripheral Access Layer Source File
의 한 부분이다. 그래도 나는 왜 branch
을 사용하여 BX
을 사용하고 C에서는 간단한 함수 호출이나 goto가 아닌가를 이해할 수 없다.
코드를 게시하십시오. –
인라인 어셈블리를 사용하는 것을 제외하면'mrs' (시스템 보조 프로세서 레지스터에서 ARM 레지스터로 이동) 호출은 C를 통해 호출 할 수 없기 때문에 어셈블리를 사용해야합니다. – auselen