Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/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
C AVR:重新定位被截断以适合_C_Avr Gcc_Atmega_Relocation - Fatal编程技术网

C AVR:重新定位被截断以适合

C AVR:重新定位被截断以适合,c,avr-gcc,atmega,relocation,C,Avr Gcc,Atmega,Relocation,我是这个社区的新手,因为我以前从未创建过帐户并提出过问题,但我一直使用这个网站来解决我的编程难题。谢谢你!不过,这一次,我找不到另一个符合我确切需要的问题。如果这是重复,我道歉 我现在使用的是初级操作系统0.2(Luna),它是Ubuntu 12.04的派生版本。我正在使用avr gcc库为ATmega32u4微处理器编译一个程序。在开发这个程序时,我已经编译了好几次,但直到现在我还没有收到这个错误。我把它贴在下面 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/

我是这个社区的新手,因为我以前从未创建过帐户并提出过问题,但我一直使用这个网站来解决我的编程难题。谢谢你!不过,这一次,我找不到另一个符合我确切需要的问题。如果这是重复,我道歉

我现在使用的是初级操作系统0.2(Luna),它是Ubuntu 12.04的派生版本。我正在使用avr gcc库为ATmega32u4微处理器编译一个程序。在开发这个程序时,我已经编译了好几次,但直到现在我还没有收到这个错误。我把它贴在下面

/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o):../../../libm/fplib/log.S:100: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(modf.o):../../../libm/fplib/modf.S:90: relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
collect2: ld returned 1 exit status
make: *** [main.elf] Error 1
简言之,我不知道这指的是什么。我的程序包含大量的文件,所以我不能准确地在这里发布全部内容;相反,我对以下问题的概括回答感兴趣:

  • 什么是“重新定位截断以适应”错误?我已经读到它与访问太远的内存有关,但是在我的C程序中,这是如何发生的呢
  • 什么是R_AVR_13_PCREL?它似乎是avr gcc库固有的;我的程序的哪个方面可能引用这样一个变量
  • 我包括的唯一通用C标题是math.h;其他文件是我自己的。我知道math.h有一个时髦的标志,应该放在Makefile中;我相信是的。 但我试过了,但没用
  • 非常感谢大家。我感谢这个社区的帮助。

    有关重新定位以适应错误的讨论,请参阅。我从未使用过avr,但从重新定位类型r_avr_13_pcrel来看,我猜这意味着您的指令有一个相对于程序计数器的13位地址。 这意味着数据(假设您正在调用log-on)与日志代码的距离不超过13位。13位仅为8192字节。
    因此,您试图获取的地址与使用它的指令的距离超过8KB。不幸的是,所讨论的指令在libm中,而不是在您的代码中,因此可能更难修复。 另外,请注意,由于它与PC有关,您可能只有4096个字节,因为您有一个符号位,因此您可以引用地址前后的位置


    所以,这可能与可执行文件的代码大小有关。

    这是否有助于??潜在的令人讨厌的浮点辅助函数。也许你的芯片内存太少了?甚至这个??