(toppers-users 3781) Re: SSPの DEF_EPRI とは何でしょうか。
Hiroaki TAKADA
hiro @ ertl.jp
2012年 1月 19日 (木) 14:47:51 JST
こいさん
実行時優先度は、起動時優先度よりも高い(値が小さい)か同じでなければ
なりません。(そうでないと、E_PARエラーになるはず)
> 現行のSSPのCFGで以下の設定をすると、優先度反転が発生します。これは良い
> のでしょうか。
> TASK3が動作中にTASK4はTASK3より優先度が高いのに起動できません。
これはこういう意図です。実行時優先度を設定したということは、それ以下の
起動時優先度のタスクは動いてくれるなという意味です。これによって、スタ
ック領域が少なくてすむわけです。
優先度を2つ持っているように見えるというのは、ご指摘通りかもしれません。
高田広章
名古屋大学
(12/01/19 10:59), koizumi yoshiyuki wrote:
> 高田先生
> こいさんです。表現は色々有ると思いますが、私にはSSPは優先度を2つ持って
> いるように見えています。
> 2つの優先度は _PRIORITY >_EXEPRIORITY 設定されてる必要が有るでしょ
> う。これは解りにくいケースもあると思います。
> 同じようなケースが(私にはある意味、同じように見えています)Cortex-M3
> の割り込み優先度に見られます。ここでは優先度を上位/下位の2つに分け、上位
> 側で横取り割り込み優先度とし、下位側は等優先度内(制約タスク相当)の優先
> 度としています。外からは優先度は一つしかないので優先度設定の混乱を避ける
> ことができていると思います。
> 尚、
> 現行のSSPのCFGで以下の設定をすると、優先度反転が発生します。これは良い
> のでしょうか。
> TASK3が動作中にTASK4はTASK3より優先度が高いのに起動できません。
> テストタスクを3つから4つに増やし優先度を以下のように設定する
> sample1.h
> #define INIT_PRIORITY (1)
> #define MAIN_PRIORITY (2)
> #define TASK1_PRIORITY (3)
> #define TASK2_PRIORITY (4)
> #define TASK3_PRIORITY (5)
> #define TASK4_PRIORITY (6)
> #define TASK3_EXEPRIORITY (4)
> #define TASK4_EXEPRIORITY (3)
> sample1.cfgを以下のように記述
> CRE_TSK(INIT_TASK , { TA_ACT , 0 , init_task , INIT_PRIORITY ,
> STACK_SIZE , NULL });
> CRE_TSK(MAIN_TASK , { TA_NULL , 0 , main_task , MAIN_PRIORITY ,
> STACK_SIZE , NULL });
> CRE_TSK(TASK1 , { TA_NULL , 1 , task , TASK1_PRIORITY , STACK_SIZE ,
> NULL });
> CRE_TSK(TASK2 , { TA_NULL , 2 , task , TASK2_PRIORITY , STACK_SIZE ,
> NULL });
> CRE_TSK(TASK3 , { TA_NULL , 3 , task , TASK3_PRIORITY , STACK_SIZE ,
> NULL });
> CRE_TSK(TASK4 , { TA_NULL , 4 , task , TASK4_PRIORITY , STACK_SIZE ,
> NULL });
> DEF_EPRI(TASK3 , { TASK3_EXEPRIORITY });
> DEF_EPRI(TASK4 , { TASK4_EXEPRIORITY });
> CFGで生成されたkernel_cfg.cは以下のようになり、TASK3とTASK4の優先度の
> 反転が発生しています。
> const uint_t _kernel_tinib_epriority[TNUM_TSKID] =
> {INT_PRIORITY(1),INT_PRIORITY(2),INT_PRIORITY(3),INT_PRIORITY(4),INT_PRIORITY(4),INT_PRIORITY(3)};
> 以上
> 2012年1月18日10:30 Hiroaki TAKADA <hiro @ ertl.jp <mailto:hiro @ ertl.jp>>:
>
> 高橋様、皆様
>
> この件に関して、TOPPERS新世代カーネル仕様書に追加予定の文をお送りし
> ます。
>
> -----
> SSPカーネルにおける追加機能として,タスクに対して,実行時優先度の情報を
> 持つ.タスクの実行時優先度は,起動時優先度が異なるタスク間でスタック領
> 域を共有するために,起動時優先度とは異なる優先度でタスクを実行するため
> の機能である.タスクが起動された後,最初に実行状態になる時に,タスクの
> ベース優先度が,タスクの実行時優先度に設定される.
> -----
>
> 仕様書の文ですので、これだけでは導入意図がわかりにくいと思います。
>
> 読みにくい文ですので、お勧めはしませんが、以下に説明があります。
>
> http://www.j-tokkyo.com/2000/G06F/JP2000-132409.shtml
>
> OSEK OSをご存じのであれば、OSEK OSの内部リソースに相当する機能と言った
> 方がわかりやすいかもしれません。
>
> 高田広章
> 名古屋大学
>
> (12/01/18 10:19), 高橋和浩@nifty wrote:
> > MLを拝見させていただいています。
> > アライブビジョンソフトウエアの高橋と申します。
> >
> > SSPについて話が進んでいるようなのですが、少しついていけません。
> > 「実行時優先度」とは何なのか、ちょっとわかりません。
> > ドキュメントに何か書かれたものがございますでしょうか?
> >
> > ssp_spec.txtの
> >
> ----------------------------------------------------------------------
> > ○前提となる文書
> > [1] トロン協会: μITRON4.0仕様, Ver.4.02.00, 2004年.
> > [2] TOPPERSプロジェクト: TOPPERS新世代カーネル仕様書 Release 1.2.0
> > [3] TOPPERSプロジェクト: TOPPERS標準割込み処理モデル, 最終更新:
> 2008年
> > 4月11日.
> > ---------------------------------------------------------------------
> > の[1][2]を見ても「実行時優先度」は見当たりませんでした。
> > #SSPのR8Cのパッケージのデータも確認しましたが見当たりません。
> >
> > [1]で記載がある用語では
> > 起動時優先度
> > ベース優先度
> > 現在優先度
> >
> > かと思いますが、さらに実行時優先度はまた違うものなのでしょうか?
> >
> > よろしくお願いします。
> >
> > すいません
> > (toppers-users 3751) に書かれていることもよくわかりません。
> >
> >> DEF_EPRIを使うと異なるタスク優先度を持つタスクに対して実行時に
> >> 同一のタスク優先度を設定できます。
> > 単純に静的API(DEF_EPRI)で、CRE_TSKの起動時優先度の代わりに、実行
> 時優先度と呼ばれるものが
> > が使われるだけのように思うのですが、たぶんここに誤解があると思っ
> ています。
> >
> >
> >
> > On Wed, 18 Jan 2012 00:08:49 +0900
> > 杉本明加<asuka.choronos @ gmail.com
> <mailto:asuka.choronos @ gmail.com>> wrote:
> >
> >> こいさんさん
> >>
> >> 杉本です。
> >>
> >> 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
> <mailto: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 });が関連しているので
> しょうか。
> >>> 以上
> >>>
> > ---
> > アライブビジョンソフトウエア株式会社
> > 高橋和浩
> > 673-0005兵庫県明石市小久保2-2-7幹線ビル4F
> > Email:takahashi_kazuhiro @ nifty.com
> <mailto:Email%3Atakahashi_kazuhiro @ nifty.com>
> > http://homepage3.nifty.com/ALVS/
>
>