問題タブ [flash-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
caching - フラッシュから RAM にコードをコピーした後にデータ キャッシュをフラッシュする必要がある理由は何ですか?
組み込みシステムでは、ボードの初期化とイメージのロードに使用されるブートローダー。通常、ブートローダは第 1 段階で noflash で実行され、自身 (.txte+.date コード) をフラッシュから RAM にコピーしてから、RAM 実行コードにジャンプする必要があります。
私の質問は: フラッシュから RAM にコードをコピーしてキャッシュを有効にする場合、データ キャッシュをフラッシュして命令キャッシュを無効にする必要がありますか? uboot と他のブートローダーがこの操作を実行することがわかりましたが、そうしなくてもシステムは正常に起動できます。コードをフラッシュから RAM にコピーした後にデータ キャッシュをフラッシュしなければならない理由は何ですか?
stm32 - stm32f4 での書き込みサイクルが非常に少ない
私は STM32F401VCT6U 「ディスカバリー」ボードを使用しており、ユーザーが実行時にメモリにアドレスを書き込む方法を提供する必要があります。
次の関数に簡略化できるものを書きました。
上記で、address
はベースアドレス、values
は少なくともcount
メモリに書き込むバイトと書き込むバイト数を含むサイズのバッファですcount
。
さて、私の問題は次のとおりです。上記の関数がaddress
フラッシュ内のベースで呼び出されcount=100
、最初の数回は正常に動作し、渡されたvalues
バッファがフラッシュに書き込まれます。ただし、これらの最初の数回の呼び出しの後、私はもう値を書き込むことはできません: フラッシュの値のビットをリセットすることしかできません。任意の値への 0x00 は成功します (ただし、後でアドレスに他の値を書き込むことはできません)。
base を変更することで、フラッシュ内の他のアドレスに正常に書き込むことができますがaddress
、これも数回 ( を使用して 2 回または 3 回呼び出しますcount=100
) だけです。
この動作は、フラッシュの最大書き込み回数に達したことを示唆していますが、それほど高速になるとは思えません。枯渇する前に、少なくとも10,000回の書き込みが予想されます。それで、私は何を間違っていますか?
c - C言語でSTM32L1シリーズのカスタムブートローダーを書く
組み込みカード STM32L152RE のブートローダーを C で書いています。このブートローダーは、USART でメッセージが送信されるときに呼び出されます。割り込みを呼び出し、メッセージが受信されると、ブートローダーが実行されます。次に、コンピューターによって USART に送信された新しい HEXA コードでカードのメモリをフラッシュし、リセットする必要があります。
この時点で、ブートローダーは割り込みに応答し、コンピューターから送信されたフレームを読み取ることができます。
メモリをフラッシュする方法がわかりません。私のライブラリには、FLASH_Unlock(void)、FLASH_ErasePage(uint32_t Page_Address)、FLASH_FastProgramWord(uint32_t Address, uint32_t Data) のような関数があります。
フラッシュを消去する必要がありますが、ブートローダーがある部分は消去しません。そのため、このようにリンカー記述子に新しいセクションを作成しました
私の記憶は次のように整理されています:MEMORY
私の質問は、新しいプログラムでフラッシュを消去するときに、ブートローダーがそれ自体を消去しないようにするにはどうすればよいか、また、USART から送信された HEXA コードでフラッシュを適切にフラッシュするにはどうすればよいかということです。
c++ - C++ を使用してフラッシュ メモリ STM32F4 HAL に文字を格納するにはどうすればよいですか?
だから私はバッファを持っています:
次のメソッドを使用して、これをフラッシュ メモリに書き込むことができます。
の定義HAL_FLASH_Program
は次のとおりです。
それは完璧に機能します。代わりに char または int を保存する方法はありますか?
c++ - 読み取り元のメモリ アドレスが空かどうかを C++ で確認するにはどうすればよいですか?
そのため、組み込みシステムでは、フラッシュ メモリにいくつかの整数を読み書きしています。私はこの関数でそれを読むことができます:
それから
buff[5]
が空 (上に何かがある) かどうかを知るにはどうすればよいですか?
今、空のアイテムで、私はこのようなものを手に入れ165 '¥'
ます255 'ÿ'
それを見つける方法はありますか?
file - stat()/fstat() 関数は最終的にファイルを開いて属性を取得しますか?
stat()
私のプログラムには、フラッシュ ストレージ内のファイルの属性を取得するために頻繁に呼び出す関数があります。電源を切って再起動すると、ファイルの内容が失われることがあります。stat()
Linux カーネルでファイル システム ドライバーが最終的に呼び出されることに気付きました。
私の質問は次のとおりです。Linux カーネル fs はファイルを開くか、ファイル属性を取得するためにファイルを読み取りますか? stat() または fstat() 中に電源をオフにすると、フラッシュ内のファイルが破損する可能性はありますか?
linux - JFFS2 ファイルシステム、実際のファイル サイズと一致しないストレージ使用量
spi-nor チップを使用し、JFFS2 fs として 16M パーティションを 1 つ作成しました。14M のストレージを使用する必要があるという奇妙なことがわかりましたが、df を使用して確認すると、7M しか使用されていないことが示されます。
別の 2M ファイルをこのパーティションにコピーした後:
1M 以上のストレージしか使用されていないことがわかります。
この問題も見つかった人はいますか?
ありがとう、