Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
升级“arm none eabi gcc”后,“文本”部分将不适用`_Gcc_Arm_Newlib_Libopencm3 - Fatal编程技术网

升级“arm none eabi gcc”后,“文本”部分将不适用`

升级“arm none eabi gcc”后,“文本”部分将不适用`,gcc,arm,newlib,libopencm3,Gcc,Arm,Newlib,Libopencm3,我有一本书。为了便于编译,我使用容器Podman和Docker都可以: make image make libopencm3 make 这工作正常,生成一个大约874KB的main.elf文件。但只要我在Dockerfile中将arm none eabi gcc cs修改为7.4.0,就可以了 如果删除特定版本或将其设置为9.2.0,则会出现以下错误: $ make /usr/lib/gcc/arm-none-eabi/9.2.0/../../../../arm-none-eabi/bin/l

我有一本书。为了便于编译,我使用容器Podman和Docker都可以:

make image
make libopencm3
make
这工作正常,生成一个大约874KB的main.elf文件。但只要我在Dockerfile中将arm none eabi gcc cs修改为7.4.0,就可以了

如果删除特定版本或将其设置为9.2.0,则会出现以下错误:

$ make
/usr/lib/gcc/arm-none-eabi/9.2.0/../../../../arm-none-eabi/bin/ld: main.elf section `.text' will not fit in region `rom'
/usr/lib/gcc/arm-none-eabi/9.2.0/../../../../arm-none-eabi/bin/ld: region `rom' overflowed by 5288 bytes
collect2: error: ld returned 1 exit status
make: *** [opencm3/libopencm3.rules.mk:204: main.elf] Error 1
这些版本之间会有什么变化

如果将此行添加到Makefile中:

LDFLAGS         += -specs=nano.specs
然后,它在9.2.0版本中编译得很好,并生成一个大小约为885 kB的main.elf文件。但我想知道演出是否会和以前一样或相当

使现代化 当然,我期待着一些性能上的差异,就像我期待着二进制大小上的差异一样。但我想知道我是否能期望在性能上有20%以上的差异,特别是如果现在可以慢20%


<新的二进制数小于2%,我认为这和以前一样。D

我完全理解您希望使用您喜欢的主流Linux发行版中最新、最棒的工具链,但这并不总是很顺利

依我拙见,你应该:

坚持使用gcc或gcc工具链, 在您的特定cortex-m相关项目中,坚持使用gcc工具链,更具体地针对cortex-m,即所谓的。 一些评论:

ARM本身为这两个外形提供两个特定工具链的原因可能非常充分, Linaro提供的最新GCC工具链版本是7.4.1,但是如果他们在默认情况下指向它,那么他们现在指向的是7.2.1版本,这可能与7.4.1有关,也可能与7.4.1无关——目前还没有正式的9.2版本。 ARM提供的最新GCC工具链cortex-m为8.3.1,cortex-a为8.3,目前还没有正式的9.2版本。 现在回到您的具体问题:我能够使用以下步骤编译您的项目:

wget "https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2?revision=c34d758a-be0c-476e-a2de-af8c6e16a8a2?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,8-2019-q3-update" -O gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
mkdir -p /opt/arm
tar jxf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 -C /opt/arm
export PATH=/opt/arm/gcc-arm-none-eabi-8-2019-q3-update/bin:$PATH
命令哪些arm none eabi gcc应显示/opt/arm/gcc-arm-none-eabi-8-2019-q3-update/bin/arm none eabi gcc

命令arm none eabi size./src/main.elf应显示:

text    data     bss     dec     hex filename
55152    3336    7100   65588   10034 ./src/main.elf
请注意,ARM针对cortex-m配置文件提供了最新GCC工具链的Docker文件。您可能希望在自己的Docker文件中使用它,并删除这两行:

arm-none-eabi-gcc-cs-7.4.0 \
arm-none-eabi-newlib-3.1.0-2.fc30 \

我希望这有帮助

由于使用不同的gcc版本,性能预计会发生变化。不要想当然。因为您更改了编译器和设置,所以必须测试它的功能和性能。性能是特定于您的应用程序的。@old_timer是的,我希望性能有一些小的,<10%的差异。我想知道7.4.0和9.2.0之间是否有变化,7.4.0默认使用nano.specs,而现在9.2.0没有。或者类似的。一个明显的变化可能迫使我现在将规格设置为nano.specs。否则,我是否可以仅仅从上面发布的更改中期待性能上的巨大差异?>20%. 当然,我需要测试它,但不确定什么时候我能测试,所以我在寻找一个猜测/估计,如果可能的话-很可能。还取决于您在何处以及如何获得工具链二进制文件。之前的版本可能有很多设置,要么是默认的单向设置,要么是生成器可以单向设置。这一个可以用另一种方式设置默认值,或者生成器用另一种方式设置默认值。这可能就是区别所在。编译器的输出确实会随着时间的推移而变化,不一定会变得更好,因此预期会有一些差异,希望只有几个百分点,但您只需尝试一下即可。@old_timer谢谢。把它作为答案贴出来。如果没有人不这么说,我会接受你的正确答案,即:没有办法知道,但要努力-D@old_timer如果你能谈谈你或你认识的人在经历过类似的事情时会有所帮助:一个新的二进制文件大小大致相同,差异<2%,但性能现在慢了>20%。除非工具链中有一个bug,否则我绝对不会这么想。由于GCC被广泛使用,并且我的项目是一个玩具项目,我想说我不太可能在GCC的代码中发现bug。但当然,我的经验非常有限,所以我可能完全错了!:-汉克斯!我将看一看Linaro/ARM工具链并试用。@Peque在假设的情况下,您会对上面的答案感到满意,请不要忘记接受它-谢谢。
arm-none-eabi-gcc-cs-7.4.0 \
arm-none-eabi-newlib-3.1.0-2.fc30 \