[英]jmp to address in inline AVR C
我正在嘗試為arduino編寫程序,該程序可變地計算絕對地址,然后跳轉到該地址(這是具有較大用途的較大程序的一部分),但是我遇到了一些麻煩。 目前,我正在執行以下操作:
uint16_t v_pc;
uint16_t jmpAddress;
jmpAddress = 0x00cf;
v_pc = 0x01;
jmpAddress = calc_address(jmpAddress, v_pc);
asm("jmp %0" :: "r" (jmpAddress));
其中calc_address為:
uint16_t calc_address(uint16_t jmpAddress, uint16_t v_pc){
return jmpAddress += v_pc;
}
但是,當我嘗試鏈接程序時(即avr-gcc -mmcu = atmega328p program.o -o program),它給了我以下錯誤:
undefined reference to `r24' collect2: error: ld returned 1 exit status
是否有更好的方法可以實現此目的,或者有人可以描述為什么可能發生此錯誤?
謝謝!
JMP
不會將寄存器用作操作數。 對於間接跳轉,可以使用IJMP
但是會隱式使用Z
寄存器。 這樣,您的嵌入式asm應該看起來更像:
asm("ijmp" :: "z" (jmpAddress));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.