MAEC TOOL NEWS:
MAECT-MR32R_2-010601D
M32Rファミリ用リアルタイムOS MR32Rの使用上の注意事項を連絡します。
- 該当製品
MR32R V.3.20 Release 1~V.3.30 Release 1
- 内容
vref_mbxシステムコールによって返される待ちタスクのID番号が正しくない場合があります。
- 2.1 発生条件
- 以下の条件すべてを満たす場合に発生します。
- (1) vref_mbxシステムコールの引数で指定したID番号のメイルボックスの属性がTA_TPRIである。
- (2) vref_mbxシステムコール処理中に割り込みが発生した。
- (3) (2)で発生した割り込みによって起動されたハンドラからichg_priシステムコールを発行している。
- (4) ichg_priシステムコールによって、タスクの優先度を低い方から高い方へ変更した。
- (5) (4)で優先度を変更されたタスクが待っているメイルボックスIDと、(1)で発行したvref_mbxシステムコールで指定したメイルボックスIDが同一である。
- 回避策
vref_mbxシステムコール処理の前で割り込みを禁止し、システムコール処理の後で割り込みを許可してください。
[例1]割り込みの禁止・許可に、loc_cpu(), unl_cpu()システムコールを使用する例。
---------------------------------------------------------------------
void task(stacd)
{
:
loc_cpu(); /*割り込み禁止処理*/
ercd = vref_mbx(&rmbx,ID_mbx);
unl_cpu(); /*割り込み許可処理*/
:
}
---------------------------------------------------------------------
[例2]asm関数を使用して割り込み禁止・許可を行う例。
---------------------------------------------------------------------
void int_handler(void)
{
:
/*割り込み禁止処理*/
asm(" mvfc R0,PSW\n"
" and3 R0,R0,#0xFFBF\n"
" mvtc R0,PSW\n");
ercd = vref_mbx(&rmbx,ID_mbx);
/*割り込み許可処理*/
asm(" mvfc R0,PSW\n"
" or3 R0,R0,#0x0040\n"
" mvtc R0,PSW\n");
:
}
---------------------------------------------------------------------
- 恒久対策
本内容は、MR32R V.3.40 Release 1で改修しています。
詳しくは、2001年6月1日発行の 「MR32R V.3.40 Release 1 日本語版 バージョンアップのお知らせ」 を参照ください。