Arduino IDE のFマクロを知らなかった恥ずかしい話

Arduinoを良く使っていますが、Fマクロ()を知りませんでした。
恥ずかしいというか、何というか。

で、Fマクロ() て何なの? という話ですが、
Serial.println(“abcdefghijklmnopqrstuvwxyz”);
これは文字列 “abcdefghijklmnopqrstuvwxyz” を、
起動時にFlash(プログラムが格納されるメモリ)からSRAMに丸々コピーされ、それが実行時に読み出されます。
Serial.println(F(“abcdefghijklmnopqrstuvwxyz”));
とした場合、文字列 “abcdefghijklmnopqrstuvwxyz” はSRAM上に展開されず直接Flush ramから読まれます。

Arduino の SRAM は小さいので、少し長いプログラムを書くと直ぐにSRAM領域が不足してしまい、今まではそんな時にはデバッグ用に埋め込んでいた Serial.print()を消していたのですが、これによりデバッグ用のSerial.print()を残したままでも良くなりそうです。

Fマクロ未使用

Fマクロ使用

使用メモリと空きメモリが
フラッシュメモリ 1656バイト(5%) → 1672バイト(5%)
グローバル変数 214バイト(10%) → 188バイト(9%)
ローカル変数空き 1834バイト → 1860バイト
となっています。
差の26バイトは “abcdefghijklmnopqrstuvwxyz” の分です。


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください