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

杉本明加 asuka.choronos @ gmail.com
2012年 1月 18日 (水) 00:08:49 JST


こいさんさん

杉本です。

DEF_EPRIはSSPで導入した実行時優先度を定義するための静的APIです。

タスクに対してDEF_EPRIで実行時優先度を指定しておくと、タスクが
最初に実行状態になった時にCRE_TSKで指定したタスク優先度では
なくDEF_EPRIで指定した値がタスク優先度に設定されます。

DEF_EPRIを使うと異なるタスク優先度を持つタスクに対して実行時に
同一のタスク優先度を設定できます。

これはタスク間の排他に用いたり(SEK/VDXやAUTOSAR OSでいう内部リソースと
同様の振る舞いと)、異なるタスク優先度を設定した(むしろSSPではそのように
しか指定できませんが)タスク間でスタック領域を共有することができます。


実行時優先度の指定をどのように行うかはCRE_TSKを拡張する
方法などいくつか検討しましたが、他のカーネルとの互換性を考慮し
新たに静的APIを追加することとしました。

以上、よろしくお願いします。


2012年1月17日17:54 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
>  こいさんです
>
>  SSPの DEF_EPRI とは何でしょうか。CPU例外が発生したときの優先度のように見えるのですがよくわかりません。doc/*.txtにも特に記述がありません。
>
>  sample1.cfgには以下のような記述があります。
> CRE_TSK(TASK3 , { TA_NULL , 3 , task , TASK3_PRIORITY , STACK_SIZE , NULL
> });
> DEF_EPRI(TASK3 , { TASK3_EXEPRIORITY });
>  sample1.hで優先度の定義は
> #define INIT_PRIORITY (1)
> #define MAIN_PRIORITY (2)
> #define TASK1_PRIORITY (3)
> #define TASK2_PRIORITY (4)
> #define TASK3_PRIORITY (5)
> #define TASK3_EXEPRIORITY (4)
>  です。
>
>  cfgで作成された、kernel_cfg.cは以下のようになっています。
>
> const uint_t   _kernel_tinib_epriority[TNUM_TSKID] = {
> INT_PRIORITY(1),INT_PRIORITY(2),INT_PRIORITY(3),INT_PRIORITY(4),INT_PRIORITY(4)
> };
>
>
>  TASK3の優先度は5になって欲しい気がしています。
>  DEF_EPRI(TASK3 , { TASK3_EXEPRIORITY });が関連しているのでしょうか。
>  以上
>