RENESAS TOOL NEWS 2004年06月01日 : RSO-Translation Helper-040601D
Translation Helper
日本語版
ご使用上のお願い
|
ソース移植用補助ツールTranslation Helperの使用上の注意事項を連絡します。
- H8/300HシリーズおよびH8SファミリからM16Cファミリへソース変換する場合の注意事項
- 該当製品
Translation Helper V.1.0.00 ~ V.1.2.00
- 内容
Translation Helperでソースを変換することによって呼び出される場合がある set_iflag, get_iflag, およびbtsts関数の定義に誤りがあります。
- 2.1 発生条件
- 以下の条件をすべて満たす場合に、誤りのある関数が呼び出されます。
| (1) |
変換前のソースにset_imask_ccr, get_imask_ccr, およびtas関数のいずれかを含む。 |
| (2) |
Translation Helperで(1)の関数の変換を実行する。
Translation Helperは、発生条件(1)の関数を次のとおり変換します。
- set_imask_ccrをset_iflagに変換
- get_imask_ccrをget_iflagに変換
- tasをbtstsに変換
|
- 2.2 発生例
-
---------------------------------------------
void func(void)
{
unsigned char uc;
uc = 1;
set_imask_ccr(uc); // 発生条件(1)
uc = get_imask_ccr(); // 発生条件(1)
tas(&uc); // 発生条件(1)
}
---------------------------------------------
- 対応策
Translation Helperにより生成されたM16C用High-performance Embedded Workshopプロジェクトディレクトリ内のヘッダファイルH8toM16C.hを以下のように修正してください。
- 3.1 set_iflag関数の定義(63行目から71行目)
修正前:
------------------------------------------------------------------------
63: _set_iflag .macro
64: .local L1,L2
65: and.w #1,R0
66: jc L1
67: fclr I
68: jmp L2
69: L1: fset I
70: L2: ;
71: .endm
------------------------------------------------------------------------
修正後:
------------------------------------------------------------------------
63: _set_iflag .macro
64: .local L1,L2
65: and.b #1,R0L ; "and.w #1,R0"を"and.b #1,R0L"に修正する。
66: jnz L1 ; "jc"を"jnz"に修正する。
67: fclr I
68: jmp L2
69: L1: fset I
70: L2: ;
71: .endm
------------------------------------------------------------------------
- 3.2 get_iflag関数の定義(72行目から76行目)
修正前:
------------------------------------------------------------------------
72: _get_iflag .macro
73: stc FLG,R0
74: shl.w #6,R0
75: and.w #1H,R0
76: .endm
------------------------------------------------------------------------
修正後:
------------------------------------------------------------------------
72: _get_iflag .macro
73: push.b R0H ; R0Hの退避命令を追加する。
74: stc FLG,R0
75: shl.w #-6,R0 ; "6"を"-6"にする。
76: and.w #1H,R0
77: pop.b R0H ; R0Hの復帰命令を追加する。
78: .endm
------------------------------------------------------------------------
-
| 3.3 |
btsts関数の定義を削除します。この定義を削除すると、
tas関数呼び出しの変換結果であるbtsts関数呼び出しがリンクエラーになります。
tas関数は、H8/300シリーズまたはH8Sファミリのコンディションコードレジスタを変更します。
したがって、Translation Helperはtas関数を一意の関数に変換できません。
tas関数の変換は、お客様自身で解決して頂くようお願いします。 |
(1) btsts関数のプロトタイプ宣言(44行目)を削除します。
修正前:
------------------------------------------------------------------------
44: static void btsts(unsigned char*);
------------------------------------------------------------------------
修正後:
------------------------------------------------------------------------
44: /* static void btsts(unsigned char*); */
------------------------------------------------------------------------
(2) btstsのプラグマ指令(49行目)を削除します。
修正前:
------------------------------------------------------------------------
49: #pragma __ASMMACRO btsts(A0)
------------------------------------------------------------------------
修正後:
------------------------------------------------------------------------
49: /* #pragma __ASMMACRO btsts(A0) */
------------------------------------------------------------------------
(3) btsts関数の定義(60行目~62行目)を削除します。
修正前:
------------------------------------------------------------------------
60: _btsts .macro
61: btsts [A0]
62: .endm
------------------------------------------------------------------------
修正後:
------------------------------------------------------------------------
60: ;_btsts .macro ; この行を含め3行をコメントアウトする。
61: ; btsts [A0]
62: ; .endm
------------------------------------------------------------------------