RENESAS TOOL NEWS 2004年11月16日 : RSO-M3T-MR32R_1-041116D
M3T-MR32R ご使用上のお願い
-- ランデヴ呼び出し、ランデヴ受付、および可変長メモリを獲得するタスクを
強制待ち状態に移行させる場合の注意事項 --
|
M32Rファミリ用リアルタイムOS M3T-MR32Rの使用上の注意事項を連絡します。
- ランデヴ呼び出し、ランデヴ受付、
および可変長メモリを獲得するタスクをisus_tskシステムコールで強制待ち状態に移行させる場合の注意事項
- 該当製品
M3T-MR32R V.3.00 Release 1 ~ M3T-MR32R V.3.50 Release 2
- 内容
発生条件を満たす場合、isus_tskシステムコールの対象タスクが2重待ち状態に移行しません。
- 発生条件
以下3点の条件をすべて満たす場合に発生します。
| (1) | あるタスクから以下のいずれかのシステムコールを発行する。
acp_por, tacp_por, cal_por, tcal_por, get_blk, およびtget_blk
これらを発行したタスクは待ち状態に移行する。 |
| (2) | (1)で示したシステムコール実行中に起動した割込ハンドラ内でisus_tsk
システムコールを発行する。 |
| (3) | (2)で発行したisus_tskシステムコールの対象タスクが、(1)で示した
システムコールを発行したタスクである。
|
- 回避策
次のいずれかの方法で回避してください。
| (1) | システムコールacp_por, tacp_por, cal_por, tcal_por, get_blk, および
tget_blkの発行前後で割込禁止と割込許可を実施してください。
例
-----------------------------------------------------
void task(INT stacd)
{
. . . . . . . . . . . . . . .
/*割込禁止処理*/
asm(" mvfc R0,PSW\n"
" and3 R0,R0,#0xFFBF\n"
" mvtc R0,PSW\n");
ercd = cal_por((VP)msg,&size,ID_por2,0x1,7);
/*割込許可処理*/
asm(" mvfc R0,PSW\n"
" or3 R0,R0,#0x0040\n"
" mvtc R0,PSW\n");
. . . . . . . . . . . . . . .
}
-----------------------------------------------------
|
| (2) | 次の手順でタスクを強制待ち状態にしてください。
- ista_tskシステムコールを発行して、強制待ち状態にするタスクを起動する。
- 上記のタスクからsus_tskシステムコールを発行する。
例
-----------------------------------------------------
void handler(void)
{
. . . . . . . . . . . . . . .
/* isus_tskをコメントアウトして、ista_tskで強制待ち状態にする
タスクを起動します。
対象タスクIDは、起動コードとしてista_tskに渡します。 */
/* isus_tsk( ID_task1 ); */
ista_tsk( ID_DoSuspend,(INT)ID_task1 );
. . . . . . . . . . . . . . .
}
void DoSuspend(INT tskid)
{
sus_tsk(tskid);
}
----------------------------------------------------- |
- 恒久対策
次期バージョンで改修する予定です。