0
0
テーマ、知りたいこと
Auduino IDE で実装したスケッチファイルが、IDE に
("Upload") される処理は、以下のような流れで行われているのでしょうか?
(https://docs.arduino.cc/) で検索してみましたが、それらしい文書が見つからず、認識に間違いが無いかどうか意見をいただけませんか?
- C/C++ コードに展開
- 展開されたコードが C コードなのか、 C++ コードなのか判定
- gcc をコール
- C コードの場合は、展開した C コードを元に
avr-gccをコール - C++ コードの場合は、展開した C++ コードを元に
avr-g++をコール
- C コードの場合は、展開した C コードを元に
- プリプロセッサ処理
- 実行ファイル生成 (オブジェクトファイル生成 & リンク) -> Hex ファイル生成
(この時点で生成される実行ファイルが、IDE の
(Sketch->Export Compiled Binaly) で生成される "~.hex" ファイルと同じ) - avrdude で実行ファイルを Arduino に書き込み
調べてみたこと
大まかな Arduino IDE の構成については、Arduino言語 = C/C++言語? Arduinoコードの仕組みを参考にしました。
また、Arduino IDE のインストール時に以下のファイルが追加されていました。
- C:\Users\USERNAME\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino\main.cpp
- C:\Users\USERNAME\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\platform.txt
その為、大まかな構成は、以下のようなものと予想しています。
- スケッチファイルを作成 -> Upload
- Arduino IDE が、
- スケッチファイルと Wiring ライブラリを組み合わせて、C/C++ ソースコードに展開
- avr-gcc でコンパイル
- avrdude でターゲットボードに書き込み
(参考) platform.txt の中身
# Default "compiler.path" is correct, change only if you want to override the initial value compiler.path={runtime.tools.avr-gcc.path}/bin/ compiler.c.cmd=avr-gcc compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections compiler.c.elf.cmd=avr-gcc compiler.S.flags=-c -g -x assembler-with-cpp -flto -MMD compiler.cpp.cmd=avr-g++ compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto compiler.ar.cmd=avr-gcc-ar compiler.ar.flags=rcs compiler.objcopy.cmd=avr-objcopy compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 compiler.elf2hex.flags=-O ihex -R .eeprom compiler.elf2hex.cmd=avr-objcopy compiler.ldflags= compiler.libraries.ldflags= compiler.size.cmd=avr-size
# AVR Uploader/Programmers tools # ------------------------------ tools.avrdude.path={runtime.tools.avrdude.path} tools.avrdude.cmd.path={path}/bin/avrdude tools.avrdude.config.path={path}/etc/avrdude.conf tools.avrdude.upload.params.verbose=-v tools.avrdude.upload.params.quiet=-q -q # tools.avrdude.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value tools.avrdude.upload.verify= tools.avrdude.upload.params.noverify=-V tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} {upload.verify} -p{build.mcu} -c{upload.protocol} "-P{serial.port}" -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i" tools.avrdude.program.params.verbose=-v tools.avrdude.program.params.quiet=-q -q # tools.avrdude.program.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value tools.avrdude.program.verify= tools.avrdude.program.params.noverify=-V tools.avrdude.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} {program.verify} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i" tools.avrdude.erase.params.verbose=-v tools.avrdude.erase.params.quiet=-q -q tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m tools.avrdude.bootloader.params.verbose=-v tools.avrdude.bootloader.params.quiet=-q -q tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m tools.avrdude_remote.upload.pattern=/usr/bin/run-avrdude /tmp/sketch.hex {upload.verbose} -p{build.mcu} # The following rule is deprecated by pluggable discovery. # We keep it to avoid breaking compatibility with the Arduino Java IDE. tools.avrdude.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA tools.avrdude.upload.network_pattern="{network_cmd}" -address {serial.port} -port {upload.network.port} -sketch "{build.path}/{build.project_name}.hex" -upload {upload.network.endpoint_upload} -sync {upload.network.endpoint_sync} -reset {upload.network.endpoint_reset} -sync_exp {upload.network.sync_return}
確認環境
OS: Windows10(64bit) (22H2)
Auduino IDE: 2.2.1 (64bit)
使用ボード: Arduino UNO R3
回答1件
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。