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

(itron-club 1726) Re: TOPPERS/JSP isig_t imの実装について



小南です。
TOPPERS/JSPの特に実装に関しての質問は、users __at__ toppers.jpの
方が適切だと思います。
まだ登録されていませんのでしたら、こちらと同じ自動登録ですので手続きをされてから、質問を
投稿されては如何でしょう。

ただしTOPPERS/JSPの振舞が、ITRON仕様に沿っているかは、こちらでも議論でき
ると思います。

ここでは私が気がついた点を書きます。

#itron-club 1724で示されたconfiguratorの部分ですが、
ここでの属性の指定、TA_ACTは周期ハンドラには存在しません。
TA_ACTに相当するのはTA_STAです。
ただしに同じ値が割り当てられているので、氏原さんの意図通りにはなっていると思います。
それからTA_PHSが指定されていないので起動位相は保存されませんが、TA_STA
が指定されていないので、周期ハンドラの起動タイミングには関係有りません。

>CRE_CYC(CYCHDR1, { TA_HLNG|TA_ACT,(VP_INT) 0, cyc_task, 1, 0 });

起動周期=1、起動位相=0、TA_STA属性が指定されている静的APIで生成した
周期ハンドラが最初に起動されるのは、システム初期化時に起動位相分から時間が経った時です。
すなわちこの場合は、システム初期化時です。
氏原さんが書いておられるように、tmevt_heap[0].time = 0がこれに
該当します。

ただしITRON仕様としては「周期ハンドラn回目の起動は、周期ハンドラを生成する
サービスコールであるが呼び出されてから、(起動位相+起動周期X(n-1))以上の
時間が経過した後に行なうことを保証しなければならない」とも書かれてあり、JSPは
こちらは守っているとはいえます。

氏原さんはisig_tim()内での判定条件がおかしいのではと書かれましたが、
私としては、「システム初期化時に第1回の起動を行なうべきではないか」と思います。

指定時刻よりも前に起動するのは仕様に反していますが、なんらかの理由で指定時刻に
起動できなかった場合(タイムティック、起動周期、起動位相などの大きさにより、指
定時刻通りに起動できない場合が有ります)に、指定時刻よりも後で起動しても、仕様
は守っています。

周期ハンドラの振舞としては、現在のJSPの振舞が一概に間違っているとは言えませ
んが、指定時刻が0のタイムイベントをシステム初期化時に実行すべきではないかとは
思います。

On Wed, 21 Jul 2004 12:59:19 +0900
Tatsuhiro Ujihara <ujihara __at__ roland.co.jp> wrote:

> > もしくは
> > while (last_index > 0 && EVTTIM_LT(TMEVT_NODE(1).time, current_time))
> >                                                        ^^^^^^^^^^^^
 
> これは
> while (last_index > 0 && TMEVT_NODE(1).time <= current_time)
> でした。すみません。

ここに関連して、#itron-club 1724で、

>とくに後者のほうにすればnext_timeという変数は必要なくなると思います。

と書かれていますが、next_timeは他のファイルでも参照されていますし、
current_timeだけにすると、next_timeが必要なところで
いちいち加算をして求めなければならなくなります。

> そもそも
> #define	EVTTIM_LT(t1, t2) (((t1) - current_time) < ((t2) - current_time))
> #define	EVTTIM_LE(t1, t2) (((t1) - current_time) <= ((t2) - current_time))
> 
> で両辺をcurrent_timeで引いていますが、これは冗長なのでは?

current_timeの型はSYSTIM、これはinclude/itron.hではUWをtypedef
したものです。
つまり符号無しです。
したがって、そのすぐ上にあるコメントの通り、「current_time を最小値(最も近い時刻),current_time - 1 が最大値(最も遠い時刻)とみなして比較する.」という意味になります。


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