(toppers-users 3808) Re: SSPの DEF_EPRI とは何でしょうか。

Naoki Saito nsaito.nmiri @ gmail.com
2012年 1月 22日 (日) 00:19:38 JST


こいさんさん

斉藤です.

すいません.勘違いしていました.
私の挙げました事項は問題ないようです.

>> ここまでは良いのですが,run_task の while 判定
>>  /* 戻り先タスクの実行時優先度より高い起動時優先度をもつタスクが起動されたか */
>> } while((!primap_empty()) && (saved_pri > (next_pri = search_schedtsk())));
>>
>> の primap_empty() が true となり,終了しませんか?

この点については,
> (0) カーネルスタート(primap = 2)
> (1) TASK2 実行開始 (run_task でクリアされて primap = 0)
> (2) TASK2 の中から TASK1 起動 (primap = 1)
> (3) TASK1 実行開始 (primap = 0)
> (4) TASK1 終了 (primap = 0)

の後,
(5) run_task 終了 → TASK2 の act_tsk に戻る (primap = 0)
(6) TASK2 終了 (primap = 0)
(7) run_task 終了 (primap = 0)

で,問題なく終了するようです.
と,これだけでは何ですので,自タスクを起動する場合
についても同様に検討しました.が,問題ないようです.

概ね良さそうに見えますね.
さらに見落としがないか,調べてみます.

以上,よろしくお願いします.

2012年1月21日23:48 Naoki Saito <nsaito.nmiri @ gmail.com>:
> 斉藤です.
>
> 間違えました.
>
>> (0) カーネルスタート(primap = 1)
>> (1) TASK1 実行開始 (run_task でクリアされて primap = 0)
>> (2) TASK1 の中から TASK2 起動 (primap = 2)
>> (3) TASK2 実行開始 (primap = 0)
>> (4) TASK2 終了
>
> 正しくは,こうです.
>
> (0) カーネルスタート(primap = 2)
> (1) TASK2 実行開始 (run_task でクリアされて primap = 0)
> (2) TASK2 の中から TASK1 起動 (primap = 1)
> (3) TASK1 実行開始 (primap = 0)
> (4) TASK1 終了
>
> 申し訳ありませんでした.
> 以上,よろしくお願い致します.
>
> 2012年1月21日23:46 Naoki Saito <nsaito.nmiri @ gmail.com>:
>> こいさんさん
>>
>> 斉藤です.
>>
>> キューイングの件,ご提案ありがとうございます.
>>
>>>  タスクの軌道前にprimap_clearをすると、sanple1ではASPと同様にキューイングが実現できているように動作します。
>>
>> 一見すると良いアイディアのように思えるのですが,
>> 例えば 2つのタスクTASK1(ID=1), TASK2(ID=2)があり,
>> TASK1 の方が高優先度とします.
>> そしてシステム起動時には TASK1 が休止状態,
>> TASK2が実行可能状態とします.
>>
>> (0) カーネルスタート(primap = 1)
>> (1) TASK1 実行開始 (run_task でクリアされて primap = 0)
>> (2) TASK1 の中から TASK2 起動 (primap = 2)
>> (3) TASK2 実行開始 (primap = 0)
>> (4) TASK2 終了
>>
>> ここまでは良いのですが,run_task の while 判定
>>  /* 戻り先タスクの実行時優先度より高い起動時優先度をもつタスクが起動されたか */
>> } while((!primap_empty()) && (saved_pri > (next_pri = search_schedtsk())));
>>
>> の primap_empty() が true となり,終了しませんか?
>>
>> 以上,よろしくお願い致します.