(toppers-users 3367) Re: Cortex-Mへの移植でDispatchまわりに質問があります。

koizumi yoshiyuki koizumiyoshiyuki @ gmail.com
2011年 1月 13日 (木) 08:52:15 JST


 高田先生

 ありがとうございます。

小生、HWの割り込みレベルが消費されることを懸念していましたが、単純に実装するとSW側の割り込みレベルを消費することになりますね。気が付いていませんでした。
 実行するタスクが無いときだけディスパッチする、特別なシステム側のタスク(タスクID番号を持たない)
にすることは可能です。これでタスク制御用のAPIは呼び出すことが出来なくなります。アプリケーションのタスクでは無いので、タスクの作りに制限があっても我慢できるでしょう。

 トロンチップにTOPPERSを移植した残骸はどこかにあるのでしょうか。有れば参考にしたいと思っています。

チップ依存処理と非依存処理の区分けが厳密に理解できていませんが、非依存部に手を入れるとパンクするので、依存部の修正で済ませんる努力します。winfo_周りを調べてみます。
Coertc-M3,4はマルチプロセッサの同期命令も追加されています。他のTOPPERSと矛盾しない実装が考慮できればと思っていますが、当面、意識だけは持って適当(悪い意味ではなく)に済ませておくことににします。

 以上

2011年1月12日16:52 Hiroaki TAKADA <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* レジスタのソフト
> > ウェア割り込みが最初だったとおもいます。
> > デバッグを開始すると様々な問題が出るとは思いますが、入り口を間違えると
> > 無駄な作業をする羽目になるので先人のお知恵を借りたいと思っています。
> > よろしくお願いします。
> > 以上
> >
>
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20110113/e84087dd/attachment.html>