(toppers-users 465) Re: TOPPERS/JSP の実装で教えてください。
Tatsuhiko Matsukawa
KFC00725 @ nifty.ne.jp
2002年 8月 6日 (火) 16:28:07 JST
若林さん、ふたたび丁寧なコメントありがとうございます。
先のメールのあと、
www.mit.pref.miyagi.jp/embedded/TOPPERS/download_doc.htm
を見つけ、この設計メモと、H8Sのソース、お勧めいただいた
m68kのソースを見比べながら整理しています。
> ・受動的なディスパッチ - 割込み出入り口 (依存部)
> 割込み/例外によるハンドラへのディスパッチ
これをディスパッチと呼んでしまうと、こんがらがりそうなので
とりあえず別扱いとさせていただきます。
起動する側のタスクに注目すると、
> ・能動的なディスパッチ - _kernel_dispatch
> 待ち状態へ移行するとき, 優先度を変えたときなど
これによって停止したタスクが再び起動するときの
処理の入り口が、上記機種では、dispatch_rとなっており、
> ・受動的なディスパッチ中に起こった能動的なディスパッチ
> 割込みハンドラ内でのタスク起床, 資源返却など
これによって停止したタスクが再び起動するときの
処理の入り口が、上記機種では、ret_int_rとなっており、
さらに加えて、act_tsk等により新規に起動される場合が
別のactivate_rという処理になっているようです。
Xstormy16の場合、PUSH/POPは1クロックで処理できるのに
対し、schedtsk->tskctxb.pcへの上記入り口のセットを
行うと10クロック、これを読み出してジャンプすると9クロック
かかるので、能動的なディスパッチの場合も全レジスタ
保存することで、上記3つの処理を全く同じにし、
schedtsk->tskctxb.pcをなくしたほうが効率が
良く、プログラムもすっきりするのでは、と検討しています。
(ここにタスク例外ハンドラが絡んで話がややこしく
なっているので、頭の整理をしているところです)
久しぶりに紙にフローチャートなど書いています・・・・
************************
松川竜彦
KFC00725 @ nifty.ne.jp
************************