RENESAS TOOL NEWS 2005年07月16日 : RSO-M3T-MR308-050716D
リアルタイムOS
M3T-MR308およびM3T-MR30
ご使用上のお願い |
M16Cファミリ用リアルタイムOS M3T-MR30およびM3T-MR308の使用上の注意事項を連絡します。
- DORMANT状態に移行中のタスクに対してisus_tskシステムコールを発行する場合の注意事項
- 該当製品
M32C/90, M32C/80, M16C/80 およびM16C/70シリーズ用:
M3T-MR308 V.1.00 Release 1 ~ M3T-MR308 V.1.20 Release 1B
M16C/60, M16C/30, M16C/Tiny, M16C/20 およびM16C/10シリーズ用:
M3T-MR30 V.1.00 Release 1 ~ M3T-MR30 V.3.30 Release 1
- 内容
ext_tskシステムコールによってDORMANT状態に移行中のタスクに対して、isus_tskシステムコールが発行された場合、以下いずれかの現象が発生する場合があります。
そのため、以後システムが正常に動作しない場合があります。
| (1) |
isus_tskの戻り値としてE_OBJが返されず、E_OKが返される。 |
| (2) |
ext_tskが発行されたタスクと同一優先度で、実行可能状態にあるタスクが、 実行可能状態のままレディキューからはずされ、カーネル管理データに矛盾が発生します。 |
- 2.1 発生条件
- 以下の条件をすべて満たす場合に発生することがあります。
| (1) |
割り込みハンドラ、アラームハンドラ、または周期起動ハンドラからisus_tsk システムコールが発行された。 |
| (2) |
isus_tskの対象タスクは、DORMANT状態に移行する可能性のあるタスクである。 |
| (3) |
isus_tskを発行したハンドラは、ext_tsk処理中に発生した割り込みによって 起動された。 |
| (4) |
isus_tskの対象タスクにおいて(3)のext_tskシステムコールが発行された。 |
-
回避策
以下の例のようにisus_tskが発行されるタスクを無限ループで処理し、 ext_tskによってDORMANT状態にならないようにしてください。
例
---------------------------------------------------------
void task1(INT stacd )
{
. . . . . . . . . . . . . . . . . . . . . . . .
while(1){
/* タスク処理 */
. . . . . . . . . . . . . . . . . . . . . . . .
}
}
void inth(void)
{
. . . . . . . . . . . . . . . . . . . . . . . .
isus_tsk(ID_task1);
. . . . . . . . . . . . . . . . . . . . . . . .
}
---------------------------------------------------------
- 恒久対策
M3T-MR30は、次期バージョンで改修する予定です。
M3T-MR308は、M3T-MR308/4 V.4.00 Release 00で改修済みです。
M3T-MR308/4 V.4.00 Release 00へのバージョンアップについては、2005年7月1日発行のツールニュースを参照ください。