フラッシュの整合性についてcrc16チェックを実行する必要があるファームウェアプロジェクトに取り組んでいます。
crcは、IAR Xlinkリンカーを使用して計算され、フラッシュの最後に保持されます。この場合も、crcは実行時にコードから計算され、フラッシュに保存されている値と比較されて整合性がチェックされます。ただし、crcはフラッシュメモリのコードセグメントでしか計算できません。コードに変更を加えるたびに、サイズが変わる可能性があります。現在手動で行っているこのプロセスを自動化できますか?
.xclリンカーファイルから:
// ---------------------------------------------------------
// CRC16 Essentials: -H for fill,-J for checksum calculation
// ---------------------------------------------------------
-HFF
-J2,crc16,,,CHECKSUM2,2=(CODE)5C00-FF7F;(CODE)10000-0x20A13
ここで、2番目のコードセグメントの終了値を変更する必要があります。これは現在0x20A13です。この値は、.mapファイルから取得します。つまり、コードがフラッシュ内に存在するメモリ範囲の量を取得します。これは私が行う最初の変更です。
ここで私はコードから2番目の変更を加える必要があります:
sum = fast_crc16(sum, 0x5C00, 0xFF7F-0x5C00+1);
sum = fast_crc16(sum, 0x10000,0x20A13-0x10000+1);
//Check the crc16 values
if(sum != __checksum)
{
// Action to be taken if checksum doesn't match
}
このプロセスの自動化にご協力ください!!