それはすべて、アプリケーションの重要度に依存します。2 つの基本的なアプローチ (バックアップとブートローダー) が組み合わされることもあります。
多くのシステムには、読み取り専用のブートローダー ( redboot など) と、2 つのバンクのフラッシュ メモリ (ほとんどの場合、同じチップ上) があります。ブートローダには、ブートするバンクを選択するためのフラグがあります。フラグは、アップグレード (失敗または成功) などのイベントに基づいて変更されます。
そのため、アップグレード時に、実行中のバージョンは新しいロードをバックアップ バンクにコピーし、チェックサムをチェックし、ブート フラグを切り替えてから、デバイスを再起動します。デバイスは、新しい負荷で新しいバンクで再起動します。再起動後、新しいロードは自身をバックアップ バンクにコピーできます。
多くの場合、ハードウェア リセット付きのウォッチドッグ タイマーもあります。このようにして、ファームウェアが異常になった場合、ウォッチドッグのキックに失敗し、ハードウェアのリセットによってデバイスが再起動され、ブートローダーが正常なロードを探します。
Open Mesh プロジェクトは、このアプローチの良い例です。