gpt4 book ai didi

c - jmp 到内联 AVR C 中的地址

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:39 26 4
gpt4 key购买 nike

我正在尝试为 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("ijmp" :: "z" (jmpAddress)); 

关于c - jmp 到内联 AVR C 中的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com