gpt4 book ai didi

c++ - 在为 Arduino UNO 编译时,Arduino IDE 使用什么链接描述文件?

转载 作者:行者123 更新时间:2023-12-04 15:12:47 27 4
gpt4 key购买 nike

1。我想要实现的目标

我的最终目标是将 Arduino 项目(草图)转换为基于 makefile 的独立 C/C++ 项目。

我已经取得了一些进展(感谢@Juraj 的有益评论)。我将所有相关的 Arduino *.cpp*.h 文件复制到一个文件夹(我称之为“项目文件夹”)以及预处理的草图文件( Arduino 预处理器将草图文件转换为 *.cpp 文件)。

我添加了一个内部 makefile,并且构建工作得很好。然而,在最后一步——链接——我仍然是一个谜,到底使用了什么链接描述文件。

2。问题说明

尽管构建(包括链接步骤)运行良好,但我想知道正在使用什么链接描述文件。现在,avr-gcc 工具链从其安装文件夹中选择一个链接描述文件:

<arduino ide installation>/hardware/tools/avr/avr/lib/ldscripts

正如@Juraj 在评论中解释的那样,工具链的选择基于 -mmcu 标志。

我不希望编译器从 avr-gcc 工具链中选择固定的链接描述文件。相反,我想将此链接描述文件直接复制到我的项目文件夹中并能够对其进行调整。但要做到这一点——我必须首先知道它是哪个链接描述文件。我怎么知道?

3。背景资料

您可以在下面找到有关我的设置和系统的更多信息。

3.1。我的设置

我有一个 Arduino UNO R3,它基于 ATmega328P 微 Controller 。我在 Ubuntu 20.04.1 LTS 中工作。我安装了 Arduino IDE 并创建了一个新项目:

File > Examples > 01.Basics > Blink

我将新项目保存在 ~/Arduino/sketch_uno_blinky/sketch_uno_blinky.ino

最后我勾选了:

File > Preferences > Show verbose output

这样我就可以正确地看到编译输出。基于此,我可以跟踪参与构建的所有 *.cpp*.h 文件。我将它们复制到一个文件夹中,以创建我自己的基于 makefile 的独立项目。

3.2 链接

我这样运行链接器:

avr-gcc -Wl,-Map=output.map
-Wl,--gc-sections
-mmcu=atmega328p
-DF_CPU=16000000L
-DARDUINO=10813
-DARDUINO_AVR_UNO
-DARDUINO_ARCH_AVR
-Og
-g3
-MMD
-fmessage-length=0
-ffunction-sections
-fdata-sections
-Wno-comment
-Wno-unused-function
-Werror-implicit-function-declaration
-w
-lm
-flto
-fuse-linker-plugin
-L ../config/
-o application.elf
WInterrupts.o
main.o
hooks.o
wiring.o
wiring_analog.o
wiring_digital.o
wiring_pulse.o
wiring_shift.o
[...]
sketch_uno_blinky.ino.o

生成 application.elf 固件。

最佳答案

avr-ld 的 -mcu 选项决定链接描述文件。它从与 avr-gcc 捆绑在一起的链接器脚本中进行选择。对于 Arduino,此文件夹与 Arduino IDE 捆绑在 hardware/tools/avr/avr/lib/ldscript 的安装文件夹中,或与 packages/arduino/tools/avr-gcc 的 arduion15 文件夹中的 avr-gcc 版本之一捆绑在一起。

在 avr-gcc 源代码中有一个 avr-mcus.def file其中描述了 AVR MCU。文件中的第二列是“体系结构”,您可以在 ldscripts 中找到相应的链接描述文件。例如 atmega328p 有 ARCH_AVR5,链接描述文件是 avr5.x

关于c++ - 在为 Arduino UNO 编译时,Arduino IDE 使用什么链接描述文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64898849/

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