2

使用するPROGMEMの量を決定するには、ここでリアリティチェックが必要です。以下のスニペットでは、8x8バイトの配列を格納しています。これはPROGMEMの64バイトしか使用しないと想定できますか(大まかに言って、いくらかのオーバーヘッドがありますか?)

(これは「グラントの墓に埋葬されたのは誰か」という種類の質問だと思いますが、私はPROGMEMをあまり使用しておらず、16kバイトのメモリ(ATMEGA 168チップ)があるとは思いません。実際のプロジェクトデータを生成すると、適合しません。)

prog_uint8_t datastore[] PROGMEM  = {
 0 , 0 , 0 , 255 , 0 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 255 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 255 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 0 , 255 , 0 , 
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 
 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 0 , 255 , 0 , 0 , 0 , 0 , 0
};
4

1 に答える 1

1

私は私のコメントを答えにするだろうと考えました..気軽に反対票を投じてください

  • いいえ、PROGMEMデータに余分なオーバーヘッドはありません。そのPROGMEMタグが行うのは、実際には、初期化されたSRAMデータの場合と同じように、データをフラッシュに格納するようにgccに指示することだけです。フラッシュからSRAMに自動的にロードされるSRAMデータとは対照的に、データを使用するには、SRAMではなくフラッシュからデータをロードするために内部的にuses (=プログラムメモリのロード)命令をPROGMEM使用する対応機能を使用する必要があります。少し時間がかかります(SRAMの場合は1または2サイクルではなく3サイクル)。PROGMEMLPM

  • これは確かに理解できますが、実際にはデータ用に16Kのフラッシュがありません。フラッシュをデータでいっぱいにすると、プログラム自体のスペースがなくなります:)

于 2013-03-19T19:53:35.327 に答える