私はSTM32F411REを使用しています。 私はRAMにメモリがなくなったので私は大きな変数を私のフラッシュに保存することに決めました。そのために私はsection.ld
にセクションを作成しました。 main.c
ファイルでSTM32、フラッシュに格納された変数を他のファイルで更新できませんでした
.large_buffer: ALIGN(4)
{
. = ALIGN(4) ;
*(.large_buffer.large_buffer.*)
. = ALIGN(4) ;
} >FLASH
、私は次のように変数を宣言:
uint8_t buffer[60 * 200] __attribute__ ((section(".large_buffer"), used));
この時点で、すべてがOKであるバッファがRAM(BSS)にストックされていない、私はそれにアクセスすることができますし、それを書き直す。
buffer[25] = 42;
printf("%d\n", buffer[25]); // 42
問題は、他のファイルから変数を編集するときに発生します。
main.c
uint8_t buffer[60 * 200] __attribute__ ((section(".large_buffer"), used));
int main()
{
myFunc(buffer);
}
other.c
myFunc(uint8_t* buffer)
{
buffer[25] = 42;
printf("%d\n", buffer[25]); // 0
}
buffer
別のファイル(パラメータとして渡された)に変更することはありません。
私は何かを見逃しましたか?
ありがとうございます。フラッシュメモリに格納されているバッファ(しばしばR/Wである必要がある)は良い解決策ですか? – Epitouille
私は実行可能な解決策としてこれをお勧めしません、まず最初にフラッシュを書き込むことができるようにRAMを保存する必要があるということです。書き込み/消去は読み出しよりもはるかに遅く、RAMの書き込み/消去のフラッシュに比べて時間がかかります。さらに、消去サイクル数には限界があります。通常は100kサイクル程度です。 – koper89
はい問題を理解しています。この時点で、私はラムを救うことができないために立ち往生しています。何が解決策になりますか?適切な最適化は何ですか? – Epitouille