[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(itron-club 1729) Re: cyclicハ ンドラーの初期動作 (Re: TOPPERS/JSP isig_timの実装について )



小南です。

On Thu, 22 Jul 2004 11:02:53 +0900
Tatsuhiro Ujihara <ujihara __at__ roland.co.jp> wrote:

> こんにちは。氏原です。
> 
> 小南さんありがとうございます。
> 
> > TOPPERS/JSPの特に実装に関しての質問は、users __at__ toppers.jpの
> > 方が適切だと思います。
> 
> お教えいただいてありがとうございます。早速登録させていただきました。こち
> らでは、ITRON仕様についてだけ議論します。
> 

> まだ気にかかるのは、現状のTOPPERSの実装ですと位相が0のcyclicハンドラー
> は最初の周期が1-tick短くなることが起こります。
これは最初に氏原さんが書かれた問題と同一原因のためだと思います。
過去の時刻に処理すべきものが残っていたので、今の時刻に処理すべきものといっしょに
まとめて処理したためでしょう。
 
> 例えば、周期が2で位相が0のcyclicハンドラーは
>           start
> timer-tick  0 ----- 1 ----- 2 ----- 3 ----- 4 ----- 5 ----- 6 -
> cyc_hdr     -------run-----run-------------run-------------run-
> (横は時間軸)
 
> 最初のtimer割り込みはtick 1のときになります。
> tick 1とtick 2は間隔なしで実行されます。
これはどうやって確認されたのでしょうか。
デバッグ用機器でリアルタイムに計測されたのでしたら、TOPPERS/JSPの問題かも
しれませんが、シリアル出力とかですが、カーネル側でのsyslog出力のバッファリング
のタイミング、ホスト側での表示のタイミングなどで、たまたま表示が重なっただけかも知れ
ません。

> > 私としては、「システム初期化時に第1回の起動を行なうべきではないか」と
> > 思います。
 
> これなら、timerスタート時に一回目の起動をするべきだと思います。指定時刻
> より後で実行されてもよいということですが、あくまでイレギュラー時の話だと
> 思いますけどどうでしょう。スタート時に一回目を起動するのは現実的に難しい
> のなら、この場合でしたらtick 2からスタートさせればよいのではないでしょう
> か。(私の提案したプログラムと食い違ってきますが、その話はまた場を変えて
> 後ほど)。
指定時刻より後というのは、μITRON4.0仕様の周期ハンドラの項目の説明のように、
起動周期や、起動位相がタイムティックの倍数でない時を想定した仕様だと思います。
そのため、今回指摘されたJSPの振舞に適用するには、趣旨が違うとは感じます。

この問題は仕様上、周期ハンドラのみで発生し得ると認識しています。
他のタイムイベントハンドラである、アラームハンドラ、オーバーランハンドラなどは、
静的APIでは生成しかできず、起動はあらためて該当するサービスコールを呼ばなけ
ればなりません。
当然周期ハンドラでもそのような使いかたは出来ます。
けれども何故か周期ハンドラのみ、システム初期化時から起動できる属性を持っています。

後は実装に絡んだ話になってしまいますが、ハードウェアの初期化、割込みハンドラの登録、
割込みの許可などをどのタイミングで行なうかは実装に依存した話であり、「仕様上のシス
テム初期化時」を厳密に定めることが難しい実装もありえると思います。

氏原さんの提案されている方法というのは、タイマー割込みに同期させてシステム初期化時
を決めるという方法でしょうか。
それが可能であれば(システム内部で、その時をシステム初期化時とみなせれば)、厳密
にシステム初期化時を定義することが出来ますね。

----------- 
小南 靖雄
ykominami __at__ nifty.com
(NBC00224 __at__ nifty.com)