jmp到内联AVR C中的地址
我正试图为arduino编写一个程序,该程序可变地计算一个绝对地址,然后跳转到它(这是具有更大用途的更大程序的一部分),但是我遇到了一些麻烦。目前,我正在做如下工作:jmp到内联AVR C中的地址,c,assembly,arduino,memory-address,avr-gcc,C,Assembly,Arduino,Memory Address,Avr Gcc,我正试图为arduino编写一个程序,该程序可变地计算一个绝对地址,然后跳转到它(这是具有更大用途的更大程序的一部分),但是我遇到了一些麻烦。目前,我正在做如下工作: uint16_t v_pc; uint16_t jmpAddress; jmpAddress = 0x00cf; v_pc = 0x01; jmpAddress = calc_address(jmpAddress, v_pc); asm("jmp %0" :: "r" (jmpAddress));
uint16_t v_pc;
uint16_t jmpAddress;
jmpAddress = 0x00cf;
v_pc = 0x01;
jmpAddress = calc_address(jmpAddress, v_pc);
asm("jmp %0" :: "r" (jmpAddress));
其中计算单元地址为:
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
对“r24”的未定义引用
collect2:错误:ld返回了1个退出状态
有没有更好的方法来实现这个问题,或者有人能描述一下为什么会发生这个错误
谢谢大家!
JMP
不将寄存器作为操作数。对于间接跳转,可以使用IJMP
,但隐式使用Z
寄存器。因此,您的内联asm应该更像:
asm("ijmp" :: "z" (jmpAddress));