본문 바로가기

컴퓨터 과학 & 영상처리 관련/임베디드

arm에서 어셈블러로 UART_puts(const char *s) 부르기

c언어에서 함수 프로토타입
int UART_puts(const char *s);

 

 

 

start.S 파일안의 부르는 부분

        ldr     r0,_str
        bl      UART_puts

_str:
        .word   __str1
__str1:
        .string "x = "

 

 

 

결과
x =


그냥 부르면 좋은데 하나 건너 불러야 되나...
mov r0, __str1을 하면 #을 붙여야되고
붙인다 쳐도 "x = " 값이 들어가지 주소값은 안들어감..
먼가 좋은 방법이 있긴 있겠지만 난 잘 모르겠다

 

 

 

 

 


 


 

함수 프로토타입

int UART_printf(const char *format, ...);


 

start.S 함수호출부분

        ldr     r0,_str
        bl      UART_printf

_str:
        .word   __str1
__str1:
        .string "haha x = %x\n"

 

결과

haha x = 80e608a4

신기할 따름이네..printf를 어셈블러 안에서 쓸 수 있어서 좋아보이기는 하네

근데 chk하는거랑 머가 다른지 모르겠고..문자열을 편집하기가 힘든 만큼 이거는 거의 쓸일 없을듯