いくつかの機能を提供する ROM マスクを作成する必要があります。ただし、ファームウェアのパッチを提供するための関数を上書きできる必要があります。したがって、パッチ テーブルは、後のファームウェア アップグレードによって上書きされる可能性があるフラッシュ メモリに配置する必要がありますが、ファームウェアの主要部分はマスク ROM に配置され、後で変更することはできません。
これがどのように行われるか誰にも分かりますか?パッチ テーブルを作成するベスト プラクティスは何ですか?
パッチ テーブル - 基本的に、ROM には RAM (フラッシュ) アドレスへのジャンプがもう 1 つ組み込まれています。フラッシュは、元のコードに戻るための ROM ジャンプ呼び出しの直後に、常に何らかのジャンプで場所に戻ります。プログラムの動作を RAM から変更できるようになりました。もちろん、これはRAMからコードを実行できることを前提としています。そうでない場合は、その場で変更できるのはデータ テーブルのみです。
現在、起動時に単一のジャンプを行うだけで、バージョン番号やその他のグローバル/定数データなどの開始状態コードを変更できますが、それだけでは不十分な場合があります. コードに「頻繁に」実行されるフラッシュへの別のジャンプを追加して、実行後にプログラムの状態を更新できるようにすることもできます-vblankまたはアプリケーションループのように。
上記は、リリースから時間の経過とともに変更されたデータを変更したり、わずかな論理エラーを修正したりするのに十分な余裕を与えるはずですが、変更関数を卸売りすることはできません。そのためには、さらにコードが必要です。より多くのコードは、使用できる RAM の量に依存します。
たとえば、十分な RAM があり、Flash RAM から実行してもパフォーマンスがそれほど損なわれない (そして許容される) 場合、起動時に主要な ROM 関数をすべて RAM にコピーし、RAM パッチを呼び出すことで、非常に柔軟にすることができます。これにより、RAM パッチの別の場所に保存された新しいコードが、以前にコピーされたコードを上書きできるようになります。このアプローチを採用した場合は、元の関数の周りに余分なスペースを残して、新しいパディングされた関数が少し成長できるようにする必要もあります。RAM にコピーする元のコードは、ROM スペースを節約するために圧縮して保存することもできます。これにより、事後に何かを変更することができます。また、他の何かが RAM への書き込みを許可されている場合にコードを悪用する非常に簡単な方法も導入するため、注意してください。
お役に立てれば。