Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jmp到内联AVR C中的地址_C_Assembly_Arduino_Memory Address_Avr Gcc - Fatal编程技术网

jmp到内联AVR C中的地址

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));

我正试图为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 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));