簡體   English   中英

jmp以內聯AVR C尋址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM