RENESAS TOOL NEWS 2008年09月01日 : 080901/tn5
M16CファミリM16Cシリーズ用リアルタイムOS M3T-MR30/4 の使用上の注意事項を
連絡します。
- タイムアウト値および遅延時間の設定に関する注意事項
1. 該当製品
M16Cシリーズ用M3T-MR30/4 V.4.00 Release 00およびV.4.00 Release 01
M16Cシリーズは、M16C/60, /50, /30, /20, /10, /TinyおよびR8C/Tiny
シリーズの総称です。
2. 内容
タイムアウト値もしくは遅延時間として32768以上の値を設定した場合、
設定した時間より早くタイムアウトする場合があります。
3. 発生条件
以下の条件をすべて満たす場合に発生することがあります。
(1) タイムアウト待ちもしくは時間経過待ち状態のタスクが複数存在する。
(2) (1)項のタスクのうち、タイムアウト値もしくは遅延時間として32768
以上の値を設定しているタスクが1つ以上ある。
4. 回避策
アラームハンドラと永久待ちのサービスコールを組み合わせて、同等の機能を
実現してください。
タイムアウト値として60000を設定している場合の発生例と回避例を
以下に示します。
発生例:
---------------------------------------------------------
void task1(VP_INT exinf)
{
ER ercd;
. . . . . . . . . . . . . . . . . . . . . . . . . . .
twai_sem(ID_SEM1,60000);
:
}
---------------------------------------------------------
回避例:
---------------------------------------------------------
void task1(VP_INT exinf)
{
ER ercd;
. . . . . . . . . . . . . . . . . . . . . . . . .
/* 60秒後にセマフォ待ちが解除されるように、
アラームハンドラの動作を開始 */
sta_alm(ID_alm1,60000)
ercd = wai_sem(ID_SEM1);
if( ercd == E_OK ){
/* セマフォを獲得後、アラームハンドラの
動作を停止 */
stp_alm(ID_alm1);
}
. . . . . . . . . . . . . . . . . . . . . . . . . . .
}
void alm1(VP_INT exinf)
{
/* 設定時間が経過するとセマフォ獲得待ちを強制解除 */
irel_wai(ID_task1);
}
---------------------------------------------------------
5. 恒久対策
次期リビジョンアップで改修する予定です。