makeからplatformioへ変換

flashromでパラレルflashを読み書きできるarduino(avr)のファームウエアーをmakeからplatformioへ引越ししてみました。

元々はMacOS XでArduino IDEに入っているavrのgccなどのtoolchainをmakeで使っていました。元のレポジトリはこんな感じです。

https://github.com/yamori813/frser-atmega88/tree/49330162ee44f944401ffe69e4f628d03abcec06


サブモジュールを使っているのでrecursiveでチェックアウトします。

```
% git clone --recursive https://github.com/yamori813/frser-atmega88
```

レポジトリの最上部からソースがあるので、srcディレクトリを作って、ソースとヘッダーとサブモジュールをgit mvします。Makefileも記録のために移します。

platformio.iniは以下のようにします。

```
[env:miniatmega328]
platform = atmelavr
board = miniatmega328
framework = arduino
upload_port = /dev/cuaU0
upload_speed = 57600
build_flags = -Isrc/libfrser -DBAUD=57600
```

これでpio runするとサブモジュールの利用しないファイルまでコンパイルしてエラーになります。

使用するファイルを限定するためにplatformio.iniに以下を追加します。

```
src_filter = +<*> -<libfrser> +<libfrser/frser.c> +<libfrser/udelay.c>
```

ビルドできました。

```
hiroki@pio:~/frser-atmega88 % pio run
Processing miniatmega328 (platform: atmelavr; board: miniatmega328; framework: arduino)
---------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/miniatmega328.html
PLATFORM: Atmel AVR (3.4.0) > Arduino Mini ATmega328
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 28KB Flash
DEBUG: Current (avr-stub) On-board (avr-stub, simavr)
PACKAGES: 
 - framework-arduino-avr 5.1.0 
 - toolchain-atmelavr 1.70300.191015 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 5 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/miniatmega328/src/flash.c.o
Compiling .pio/build/miniatmega328/src/libfrser/frser.c.o
Compiling .pio/build/miniatmega328/src/libfrser/udelay.c.o
Compiling .pio/build/miniatmega328/src/main.c.o
Compiling .pio/build/miniatmega328/src/uart.c.o
Archiving .pio/build/miniatmega328/libFrameworkArduinoVariant.a
Indexing .pio/build/miniatmega328/libFrameworkArduinoVariant.a
Compiling .pio/build/miniatmega328/FrameworkArduino/CDC.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/HardwareSerial0.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/HardwareSerial1.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/HardwareSerial3.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/PluggableUSB.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/Print.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/USBCore.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/WInterrupts.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/WString.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/abi.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/hooks.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/main.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/new.cpp.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring_analog.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring_digital.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring_pulse.S.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/miniatmega328/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/miniatmega328/libFrameworkArduino.a
Indexing .pio/build/miniatmega328/libFrameworkArduino.a
Linking .pio/build/miniatmega328/firmware.elf
Checking size .pio/build/miniatmega328/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [==========]  97.2% (used 1990 bytes from 2048 bytes)
Flash: [=         ]   7.3% (used 2094 bytes from 28672 bytes)
Building .pio/build/miniatmega328/firmware.hex
=================================== [SUCCESS] Took 1.75 seconds ===================================
```

.gitignoreに.pioを追加して出来上がりです。

https://github.com/yamori813/frser-atmega88

github actionも設定してみました。