ROMのチェックサム(CRC)のテストプログラムを作成しました。また定数(const)と変数初期値のメモリ配置について調べました。以下の資料を参考にしています。
CRCの比較
マイコンのプログラムが壊れていないかを確認するために、ビルド時に作成したCRCと、マイコンで計算したCRCを比較します。
ここでは セクション .textと.textfの範囲のCRC値を計算します。CRC値の出力アドレスは、0x03DFEとしています。
CC-RLの設定
CRCを計算するために、CC-RLのヘキサ出力オプションで設定します。
1) CRC値の出力アドレス
0x03DFEとしました。(ROMが16KBであり、 デバック用のモニタプログラム(.monito2)が0x03E00~0x03FFFを占有しているため)
2) 計算範囲
セクション .textと .textf としました。
3) 演算方式
(汎用CRC}を選択します。
4) 初期値
初期値は0x0000としました。
5) CRC演算結果と出力アドレス表示
「はい」とすることで、ビルド後に表示されます。
6) CRC値をソースファイルに転記します。
CRCテストプロラムと動作確認
汎用CRCで計算したCRCと、ビルド時のCRCが一致すれば、 rom_crc_16_err = 0となります。CRCが不一致の場合、rom_crc_16_err = 1 となり、ALM LEDが点灯します。
(注: デバック時にソフトウェアブレークを入れると、コードが変わるためCRCが一致しません。ブレークせずに実行するか、ハードウェアブレークで確認します。)
CRCを計算するrom_crc_chk ()はアセンブラ(インラインアセンブラ)です。
CRC演算機能 (資料1 「20.3.1 CRC 演算機能(汎用CRC)」)を使用しています。
定数(cosnt)と変数初期値の配置アドレス
const宣言された定数は、ROMのアドレス0x00800より入っています。
またミラー領域(0xF0800~0xF3FFF)に反映されています。
初期値付きグローバル変数の初期値は、ROMのアドレス0x00080より入っています。
また、RAMのアドレス0xFF700にも格納されています。(スタートアップルーチンでコピー)
マップファイルでセクションとアドレスを確認できます。
ROM書き込み用のファイル
フラッシュプログラマ等でROMに書き込む際のファイル形式は、デフォルトでは「モトローラ S形式」となっています。ビルド後にCS+で見ることができます。
作成されたモトローラS形式のファイルの内容です。書き込みアドレスとデータが確認できます。
ファイル一覧
登録場所: https://github.com/vABCWork/rl78_test_crc
・開発環境
無償評価版 CS+ for CC V8.11.00 [30 Nov 2023]
CC-RL V1.13.00
*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10 2023.08
*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13 2023.12
*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」Rev.2.30 2022.04
*4:資料4「RL78ファミリ用Cコンパイラパッケージ(CC-RL) アプリケーションガイド プログラミング・テクニック編」Rev.1.0 2018.11.26
*5:資料5「ダウンロードした.hexファイルのCRC演算期待値が異なる [RL78]」 https://ja.na4.teamsupport.com/knowledgeBase/17796205