(toppers-users 2393) Re: V850SA1での使用について

tagu @ freelines.co.jp tagu @ freelines.co.jp
2006年 4月 5日 (水) 10:37:59 JST


古賀様、古川様

V850担当をしております、フリーラインズの田口と申します。

>/////////////cpu_support.Sより
>di
>nop
>nop
>nop
>nop
>nop
>ei
>/////////////
>とすることで割込みを待っている部分がありますが、
>V850/SA1においては、このNOPが7個必要なようです。

SA1のマニュアルには確かにこういった記述がありますね。
私どもで動作させたV850はKJ1+というESコアの品種で、こちらには
そういった記述はありませんでした。他にもSG2というESコア製品と
ME2というE1コア製品への実装実績がありますが、いずれもNOP7つ
という制約はありませんでした。

>jsp1.4.2パッケージに入っているV850ES用そのままでは動かないみたいです。
>おなじシリーズとはいえ、結構違うんでしょうか?

SA1はSG2などのESコア製品と同じミッドレンジ製品として分類されている
ようですが、SA1のCPUコアはExコアとは違うV850コアでできているようで、
V853からの派生品のようです。内部のパイプラインの作りがESやE1コアとは
違うのではないでしょうか。

見落としやすい問題点の情報をありがとうございました。
今後の展開へ反映させていただきます。


>getting_ready_for_contextswitchでは以下のように
>///////////////////////////
>st.w ep, -4[sp] /*epを使いたいので真っ先に退避 */
>addi -68, sp, ep
>sst.w r20, 64[ep]
>///////////////////////////
>epをスタックに積んでいますが、すぐに上書きされています。

実は、この問題は私自身、比較的早い時期に気がついていました。
1.4.2が公開されて少したった時点で気がついて暫定修正コードも
用意していたのですが... 正直、現在公開されているV850依存部の
コードは1.3の時のコードを力技的なやり方で1.4に合わせ込んだと
いう感じで、1.3の時の担当者からちゃんと引き継ぎをしたわけでは
ありませんでした。私自身「ここはなんでこうやっているんだろう?」
と思う、きちんと理解できていないコードが残っていて、自分のコード
になっていないもどかしさがありました。このもどかしさを払拭して
自分の理解のもので大幅に書き直した依存部がすでにある程度用意
できています。安定して動作しているので、あとはまとめるだけかな
という段階に来ており、近々公開しようと思っていたところです。

V850は市販の評価ボードもまだ少なく、H8やSHに比べるとV850で
TOPPERSをという人もまだ少ないようなので、私も日常業務の忙しさ
にかまけて対応が遅れてしまい申し訳ありませんでした。

>getting_ready_for_contextswitchに来た時点でepをスタックに積み、
>recover_from_contextswitchでepをスタックから取り出す、
>ということをしたところ、今のところ暴走することなく、無事動作しています。

おそらく古川様が対策された方法で問題ないと思います。

2度手間になるかもしれませんが、現状公開されているコードを
修正した暫定修正コードも、大幅に書き直した(次のリリース向け)
コードも両方近いうちに用意できると思います。
TOPPERSのアップローダには大幅に書き直した依存部の方をアップする
つもりですが、どちらにしてもここだと会員でないと見ることができ
ません。
会員でない方、あるいはお急ぎの方へは私が個別に対応することも可能
ですが、公式リリースではないのでその点だけご承知おきください。




At 10:57 AM +0900 06.4.4, M.Kogan wrote:
>古賀(古賀製作所)です。
>うちの担当者がMLに投げようとしたのですが、登録と投稿がうまく行かない
>ようなのでとりあえず代理でご報告します。
># 以前は登録できてたらしいんですが、2月末にメールサーバ(kogasw.com)が
># トラブったときに登録が消えて、それ以降登録できないらしいのです。
># 登録できたら本人に参加してもらいますのでよろしくお願いします。
>
># ちなみに環境は gcc=2.95.3, binutil=2.16, newlib=なし です。
>
>
>−−ここから元メール
>
>初めまして、
>古賀製作所の古川と申します。
>
>V850/SA1にjsp1.4.2を使っています。
>気づいたことがあるのでお知らせします。
>
>動けるタスクがない状態で
>
>/////////////cpu_support.Sより
>di
>nop
>nop
>nop
>nop
>nop
>ei
>/////////////
>とすることで割込みを待っている部分がありますが、
>V850/SA1においては、このNOPが7個必要なようです。
>
>カーネル起動時にタスクを起動し、
>割込みが発生するまで、スリープ
>という動作をさせていたら
>いくらキー入力しても何の反応もなかったので
>CPUのマニュアルを読んでみたら、
>eiからdiまでの間に7クロック無いと割込みを認知しない、とのことでした。
>
>jsp1.4.2パッケージに入っているV850ES用そのままでは動かないみたいです。
>おなじシリーズとはいえ、結構違うんでしょうか?
>
>あともうひとつ、
>レジスタep(r30)についてですが、
>
>cpu_support.Sのなかの_kernel_dispatchにて
>コンテキストの退避部分で、まずepをスタックに積んでいます。
>これはわかるのですが、
>
>vector_handler、および
>getting_ready_for_contextswitch
>ではepがスタックに退避されていません。
>
>getting_ready_for_contextswitchでは以下のように
>///////////////////////////
>st.w ep, -4[sp] /*epを使いたいので真っ先に退避 */
>addi -68, sp, ep
>sst.w r20, 64[ep]
>///////////////////////////
>epをスタックに積んでいますが、すぐに上書きされています。
>
>近頃、タスクを複数個動かした場合によく暴走していましたので、
>このあたりを調べてみましたら
>プリエンプトされたタスクが復帰する際に
>プリエンプトされた時とepの値が違うことを確認しました
>
>ですので
>getting_ready_for_contextswitchに来た時点でepをスタックに積み、
>recover_from_contextswitchでepをスタックから取り出す、
>ということをしたところ、今のところ暴走することなく、無事動作しています。
>
>ただ、これで正しいのかどうなのかよくわかっていないため、不安が残ります。
>こういったepの扱いは正しいのでしょうか?
>
>−−元メール終り
>
>
>
>---------------------------
>有限会社古賀製作所 古賀正男