(toppers-users 3858) Re: SSPのスタックの記述

高橋和浩@nifty takahashi_kazuhiro @ nifty.com
2012年 1月 31日 (火) 10:53:24 JST


斎藤様 MLの皆様
おはようございます。 (前回様が余分にあり失礼しました)
アライブビジョンソフトウエアの高橋です。

Q1.kernel.tfの確認
> > SSPでは、手計算せずに自動的に計算される仕組みがあるように受け取れます。
> > どのように自動化されるのでしょうか?
> 
> kernel.tf の中で タスクの最大スタック使用量を格納する変数として
> max_tsk_stksz がありますので,詳しくはこの変数の値を求める処理を
> ご覧いただくのが早いと思います.
> 具体的には,246行目から331行目までの部分です.
> kernel_cfg.c には処理過程を確認するためのコメントを
> 出力するようにしています.

すいません、これって独自言語ですよね。その独自言語の文法等
読めるようにじっくり勉強したいと思いますが

どの変数が何に出力されるのか結論をざっくり教えていただけませんか?
たぶんどこかにその計算値が出力されるのだろうと推測しますが

TOPPERSの成果物を使うにしても、そういう独自言語も読まないと取り付く島も無い
というわけではないというわけでもないと思いますので。

Q2.実際の指定方法
> > こいさんさんの話によるとどこかにdefineしているのみで、DEF_ICSの静的APIの宣言も
> > されていないようなことが書かれていましたが、これは事実と違うのでしょうか?
> 
> もとのお話は (toppers-users 3840) ですね.
> その中の「DEF_ICS の静的APIの宣言がされていない」というのは
> sample1.cfg に DEF_ICS の記述が存在しないということと思いますので,
> そのご指摘については事実と思います.
> 
> DEF_ICS がコンフィギュレーションファイルに存在しない場合は,
> ターゲット依存部で定義されている DEFAULT_ISTKSZ マクロの
> 値が指定されたものとして処理します.
> kernel.tf の972行目から984行目までが DEF_ICS が存在しない場合の
> 処理となっています.

上記Q1とも同じことを違う聞き方をしているのですが、仕組みが分からないのでどう記述して
いいかわからないので、一見矛盾しているので、事実じゃないのかと質問しました。
上記は、自動的に計算される。一方、固定のdefineの値が使われるというのは矛盾しているように
思うからです。ですが上記回答から、推測するに(また推測しないと理解できない回答だったようです。
理解が悪くてすいません)
1.DEF_ICSが宣言されている場合 --> DEF_ICSの値が使われる。 DEFAULT_ISTKSZが宣言されてもそれは破棄される。
2.DEF_ICSが宣言されていない場合 --> DEFAULT_ISTKSZが共有スタックサイズに使われる。DEFAULT_ISTKSZが未宣言の場合はどこかでエラーになる。
さらに上記の計算値と比較して小さいとどこかでエラーになる。
ということでしょうか?

Q3.設計思想の件その1
> > Q2.設計思想の件その1
> >>> 2.TOPPERSの会員内のレビューで議題にあがっいなかったのでしょうか?
> > は、回答が難しいのでしょうか?
> 
> いえいえ,難しくはありません.
> ご質問にお答え出来ておらずすいませんでした.
> SSP仕様レビューという議題の中で DEF_ICS のレビューの際に
> ついでに議論されました程度で,最初から議題に挙がっていたわけでは
> ありませんでした.

DEF_ICSのレビューのことですよ。
レビューといっても仕様のレビューではなく、実装のコードレビューかなにかですか?
結果的にはレビューしているけど抜けたという感じですか? 最初から用語の間違いでICSの用語の誤用であり、レビューで指摘しやすいような
内容かと思いますレビューのチェックシートを作って互換性という項目や機能の用語に誤用がないかを入れれば間違いは無かったように
思いますが、後の祭りですかね。
レビューは実際にはコード/仕様いずれかですか? レビューの際のチェックシートなどは利用していませんか?

Q4.スタックのエラーチェック
> 「多重割り込みやカーネル処理でのスタックサイズ」までは
> 見ておりません.単純に
> (DEF_ICSで指定した値) > (CRE_TSKを元にしたタスクスタック使用量の計算値)
> をチェックしているだけです.
> kernel/kernel.tf ですと,982行目から984行目および
> 998行目から1000行目の部分です.
回答ありがとうございます。
わかりました。 
こういう回答はいいですね。ちゃんと結論を書いていただいてます。さらに詳しくはここを見てくださいとなっています。
質問したのは 「少なくとも大」 と 「それを超える」は違うことです。なので質問させていただきました。

ということはCRE_TSKで指定したスタックサイズをタスクスタックサイズとしている
わけで安全係数は持っていないということですね。
通常 高優先度のタスクをact_tskした場合に、act_tsk呼ばれてから上位のタスクにプリエンプトした場合に
カーネルがスタックを大きくは無いですが消費します。これは見込まれていないということですね。


