RENESAS TOOL NEWS 2006年05月16日 : RSO-M3T-MR30-060516D
リアルタイムOS M3T-MR30 ご使用上のお願い |
M16C/60, M16C/30, M16C/20, M16C/10および M16C/Tinyシリーズ用リアルタイムOS M3T-MR30K
およびM3T-MR30Sの使用上の注意事項を連絡します。
- 該当製品
M3T-MR30K V.1.00 Release 1 ~ V.3.30 Release 2
M3T-MR30S V.1.00 Release 1 ~ V.3.30 Release 2
- 内容
iwup_tskシステムコールを発行した場合、正常終了したにもかかわらずエラーコードE_OKを返さない場合があります。
- 発生条件
以下の(a)または(b)の条件をすべて満たす場合に問題が発生します。
| (a) |
|
V.1.00 Release 1 ~ V.3.30 Release 1 を使用している場合
| (1) |
|
iwup_tskシステムコールの対象タスクが、slp_tskまたはtslp_tskシステムコールによる待ち状態である。 |
| (2) |
|
上記のタスクと同じ優先度で、READY状態またはRUN状態のタスクが存在する。 |
|
| (b) |
|
V.3.30 Release 2 を使用している場合
上記の(a)の2つの条件に加えて、以下の条件を満たしている。
(1) |
|
コンフィグレーションファイルのシステム定義項目において"timeout = YES;"の記述がある。 |
|
| 3.1 |
|
発生例
以下のソース記述では、通常はID番号1のタスクが起動されてエラーコード E_OKを返すため、error関数は実行されません。
しかし発生条件3(a)または3(b)を満たした場合は、ID番号1のタスクが起動されてもE_OKを返さないので、error関数が実行されます。
-----------------------------------------------
if( iwup_tsk( 1 ) != E_OK ){
error("Error\n");
}
----------------------------------------------- |
- 回避策
以下のとおり、エラーコードがE_QOVRまたはE_OBJではない場合は、そのエラーコードはE_OKである、と判断する記述を追加してください。
---------------------------------------------------
ercd = iwup_tsk(1);
if( (ercd == E_QOVR) || ( ercd == E_OBJ) ){
error("Error\n");
}
---------------------------------------------------
- 恒久対策
次期バージョンアップで改修予定です。