Arduinoのコードサイズ削減
Arduino-lite
Arduinoと同じようなコードをpure cでコンパイルして、バイナリサイズを削減するとのこと。
Arduino-lite をOS X で動かす
Windows環境決め打ちになってるので、CrossPack向けにパスを変更する。 scripts/mak_avr_def.infを変更。
ifndef WINAVR_HOME WINAVR_HOME := /usr/local/CrossPack-AVR endif REMOVE := rm -f MV := mv -f MKDIR := mkdir -p SED := sed FIND := find DIRNAME := dirname #we use the modified avrdude version provided by Arduino AVRDUDE := avrdude
とか。あと--crefオプションがないとのことなので、下記を修正。
$(TARGET).elf: $(OBJ) $(EXTRA_OBJ) $(MKDIR) `$(DIRNAME) $@` # $(CC) $(ALL_CFLAGS) --cref -o $@ -L. $^ $(LDFLAGS) $(CC) $(ALL_CFLAGS) -o $@ -L. $^ $(LDFLAGS)
手持ちのライタはAVRISP mk2なので、
AVRDUDE_PROGRAMMER := avrisp2 BURNING_PROGRAMMER := avrisp2 BURNING_PORT = usb
と変更する。
動かしてみる
attiny2313、8MHzで動かしてみよう。スケッチのMakefileを
MCU := attiny2313 F_CPU := 8000000
として、下記のようなスケッチをビルド。
#include "arduino_lit.h" #define ledPin 0 void setup() { PIN_MODE(ledPin,OUTPUT); } void loop() { DIGITAL_WRITE(ledPin,HIGH); sleep(100); DIGITAL_WRITE(ledPin,LOW); sleep(100); } int main() { init(); setup(); while(1) loop(); }
make make fuse make burn
で、AVRISPmk2からのburnに成功。
まあ、こんなスケッチではarduino-lite化する意味がほとんどないのだが。。
注意事項
- DIGITAL_READの返答はHIGH/LOWではなく、0/NonZero
- タイマ割り込みはなんだか誰かに使われてる様子