MESC TOOL NEWS:
MESCT-CC32R-010301D
M32Rファミリ用クロスツールキットCC32Rの使用上の注意事項を連絡します。
- ロードモジュールコンバータlmc32Rが作成するSフォーマットファイルに関する注意事項
- 該当製品
CC32R V.1.00 Release 1 ~ V.3.00 Release 1
- 内 容
ロードモジュールコンバータlmc32Rが作成したSフォーマットファイルに誤った内容が出力され、ROMライタ等でチェックサムエラーが発生する場合があります。
- 発生条件
- 以下3点の条件をすべて満たす場合に発生する可能性があります。
- (1) 50バイト以上連続するchar型の静的初期化データを記述している。
- (2) ひとつのソースファイル上に、(1)のデータが、合計248バイト以上存在する。
- (3) lmc32R実行時に、次のオプションを両方ともに指定している。
- (a) -d で、出力ファイルを2つ以上に分割している。
- (b) -W で、分割時のサイズ単位を2バイトに指定している。
- [補足]
- CC32Rは、char型の静的初期化データをひとつに結合し、250バイト以内のブロックに再編成してオブジェクトモジュールおよびロードモジュールに出力します。
ただし、条件(1)のような大きな連続データは、250バイトのブロックをまたいで配置される場合があります。このとき、ブロックの境界アドレスが奇数であり、かつ、このようなデータを2バイト単位で複数のSフォーマットファイルに振り分けるとき、今回の現象が発生します。
SフォーマットファイルをROMライタ等に入力したときにチェックサムエラーが発生する場合は、上記の条件に該当している可能性があります。
- 3.1 発生例
[ソースファイル例 test.c]
-----------------------------------------------------------------------
/* str1, str2 には、比較的長い初期化文字列がある: 発生条件(1) */
/* str1, str2 を合計すると 248バイト: 発生条件(2) */
/* (バイト数は、文字列末尾の'0'を含んでいます。) */
char str1[] =
"Copyright 2001 MITSUBISHI ELECTRIC CORPORATION " /* 50 bytes */
"AND MITSUBISHI ELECTRIC SEMICONDUCTOR SYSTEMS CORP" /* 100 bytes */
"All Rights Reserved. "; /* 150 bytes */
char str2[] =
"CC32R Compiler for M32R Family V.3.00 Release 1 " /* 50 bytes */
"AS32R Assembler for M32R family V.3.00 Release 1"; /* 99 bytes */
-----------------------------------------------------------------------
[CC32Rのコマンド操作例(%はプロンプトを表します)]
-----------------------------------------------------------------------
% cc32R -c test.c
% lnk32R -o test.abs -SEC D=20000 test.mo
% lmc32R -d 2 -W 2 test.abs ※発生条件(2)
-----------------------------------------------------------------------
この操作により、Sフォーマットファイル"test.m20", "test.m21"が作成されます。
"test.m21"のデータに誤りがあるため、このファイルをROMライタ等に入力した場合にチェックサムエラーが発生します。
- 回避策
本内容を改修したlmc32Rをこちらからダウンロードしてください。
- [ご注意]
- チェックサムエラーが発生した箇所は、誤ったデータが出力されています。
テキストエディタ等でSフォーマットファイル中のチェックサムを書き換えても本問題は解決できませんのでご注意ください。
- 恒久対策
本内容は、次期バージョンアップの際に改修する予定です。