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
 

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


    以下のスレッドでNoMaYさんに作っていただいたプログラムで
    NORTiをRX SmartConfiguratorと一緒に使えるようになったようです。
    NORTiユーザとしてFITとの同居という念願がかないました。(共存させることが苦痛な実装のRTOSじゃなくなった?w
    NoMaYさんありがとうございました!

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

    ソース追いかけたり実験したりしてたので遅くなりましたが確認が取れました。
    詳しいやりかたなどは私のGitHUB(github.com/mkogax)に上げたいと思っていますが、NoMaYさんのソースを転載してもよろしいでしょうか?許可いただければ、ファイルとしてそのまま収録したいと思います。
    以下簡単なご報告です。

    ----------
    セットアップ
    ----------
    NoMaYさんの NORTi_interrupt.c (20220629_2版) をそのまま改変なしで使用しました。
    ただし、NORTi_interrupt.h で全て NORTiタイプを指定し、INTBにはNORTi管理のベクタテーブル(RAM)を登録します。
    NORTi側は初期化時に呼ばれる intini() (利用者が作るヘルパ関数のようなもの)を改造するだけです。

    ----------
    効果
    ----------
    ・FIT/CGは改変なしでそのままNORTiを利用できます。(コールバックでNORTi利用可)
    ・NORTiの割込みハンドラ(def_inh())をそのまま利用できます。
    ・NORTiの割込みサービスルーチン(cre_isr())をそのまま利用できます。(最初におまじない必要)
    ・FIT/CGの割込み処理はNORTi対応で少しオーバヘッドが増えますが、NORTiを使わないで高速に処理したい場合(nonOS)はdef_inh()で対応できます。

    ----------
    実験(Target Board for RX130,CS+)
    ----------
    ・r_cmt_rx(FIT)の10msec周期コールバックからNORTiのチックタイム通知(isig_tim())
    ・TMR0(CG)で#pragma interrupt の割込みルーチンからタスク起床(wup_tsk())
    ・TMR1(CG)の改造でdef_inh() のNORTi割込みハンドラからタスク起床(wup_tsk())
    ・TMR2(CG)の改造でcre_isr() のNORTi割込みサービスルーチンからタスク起床(wup_tsk())
    ・TMR3(CG)で#pragma interrupt の割込みルーチンを非NORTiとして再登録(def_inh())してカウンタ変数更新を確認

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

    どうもありがとうございました。新たな技も開発されたみたいですね。そして、以下の件、もちろん転載して構わないです。

    > 詳しいやりかたなどは私のGitHUB(github.com/mkogax)に上げたいと思っていますが、NoMaYさんのソースを転載してもよろしいでしょうか?許可いただければ、ファイルとしてそのまま収録したいと思います。

  • NoMaYさんありがとうございます!
    できたらここにご報告します。

Reply Children
  • ふぐりんさん、 NoMayさん、こんにちは

    こんな事できないかなぁ、と思って投稿させていただいた事から話か進んで

    より良い方向に向かう事ができました。

    改めて、かふぇルネ、皆さんの力、偉大だなぁと思っています。

    ありがとうございます。

    ふぐりんさんのGitHUBも拝見させていただき、使用してみたいと思っています。

  • NoMaYさんka.makiharaさんこんばんは。

    いやー遅くなってしまいました・・w
    なんせ初めてなもんで、いろいろだいじょうぶかなと心配なんですがとりあえず書き上げましたのでご覧ください。

    「NORTi を RX Smartconfigurator と一緒に使う方法」
    https://github.com/mkogax/How-to-use-NORTi-with-RX-Smartconfigurator

    NoMaYさん考案のプログラムによって、NORTiとスマートコンフィグレータを一緒に使うことができるようになりました。スマートコンフィグレータ(FIT/CG)の自動生成コードは何も改変せずに、ユーザコードエリアやコールバックからNORTiの機能を使えます。またNORTi方式の割り込みもそのまま併用できます。

    何かまずい点などお気づきでしたらお知らせください。すぐに修正します。
    (2022.07.14 説明加筆)

  • ふぐりんです

    先日また古川制御さんと雑談してて未定義命令例外とかどうしてんの?って話が出ました。

    INT/BRK(ベクタ番号=0..15)はnonOSにしています。
    また例外ベクタテーブル(EXTB)の割込みはいじってないのでそのまま(nonOSと同じ)です。
    このあたり利用する人はいろいろ理解してるだろうからこれで良いと思ってるんですが解説には注意書きを追加しました。

    自分はあんまりこの辺を使ったことないので、ちょっと試そうかなって思ったら、RX130ってEXTBレジスタもFPUも付いてないんですねw
    TargetBoardのRX65N引っ張り出しました。
    試しにFPUでゼロ割させて浮動小数点例外の中で何もしないと無限割り込みするんで、やっぱnonOSで発生時のPCが分かるようにしといた方が良いだろうと思いました。(このへんの実装の正解ってどっかあるんでしたっけ?)

    あと、試しにRX65Nを120MHzで動かしたら、実験2でwup_tsk()から起床まで32MHzのRX130で5.9usecかかってたのが1.7usecになってました。MHzの倍率にならないのはROMのウェイトですね。r_bspでちゃんとセットされてました。

    (いろいろ実験して楽しかったので書きましたw)
    (それにしてもNoMaYさんのルーチンはさすがですね。nonOSはまるで無かったかのように割込みルーチンに影響しません)
    (BASERRはNORTi対応です。ちょっと迷ったんですが・・最悪def_inh()で変更できるしそのままにしてます)
    (うーんNORTiの人口は少ないのかな。NoMaYさんのアイデアすごい画期的なのに反応が薄いw)

  • ちょっと調べものしてて手持ちのTargetBoard見てたらRX66Nは120MHzでもROMのウェイトが不要らしいですね。
    実験2を試したら1.33usecでした。
    あれ?速すぎるw
    ROMキャッシュが効いてる?
    あ、でも65Nもキャッシュはあるんだけど・・66Nのキャッシュは8Kバイトで、65Nは256バイトだからヒットしないのかも

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

    遅くなりましたが、github 拝見しました。

    丁寧にまとめて頂きありがとうございます。

    感謝、感謝で、ありがたく使わせていただきます。

  • ka.makiharaさん
    見ていただき嬉しいです!ありがとうございます!

    (よーし、もうちょっと書き足そうw)

  • GitHubに動作の解説を追加しました。図を描くだけで力尽きました・・

    https://github.com/mkogax/How-to-use-NORTi-with-RX-Smartconfigurator/blob/master/README_exp.md

  • ふぐりんさん、こんにちは。Muraと申します。

    RXシリーズでNORTiをSmartConfiguratorと使おうとしておりましてふぐりんさん、NoMAYさんご考案の方法にて実現しようとしております。

    CC-RXでビルドしますと、NORTi_interrupt.cのstatic void dummy_NORTi_INT_HOOK(void)関数で関数内にコメント記載のあるE0552111:Symbol is undefined のエラーとなります。

    知識不足で申し訳ございません。対処方法についてご教示頂けますと幸いです。

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

    これは私の案件ですね。たぶん、NORTi_interrupt.hの中で変更した#defineのどれかにスペルミスがあったのだと思います。ごめんなさい、最初に作った者として申し訳ないですが、よ~くNORTi_interrupt.hの中を見て頂けないでしょうか?

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