FITでのSCI使用時に、PCから文字を1文字受信すると、プログラムが固まります。

こんにちは。

タイトルの通り、「FITを利用したSCIのプログラム」について、皆様のアドバイスを頂けると幸いです。

【発生している問題】

テラタームを用いて、PCよりシリアル通信を行うプログラムの試験中です。(エコーバック)

PCより一文字受信すると、CPUが固まります。

一度固まると(デバッグモードで)再開を押しても固まったままです。

一度終了(デバッガと切断)し、再度デバッグを開始するとCPUは動きます。

【不具合詳細】

CPUが固まった時は、添付画像の用にe2studio上に

"0x446の_$s_bsp_swint_nested_int_status()"に対して使用できるリソースがありません。

と表示されます。

その時の逆アセンブルを表示すると、

0000446:dbt

という命令が表示されています。

何を以て「CPUが固まった」と判断してるかと言うと、RTOSの周期ハンドラでLEDを点滅させています。

これが消えたままになったり、ついたままになっているからです。

(SCIを受信しなけれなば点滅を繰り返しています。)

【環境】

e2studioにて、FITを用いてのプログラム作成中です。

CPUはRX65Nです。

また、μITORN仕様のOS「NORTi」を使用しています。

(NORTiのメーカーの)ミスポ様より、RX231用でのFITを用いたサンプルは頂いていますので参考にしています。

【考察】

FITのマニュアル等も確認し、FITのヘッダファイルでのチャンネル指定や

R_SCI_Open関数コール前後のピンの設定の記述等も確認したつもりです。

が、なぜかr_sci_rx65n.c内の割込み関数の引数に対して、エディター上でエラーが出ます。

しかし、ビルドは通ります。ここが怪しいかとは思うのですが、思いつく限りの確認はしたのですが

症状は改善されません。

具体的に言うと、(SCIの割込み関数4つ全てなのですが1つの例として)

void sci2_eri2_isr(void *cb_args)
{
ient_int();
eri_handler(&ch2_ctrl);
iret_int();
}

※ient_int()とiret_int()というのはRTOSとFITを接続するための関数ですので、今回は関係ないかとは思います。

のch2_ctrlに対して「シンボルが解決できません」と赤波下線がエディタ上で表示されています。

しかし、デバッグ状態にしてカーソルを持ってい行きF2を押すと、値は入っています。(添付画像)

アドバイスを頂けると幸いです。

よろしくお願いいたします。

r_sci_rx65ndata.c内に、ch_ctrlが定義されており、e2stduioでもホワイトアウト?されていないので、しっかりと参照されています。
(コードが向こうであれば、エディタ上で背景が塗潰された状態ではないということです)
  • しんちょろす さん、こんにちは。NoMaYです。

    NORTiのUMの別のページも読んでみて、たぶんこれで私の側でそれなりに試せるようになるかな、と思ったのですが(私は、NORTiを使ったことは無く、もちろん持ってもいない、ですが)、ただ、まだ足りないピースがあると思っていて、それは、NORTiでは割り込み処理をRAMに置かなければならないのかな?、という点です。ここまでUMを読んでみた限りでは、そのような記載は見当たらなかったのです。その話はどこから来たのでしょうか?

    ちなみに、今回のしんちょろすさんのように、ユーザさんがRTOSベンダとライブラリベンダ(今回はマイコンベンダでもありますが)との板ばさみになる課題+その他もろもろ、を解消しようとしたのがRenesas Synergyだったのです。RTOSから何でもかんでもルネサスさんでワンストップでサポートしますよ、ということでしたけど、、、でも、その課題はそもそも多くのユーザにとって大きな関心事で無かったことが判明したからなのか(?)、Renesas Synergyの代わりに、RAマイコン+FSPフレームワークを最近は強くプッシュしているみたいです、、、

    www.mispo.co.jp/document/no4guid.pdf
    追加画面コピー(3枚)



     

  • NoMaYさん、こんにちは。

    ありがとうございます。

    > 現状のNORTiグループ割込みのバグも・・・

    お恥ずかしい限りですが、ご指摘の通りリプライを急いだ為の言葉足らずになってしまいました。

    「自身の能力も含めて、自分の意図する動きをしない状態 =バグ」と言い換えていました。

    結論から申し上げますと、FreeROTSに変更します。

    次回号機の開発まで1年半程度の猶予もあり、先方の担当者の定年の為引継ぎに、新人さんに教えるのでタスク構造から資料を作り直すとのことで、RTOSの変更も了承頂きました。

    ルネサスの技術サポートの方からも、回答を頂き、上記の問題はfreeRTOSでは発生しないという旨も教えて頂きました。

    ミスポ様のRX231+FIT用のプロジェクトに、上記添付画像のent_int();をFIT対応用に、修正したient_int();と言うものに修正したものがあったので、それを利用したのですが、TEIがグループ割込みの為・・・とう事になりました。

    そして、ミスポ様からも「FITでのグループ割込みは対応するのに、色々修正が必要だが、対応はしない。FITを使わない方法を推奨している(意訳)」との回答も頂きましたので。

    (誰かを責めているという意味ではありません)

    >ちなみに、今回のしんちょろすさんのように、ユーザさんがRTOSベンダとライブラリベンダ(今回はマイコンベンダでもありますが)との板ばさみになる課題+その他もろもろ、を解消しようとしたのがRenesas Synergyだったのです。RTOSから何でもかんでもルネサスさんでワンストップでサポートしますよ、ということでしたけど、、、でも、その課題はそもそも多くのユーザにとって大きな関心事で無かったことが判明したからなのか(?)、Renesas Synergyの代わりに、RAマイコン+FSPフレームワークを最近は強くプッシュしているみたいです、、、

    との背景をご教授ありがとうございます。

    最近RAマイコン推しが強いので、少し不安ですが、さすがにRXコアのマイコンはすぐには消えないと信じて(コンパイラも購入しているので)RX + FreeROTSで頑張ってみます。

  • ライン入りの写真で申し訳ございませんが(テキストファイルが見つかりませんでした・・・)

    がFミスポ様から頂いたRX231+FITのサンプルに付属していた説明です。

    今後も別の案件でNORTiとFITで色々悩むよりは、freeRTOSでしたら情報も集めやすいかと思うのもあり

    (ルネサスさんも公式に対応しているので、アップデートも行わなれると思うので)

    freeRTOSで行こうかと思う所存です。

    色々とアドバイスを頂き本当にありがとうございました。