【TOPPERS】ITRON総合スレ3【NORTi】【HOS】at OS
【TOPPERS】ITRON総合スレ3【NORTi】【HOS】 - 暇つぶし2ch667:654
11/08/11 23:31:02.90 .net
突っ込みどころ満載とか言っていたけど、さらに追加かもしれないが、具体的に書こう。
TOPPERS/FMP1.2 のソース wai_flgの部分だ。
wobj_make_wait();
について、t_acquire_nested_tsk_lock_self()のように、割り込みがあったら戻り値をNULLにして
retryに飛んだらよい。 ということなんだけどな。
つまりwaitQue検索時に適当な割合で割り込み許可と割り込み有無チェックをいれるわけだな。

eventflg.c のline:350~line:371
retry:
t_acquire_obj_lock(&GET_OBJLOCK(p_flgcb));
if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U
&& !queue_empty(&(p_flgcb->wait_queue))) {
release_obj_lock(&GET_OBJLOCK(p_flgcb));
ercd = E_ILUSE;
}
else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) {
release_obj_lock(&GET_OBJLOCK(p_flgcb));
ercd = E_OK;
}
else {
if ((my_p_pcb = t_acquire_nested_tsk_lock_self(&GET_OBJLOCK(p_flgcb))) == NULL){
goto retry;
}
p_runtsk = my_p_pcb->p_runtsk;
p_winfo_flg = (WINFO_FLG *)(&(p_runtsk->winfo_obj));
p_winfo_flg->waiptn = waiptn;
p_winfo_flg->wfmode = wfmode;
p_runtsk->tstat = (TS_WAITING | TS_WAIT_FLG);
wobj_make_wait((WOBJCB *) p_flgcb, p_runtsk);
release_nested_tsk_lock(my_p_pcb);



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch