MPU-9250を使用するためのスケッチ MPU6050_DMP6の中に以下のようなコードがある。
Serial.println(F("Initializing I2C devices..."));
このF()マクロは何かというと以下を見つけた。
What the F() macro Does
The F() macro tells the compiler to leave this particular array in PROGMEM. Then when it is time to access it, one byte of the data is copied to RAM at a time.
以下は僕なりの理解 (間違っているかもしれない)。
Serial.println("Initializing I2C devices...");
とした場合は、コンパイル時点で文字列がRAMに格納される。RAMが浪費される。
Serial.println(F("Initializing I2C devices..."));
とした場合は、コンパイル時点で文字列はRAMには格納されずPROGMEMにある。実際に文字列を使う時点でRAMにコピーされて使われる。
結果として、リソース制限のあるRAMを無駄に使用しなくなるということのようだ。
F()マクロは文字列(文字列リテラルというのであっている?)にのみ使えるようだ。