MISPOさんのNORTiをRX SmartConfiguratorと一緒に使いたい場合の課題と対策を考察してみるスレッド

こんにちは。NoMaYです。

ひとつ立てても良さそうな気がしましたので立ててみました。

もっとも、その前に気になる問い掛け、が無いわけでは無いですけれども、、、

● マイコンベンダ提供のソフトウェア開発フレームワークと共存させることが苦痛な実装のRTOSを今後も新規プロジェクトで使う予定がありますかね

[関連スレッド]

スマートコンフィグレータの自動生成をカスタマイズしたい
japan.renesasrulz.com/cafe_rene/f/forum5/8248/thread

FITの割込みハンドラの実装について
japan.renesasrulz.com/cafe_rene/f/forum5/8212/fit

RX72Nで簡易I2C通信をしたい。DATAは出力されているがCLKが何故か正しく出力されない。。
japan.renesasrulz.com/cafe_rene/f/forum5/7129/rx72n-i2c-data-clk

FITでのSCI使用時に文字を1文字送信すると、プログラムが固まります。
japan.renesasrulz.com/cafe_rene/f/forum5/7071/fit-sci-pc-1
 


RX SmartConfiguratorで気になった点とか改善する案とか報告してみるスレッド
japan.renesasrulz.com/cafe_rene/f/forum5/7536/rx-smartconfigurator/42599#42599
 

  • ふぐりんさん、こんばんは。Muraです。

    ご確認頂いて申し訳ないです。CS+で問題ないこと、当該関数をコメントアウトしても問題ないこと承知しました。

    未使用っぽいので、関数と関連する部分をコメントアウトしてみたのですが、次は隣接する関数が同様のエラーとなるので問題がどこにあるのか分からなくなってしまってまして..

  • NoMayさん、こんばんは。Muraです。

    ご確認頂きましてありがとうございます。ファイル2つ添付いたします。

    Cソースとヘッダー_20220902.zip

    お手数お掛けいたします。

  • Muraさん、こんにちは。NoMaYです。

    頂いたファイルとGitHubからダウンロードしたNORTi_interrupt.hとNORTi_interrupt.cを比較してみたところ、うっかりe2 studio上で手を滑らせてしまったのだと思いますが、NORTi_interrupt.cの以下の ?: の行が無くなっていましたよ。

        JMP R15 // Program will return to the next label from the interrupt service routine by RTE.
    ?:

     

  • あ!ほんとだw
    NoMaYさんさすが

  • NoMayさん、ふぐりんさん こんにちは。Muraです。

    すみません。本当ですね。失礼しました。

    あと当該関数含めたstatic宣言もいろいろ試しているうちに外したものお送りしてしまってます。

  • NoMayさん、ふぐりんさん こんにちは。Muraです。

    ご指摘の ?: を元通りに修正したら、ビルド通りました。ご教示ありがとうございました。

    正:     JMP R15 // Program will return to the next label from the interrupt service routine by RTE.
    ?:
    誤:     JMP R15 // Program will return to the next label from the interrupt service routine by RTE.?:
  • Muraさん
    解決できてよかったです!
    (いいねボタンが欲しいw)

  • ふぐりんさん

    お手間をお掛けしました。

    今回の問題はもとより、NORTiの併用に関して分かり易く説明頂いてすごく助かりました。

  • やっぱりBUSERRでトラブりました・・(勘は当たってしまいましたw)
    ご報告です。

    【前提】
    BUSERR(バスエラー割り込み,ベクタ番号16)は不正なアドレスをアクセスする等で発生します。
    スマートコンフィグレータでr_bspを入れてると割り込みレベル15で割込み許可になるようです。
    そのままでも、BUSERRの割込み処理 bus_error_isr() で BERCLRレジスタを使って割込み状態がクリアされるので、万一BUSERRが発生しても処理は続行できるようになってました。

    【発生現象】
    しかし、「NORTi を RX Smartconfigurator と一緒に使う方法」の手順でNORTi対応すると bus_error_isr() が呼ばれる前に v3_ent_int() をコールするため、v3_ent_int() の中で再度BUSERR割込みが発生して暴走します。(NORTiの許容割り込みレベルより高い割り込みレベルで、しかも割込みと同時に割り込み状態がクリアされないタイプの割り込みのため)

    【対策】
    NORTi_interrupt.h の INTERRUPT__16 を nonOS にします。
    これでv3_ent_int() が呼ばれなくなるので暴走しません。(ただし、BUSERR割込みのコールバックでNORTi のAPIは使えません)

    いやー半年以上前のことなんで、すっかり忘れてました。
    どうせまた忘れるのでw、もう「NORTi を RX Smartconfigurator と一緒に使う方法」の NORTi_interrupt.h を修正しちゃいます。

  • ふぐりん さん、こんにちは。NoMaYです。

    お久しぶりです。すみません、ちょっと知りたいです。再度BUSERR割込みが発生するカラクリが腑に落ちなかったのです。r_bspで割り込みレベル15になっていたとのことですが、自分の認識ですと、その割り込みが発生するとPSW.IPLが15になり、それ以降はその割り込みが終了するまで一切の(多重)割り込みが受け付けられない筈のような気がするのです。

    ひょっとして、v3_ent_int()の中でPSW.IPLの値を下げるようなことが行われていたりするのでしょうか?ちょっと気になるのです。