(toppers-users 3203) 【ASP】M32Cのprc.tfの不具合

kouta wada kouta.wada @ konicaminolta.jp
2010年 5月 28日 (金) 18:33:19 JST


コニカミノルタ派遣のKota Wadaと申します。

********************************************************
既出の問題かもしれませんが、メーリングリストに
見当たらなかったので、投稿させていただきました。
********************************************************

TOPPERS/ASPのM32C対応を使用し、
R32Cへの移植を行っております。

INT1の割込み属性で立下りエッジを設定しようとして
問題が発生しました。
(本来はIFSRレジスタ制御を追加し、両エッジの設定を拡張しようとしています。
その事前確認としてすでに拡張されている立下りエッジを設定してみました)

その原因がM32C対応のprc.tfの不具合ではないかと判断しています。
解決方法が正しいかどうかの確認をいただきたいと思います。


【現象】
INT1を使用するドライバのcfgファイルにて
 CFG_INT(INTNO_INT1, { TA_ENAINT |  INTATR_INT1, INTPRI_INT1 });

INT1を使用するドライバのヘッダーファイルにて
 #define INTATR_INT1	TA_NEGEDGE

この状態でコンフィギュレーションを行うと
以下のエラーが発生します。
 error: E_RSATR: illegal intatr `TA_ENAINT |  INTATR_INT1' of intno `INTNO_INT1' in CFG_INT

【解析内容・修正方法】
上記エラーはkernel.tfの以下の箇所で発生していました。
$	// intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR)
	$IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|ALT(TARGET_INTATR,0))) != 0$
		$ERROR INT.TEXT_LINE[intno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "intatr", INT.INTATR[intno], "intno", INT.INTNO[intno], "CFG_INT")$$END$
	$END$

しかし、M32Cのプロセッサ依存のテンプレートファイルprc.tfで
割込み属性に拡張がされていますので、問題は発生しないはずです。
 $TARGET_INTATR TA_POSEDGE | TA_NEGEDGE | TA_LOWLEVEL | TA_HIGHLEVEL$


本現象をこちらで解析し、原因と思われるのは、
prc.tf中のkernel.tfのインクルードされている位置です。

kernel.tfインクルードがTARGET_INTATRの定義より上にありますので、
kernel.tfエラー判定箇所でTARGET_INTATRが認識できず
エラーが発生していると思われます。
(実際にALTを外してやるとTARGET_INTATR がnon-valueのエラーとなることを確認しています)


以上より、prc.tfでは、TARGET_INTATRの定義の下の箇所で
kernel.tfがインクルードされるべきではないでしょうか。

この解決方法で問題ないか、ご存知の方おられましたら、
ご回答いただきたいと思います。

以上、よろしくお願い致します。