大量のテキスト変数では、PROGMEMを使用してフラッシュメモリに保存する必要があることがわかりました。Arduinoでフラッシュ(PROGMEMを使用)とSRAM、EEPROMに大きな変数を格納することのプラスとマイナスの結果は何ですか?
大量のテキスト変数では、PROGMEMを使用してフラッシュメモリに保存する必要があることがわかりました。Arduinoでフラッシュ(PROGMEMを使用)とSRAM、EEPROMに大きな変数を格納することのプラスとマイナスの結果は何ですか?
回答:
現在の多くのArduinoボード(Due、Leonardo、古いArduinos、およびその他の互換性のあるボードを除く)の多くのマイクロコントローラーであるAtMega328のフラッシュ、EEPROM、およびSRAMの簡単な比較を以下に示します。
PROGMEM
たコードアクセス。そのため、PROGMEMを使用した場合の主要な負の結果は、10,000書き込みサイクルの制限です。EEPROMを使用することの重要なマイナスの結果は、データの読み取り/書き込み/コピーのコードの複雑さです。SRAM、容量が非常に限られています。
主な意味は、PROGMEMに保存されている情報を変更できないことです。また、文字列を一度に1バイトコピーする必要があるため、(非常に小さな)パフォーマンスヒットが発生します。
プログラムを変更するには、とにかくFLASHを再プログラムする必要があるため、FLASHの消耗は(主要な)懸念事項ではありません。
IDE 1.xの概要には、F()マクロが含まれていました。これにより、PROGMEMに文字列を保持しやすくなります。
たとえば、Serial.print( "Hello World!");を使用する代わりに
以下を使用できます。
Serial.print(F( "Hello World!");
F()は関数ではなく、単なるマクロであるため、使用が多少制限されることに注意してください。