1

配列を「const」と宣言することで、ARM で配列を FLASH に強制できることはわかっています。しかし、これは実際には const の配列ではありません。定期的に書き込めるようにしたいのです。利用可能な 128kB の SRAM のうち約 50k を占める 3 つの大きなアレイがありますが、必要以上にフラッシュが桁違いに多くなっています。const を宣言せずに、これら 3 つの配列を強制的に FLASH にするにはどうすればよいですか? ところで、IARを使用しています。

__no_init キーワードを使用してみました。リンカー マップ ファイルによると、これは効果がありませんでした。

4

4 に答える 4

6

元の質問に答えるために、リンカー スクリプトを記述して、任意の変数を強制的にメモリの所定の領域に配置することができます (変数を宣言しても、コンパイラはそれを FLASH に配置することを強制constされません。これは単なる強い提案です)。

一方、フラッシュが過剰であること自体は、非constアレイをフラッシュに保持する正当な理由にはなりません。理由には次のようなものがあります: 1) チップによっては、FLASH メモリへのアクセスが RAM アクセスよりもはるかに遅くなる場合があります (特に書き込みの場合) 2) FLASH は限られた回数しか書き換えることができません。ただし、コードが常に FLASH メモリを書き換えている場合は、すぐに破棄してしまう可能性があります。3) FLASH への書き込みには特別な手順があります (ARM では簡単ですが、RAM への書き込みほど単純ではありません)。

于 2013-09-09T17:39:37.957 に答える