(toppers-users 3379) Re: Cortex-Mへの移植でDispatchまわりに質問があります。
Hiroaki TAKADA
hiro @ ertl.jp
2011年 1月 23日 (日) 21:50:54 JST
こいさん
返答がおそくなりました。
> 実行するタスクが無いときだけディスパッチする、特別なシステム側のタ
> スク(タスクID番号を持たない)
> にすることは可能です。これでタスク制御用のAPIは呼び出すことが出来なく
> なります。アプリケーションのタスクでは無いので、タスクの作りに制限が
> あっても我慢できるでしょう。
むしろ、タスク制御用のAPIは呼べない方が安全です。前のメールに書いたよう
に、アイドルタスクを sus_tsk されるとまずいですから。
> トロンチップにTOPPERSを移植した残骸はどこかにあるのでしょうか。有れ
> ば参考にしたいと思っています。
トロンチップにTOPPERSを委嘱したのではありません。TOPPERSの前身のカーネル
であるItIsがトロンチップターゲットに実装されていたということです。ItIsと
TOPPERSでは、ディスパッチャ周りの設計が違うので、あまり参考にならないと
思います(ターゲット非依存部を直すなら別ですが)。
> チップ依存処理と非依存処理の区分けが厳密に理解できていませんが、非
> 依存部に手を入れるとパンクするので、依存部の修正で済ませんる努力しま
> す。winfo_周りを調べてみます。
ターゲット非依存部を修正しないなら、winfo_周りを調べる必要はないと思い
ます。若干無駄かもしれませんが、dispatchの中で、PendSVを発行した後、
割込みを許可してディスパッチを行い、戻ってきたら割込みを許可した後に
dispatchからリターンすれば、おそらくターゲット非依存部を修正せずに済む
と思います。
高田広章
名古屋大学
(11/01/13 8:52), koizumi yoshiyuki wrote:
> 高田先生
> ありがとうございます。
> 小生、HWの割り込みレベルが消費されることを懸念していましたが、単純に実
> 装するとSW側の割り込みレベルを消費することになりますね。気が付いていませ
> んでした。
> 実行するタスクが無いときだけディスパッチする、特別なシステム側のタスク
> (タスクID番号を持たない)
> にすることは可能です。これでタスク制御用のAPIは呼び出すことが出来なくな
> ります。アプリケーションのタスクでは無いので、タスクの作りに制限があって
> も我慢できるでしょう。
> トロンチップにTOPPERSを移植した残骸はどこかにあるのでしょうか。有れば
> 参考にしたいと思っています。
> チップ依存処理と非依存処理の区分けが厳密に理解できていませんが、非依存
> 部に手を入れるとパンクするので、依存部の修正で済ませんる努力します。
> winfo_周りを調べてみます。
> Coertc-M3,4はマルチプロセッサの同期命令も追加されています。他のTOPPERS
> と矛盾しない実装が考慮できればと思っていますが、当面、意識だけは持って適
> 当(悪い意味ではなく)に済ませておくことににします。
> 以上
> 2011年1月12日16:52 Hiroaki TAKADA <hiro @ ertl.jp <mailto:hiro @ ertl.jp>>:
>
> こいさん
>
> Cortex-Mに関する知識はないのですが、PendSVについては、基本的には、昔、
> トロン仕様マイクロプロセッサに実装されていた遅延割込みと同じという理
> 解で回答させていただきます。
>
> ちなみに、TOPPERS/JSPの前身であるItIsは、遅延割込みを使って実装して
> ありましたので、それに戻すというイメージかと思います。
>
> 1.アイドルタスクを用いた実装について
>
> アイドルタスクを用意して、ディスパッチャ内のアイドル処理を省くことは
> 可能です。
>
> 留意点としては、アイドルタスクを置くために最低優先度が使えなくなるこ
> と(特別な優先度にすればこの問題はありませんが、ターゲット非依存部の
> 改造が大きくなるかと思います)、アイドルタスクに対してsus_tsk等が発
> 行されるとおかしなことになること(アイドルタスクに特殊なID番号を割り
> 付けて、サービスコールによる操作ができないようにする方が安全でしょ
> う)、アイドルタスクのスタック領域の確保方法を用意する必要があること、
> くらいでしょうか。
>
> 2.待ち解除時の返値について
>
> ご指摘の通り、winfo.wercdを使って返値を渡すことができなくなります。
> ItIsでは、ercdへのポインタをwinfoに入れるというアプローチを取って
> いました(厳密には、winfoではなくTCBですが)。このアプローチであれ
> ば、それほどターゲットプロセッサに依存しません。
>
> 他にこのような場所は、例えば wai_flg の中で flgptn を受け取る場所
> など、いくつかあります。"winfo_" をサーチすれば、あたりがつけられ
> ると思います。
>
> 3.他のTOPPERSカーネルについて
>
> これに関しては、迂闊なことを言うとご迷惑をおかけする気がするので、
> 現時点では未検討という回答とさせてください。
>
> 高田広章
> 名古屋大学
>
> (11/01/11 9:13), koizumi yoshiyuki wrote:
> > こいさんです
> > TOPPERS/ASPをCortex-M移植するための検討を行ってきました
> > (asp_arch_arm_m_gcc-1.3.2.tar.gz
> > <http://www.toppers.jp/download.cgi/asp_arch_arm_m_gcc-
> 1.3.2.tar.gz>とは
> > 異りPendSVを使った実装を考えている)。概ねめどが立ち、ソースの修正
> を行え
> > るレベルになりました、が、基本的な事項で質問があります。
> > 1 IDLタスクの実装について
> > 現状IDLEタスクはasp\arch\arm_m_gcc\prc_support.Sのディスパッチャ
> 内で、
> > 次に実行すべきタスクない(p_schedtsk==0)時にloopする処理として実
> 装され
> > ています。
> > DILEタスクを通常のタスクとして実装し最も低い優先度(特別な優先度にする
> > ことも可能)としてディパッチさせても構わないでしょうか? asp\arch
> > \arm_m_gcc\prc_design.txtに上記の実装にした経緯が書かれえています
> が、私
> > には判断できずに居ります。PendSVを使って同様な実装は可能ですが、
> PendSVの
> > 割り込みレベルでIDLE Loopが動作するので、この割り込みレベルが他
> の目的で
> > 使えなくなってしまうのを避けたいのです。WIFは非特権モードでも動作
> できる
> > で制約にはならないと思っています。必要ならタスク化したIDLEタスク
> からSVC
> > での特権モードのサービスの追加を考えています。
> > 2 タスクが待ち状態から解除になった時の戻り値の処理について
> > たとえばtslp_tskの場合、現状ではdispatch()でタスクが切り替わりま
> すが、
> > 遅延ディスパッチの実装ではdispatch()ではPendSV割り込みを発生させ
> るだけで
> > 実際のディパッチはt_unlock_cpu()まで待たされます。(TOPPERS/ASPで
> は有り
> > 得ないのかも知れませんが、tslp_tskが割り込み禁止で実行されると、
> 更に前の
> > 割り込み禁止が解除されるまで待たされることになります。これが遅延
> ディパッ
> > チの本領ですね)
> > 現状の実装のercd = winfo.wercdでは戻り値が戻せなくなります。
> PendSVの実
> > 装ではスタックに保存されているR0レジスタに戻り値を直接書き込む必
> 要があり
> > ます。他のこのような場所を探すにはどうすればよいのでしょうか。こ
> のような
> > 場合の戻り値の処理は必ずwinfo.wercdが使われていると考えてよいので
> しょう
> > か。(TOPPERS/ASPのAPIの詳細を全て理解すればよいのでしょうが、少
> 々辛いで
> > すね)
> > 3 今はTOPPERS/ASPを前提に考えていますが、他のTOPPERSを考えると
> き、上記
> > 1,2はどのように考えればよいのでしょうか?
> > 保護モードのTOPPERSには興味がありますが、ASP以外は見たことがあり
> ません。
> > 余談ですがタスク毎にメモリ空間を分離させるにはどうすればよいのか解か
> > らすにいます。この辺が入門でしょうかね。
> > 遅延ディパッチはMIPSアーキテクチャで採用された*Cause* レジスタの
> ソフト
> > ウェア割り込みが最初だったとおもいます。
> > デバッグを開始すると様々な問題が出るとは思いますが、入り口を間違
> えると
> > 無駄な作業をする羽目になるので先人のお知恵を借りたいと思っています。
> > よろしくお願いします。
> > 以上
> >
>
>