こんにちは。NoMaYです。ひとつ立てても良さそうな気がしましたので立ててみました。もっとも、その前に気になる問い掛け、が無いわけでは無いですけれども、、、● マイコンベンダ提供のソフトウェア開発フレームワークと共存させることが苦痛な実装のRTOSを今後も新規プロジェクトで使う予定がありますかね[関連スレッド]スマートコンフィグレータの自動生成をカスタマイズしたいjapan.renesasrulz.com/cafe_rene/f/forum5/8248/threadFITの割込みハンドラの実装についてjapan.renesasrulz.com/cafe_rene/f/forum5/8212/fitRX72Nで簡易I2C通信をしたい。DATAは出力されているがCLKが何故か正しく出力されない。。japan.renesasrulz.com/cafe_rene/f/forum5/7129/rx72n-i2c-data-clkFITでの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さん解決できてよかったです!(いいねボタンが欲しいw)
ふぐりん さん、こんにちは。NoMaYです。今しがた頭に思い浮かんだのですけれども、ひとまず、そうしてしまっても良い話なのか、そういう話では無いのか、というのは脇へ置いて、NORTi_interrupt.cのコードの中でKNL_LEVELマクロ定義を参照して、PSW.IPLの方が大きい値だった場合には自動的にv3_ent_int()を呼ばないようにスキップしてしまう、というように出来るかも知れないなぁ…
ふぐりんです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さんありがとうございます!できたらここにご報告します。
ふぐりんさん、 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も付いてないんですねwTargetBoardの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でした。あれ?速すぎるwROMキャッシュが効いてる?あ、でも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です。
Enter to Replyのチェックを外すの忘れて、改行の度にReplyしてしまっていました。失礼しました。
ご教示ありがとうございます。
Gitからダウンロードさせて頂いたNORTi_interrupt.hを加工なしで使用させて頂いております。ファイルの内容確認しておりますが特に原因となるようなものは見つけれておりません。
切り分けで試してみるようなことでも、解決のヒントになるようなことございましたら何でも試してみますので連絡頂けますと幸いです。
Muraさん、こんにちは。NoMaYです。すみません、開発環境が、CS+であればmtpjファイルを、e2 studioであれば.projectファイルと.cprojectファイルを、zipファイルに固めてリプライに添付して頂けないでしょうか?
NoMayさん、こんにちは。Muraです。
お手数お掛けしまして申し訳ございません。
e2studioの.projectファイルと.cprojectファイルを添付いたします。e2studio_proj_cproj_20220902.zip
よろしくお願いいたします。
Muraさんこんにちは。私はCS+でやってまして・・e2studioでいただいた設定を見ながらCS+でちょっと試してたんですが、CS+では再現できませんでした。すいません。(RX66N/v3で試しました)とりあえず私のGitに置いているNORTi_interrupt.hを使う限りでは dummy_NORTi_INT_HOOK(void)関数は使わないようです。dummy_NORTi_INT_HOOK(void)関数と参照している行(93行目)をコメントアウトしても、ビルド+実行できました。よかったらお試し下さい。(すいません。NoMayさんのエリアですが・・)