A1.下記の回答
> > あまり大きすぎると小さく設定したいのにエラーになってできなくなることと
> かありませんか?
> ご質問を確認させていただきたいのですが,
> ・「あまり大きすぎると」というのは「多重割り込みやカーネル処理での
> スタックサイズ」が,
> ・「小さく設定したい」というのは 「DEF_ICS の設定値」が,
> という理解でよろしいでしょうか?

再度そのまま引用します。
>Q3.スタックサイズの安全係数
>> ・サイズチェックは必要と思われるため,CRE_TSK の指定値から
>>  全タスクのスタックサイズを算出し,すくなくともそれより
>>  大であることはチェックする.
>
>たぶん、多重割り込みやカーネル処理でのスタックサイズつまり本来のICSのサイズを見てチェックされる
>と思うのですが、イコールでなく、少なくとも大であるというのはどの程度でチェックされていますか?
>あまり大きすぎると小さく設定したいのにエラーになってできなくなることとかありませんか?

文脈とまで言いませんが、そこで区切らないでもらえたら理解可能だと思います。
すでにQ4で回答されていることです。

よろしくお願いします。




On Mon, 30 Jan 2012 21:43:22 +0900
Naoki Saito <nsaito.nmiri @ gmail.com> wrote:

> 高橋さま
> 
> 斉藤です.
> 
> (12/01/30 17:16), 高橋和浩@nifty wrote:
> > 斎藤様様
> > 早速の回答ありがとうございます。
> > 
> > 
> > Q1.自動化のしくみを教えてください。
> >> そうしますと,その部分の計算を手で行うことが,
> >> 自動的に計算される場合に比べて手間がかかりメンドウであると
> >> そういうつもりでの表現でした.
> > すいません、それがどう面倒かわからないので聞いているのです。
> 
> ご指摘頂いて,私の単なる感想にすぎないのかなと思い直しました.
> 申し訳ありませんがこの点につきましては無視して下さい.
> 
> > SSPでは、手計算せずに自動的に計算される仕組みがあるように受け取れます。
> > どのように自動化されるのでしょうか?
> 
> kernel.tf の中で タスクの最大スタック使用量を格納する変数として
> max_tsk_stksz がありますので,詳しくはこの変数の値を求める処理を
> ご覧いただくのが早いと思います.
> 具体的には,246行目から331行目までの部分です.
> kernel_cfg.c には処理過程を確認するためのコメントを
> 出力するようにしています.
> 
> > こいさんさんの話によるとどこかにdefineしているのみで、DEF_ICSの静的APIの宣言も
> > されていないようなことが書かれていましたが、これは事実と違うのでしょうか?
> 
> もとのお話は (toppers-users 3840) ですね.
> その中の「DEF_ICS の静的APIの宣言がされていない」というのは
> sample1.cfg に DEF_ICS の記述が存在しないということと思いますので,
> そのご指摘については事実と思います.
> 
> DEF_ICS がコンフィギュレーションファイルに存在しない場合は,
> ターゲット依存部で定義されている DEFAULT_ISTKSZ マクロの
> 値が指定されたものとして処理します.
> kernel.tf の972行目から984行目までが DEF_ICS が存在しない場合の
> 処理となっています.
> 
> > Q2.設計思想の件その1
> >>> 2.TOPPERSの会員内のレビューで議題にあがっいなかったのでしょうか?
> > は、回答が難しいのでしょうか?
> 
> いえいえ,難しくはありません.
> ご質問にお答え出来ておらずすいませんでした.
> SSP仕様レビューという議題の中で DEF_ICS のレビューの際に
> ついでに議論されました程度で,最初から議題に挙がっていたわけでは
> ありませんでした.
> 
> > Q3.スタックサイズの安全係数
> >> ・サイズチェックは必要と思われるため,CRE_TSK の指定値から
> >>  全タスクのスタックサイズを算出し,すくなくともそれより
> >>  大であることはチェックする.
> > 
> > たぶん、多重割り込みやカーネル処理でのスタックサイズつまり本来のICSのサイズを見てチェックされる
> > と思うのですが、イコールでなく、少なくとも大であるというのはどの程度でチェックされていますか?
> 
> 「多重割り込みやカーネル処理でのスタックサイズ」までは
> 見ておりません.単純に
> (DEF_ICSで指定した値) > (CRE_TSKを元にしたタスクスタック使用量の計算値)
> をチェックしているだけです.
> kernel/kernel.tf ですと,982行目から984行目および
> 998行目から1000行目の部分です.
> 
> > あまり大きすぎると小さく設定したいのにエラーになってできなくなることと
> かありませんか?
> 
> ご質問を確認させていただきたいのですが,
> ・「あまり大きすぎると」というのは「多重割り込みやカーネル処理での
> スタックサイズ」が,
> ・「小さく設定したい」というのは 「DEF_ICS の設定値」が,
> という理解でよろしいでしょうか?
> 
> 以上,よろしくお願いします.
> 
---
アライブビジョンソフトウエア株式会社
高橋和浩
673-0005兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/