スマートコンフィグレータの自動生成をカスタマイズしたい

コードジェネレータに /* Start user code があり、ここでカスタムコードを使用できるのですが、

/*Start user code 部分以外にカスタムコードを挿入したいのです。

/* Start user code 部分以外に挿入しても、「コード生成」で消えてしまうので

生成部分に手をいれて自動で出力するようにできないか?という希望がありました。

e2Studio を調べてみたら、 e2Studioのインストールフォルダ下、eclipse\pluginsに

jarファイルがあり、jarファイルの中に出力するコードのひな形(?)があり、これを修正することでほぼ

目的の出力が得られるようにはなりました。

ただ、このjarファイルはバージョンでファイルが分かれていて、e2Studioが何をもとに

バージョンを選択しているのか分かりません。

ファイルの日付?バージョンの新しいもの?

scfgファイルを見ると、コンポーネントのバージョンが記載されていたので、試しにこれを直接修正してみましたが、

e2StudioのスマートコンフィグレータUIの「概要」に示されるバージョン番号は変わらず。

(これが変更できれぱ、該当のバージョンを使用できるのかも)

jarファイルの中には、plugin.xml ファイルがあり、ここにバージョンがありましたので、こちらもscfgに合わせたバージョンに修正してみました。

このような修正(が出来たとして)は当然サポート外の修正となるのは承知していますが、

CGのコンポーネントバージョン(修正方法)とバージョンに対応するjarファイルの選択の仕組みをご存じの方が見えましたら、情報をお願いします。

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

    リプライを貰ってからモヤモヤしていたのですが、どうも以下の赤文字の場合に対するNORTi_interrupt.hでの指定方法が直感に反していましたね。正直、考慮漏れです。割り込みとして指定出来るタイプとして、nonOSとNORTiの2つを用意していたのですけれども、以下のような3つにしておいた方が良かったかなぁ、と思ったりしています。

    nonOS
    NORTi_FIT_CG
    NORTi_NATIVE <--  処理としてはnonOSと全く一緒

    あるいは、こういう対処にしてしまうのも、作業はちょっと面倒にはなりますが、発想的には分かり易いかも、と思ったりもしました。(もっとも、hdr()がstatic宣言されていなくてグローバルであれば、ですけれども。)

    static void (* const Int_Hook_Vectors[])(void) =
    {
        (void (*)(void))hook_entry___0,
        (void (*)(void))hook_entry___1,
        (void (*)(void))hook_entry___2,
        (void (*)(void))hook_entry___3,
        略
        (void (*)(void))hook_entry__27,
        (void (*)(void))hdr<-- いっそココに書いてしまう
        (void (*)(void))hook_entry__29,
        略
        (void (*)(void))hook_entry_255
    };

     
    以下、添付されていたファイルからの抜粋です。(赤文字の場合に対するNORTi_interrupt.hでの指定方法が直感に反していましたね。)

    ----------
    ケースごとのレジスタ保存/復元(概念)
    ----------

    NORTi対応ラッパー経由(INT_ENTRY_NORTi)

     #pragma interrupt 定義の割込みルーチン(FIT/CGでNORTi使うときはこっち)



    NORTi非対応ラッパー経由(INT_ENTRY_nonOS)

     #pragma interrupt 定義の割込みルーチン(この中でNORTi使えません)



     -vectn 登録の割込みルーチン(void hdr(void)でent_int/ret_int使用)

     
    あと、以下については、その通りです。ちょっと注意点は、コンパイラの最適化オプションとして、未使用の変数/関数を削除する最適化を行う、という設定になっていると、リンク後にhook_entry_XXX()が歯抜けになる可能性があるので、少なくともNORTi_interrupt.cには-goptimizeを指定しない、といった対処が必要になるかと思います。

    > 要するにInt_Hook_Vectors[]の代わりにNORTi管理のRAM上のベクタテーブルを使うってことですよね。

    > 「hook_entry_XXX() そのままで def_inh() で登録」というのは、おそらくこんな運用ですか?

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

    NORTi_NATIVE <--  処理としてはnonOSと全く一緒

    モヤモヤさせてすいません。
    じつは私もあれ書きながら似たようなこと考えてましたw

    (void (*)(void))hdr<-- いっそココに書いてしまう

    この案もよさそうですね。

    あと、以下については、その通りです。ちょっと注意点は、コンパイラの最適化オプションとして、未使用の変数/関数を削除する最適化を行う、という設定になっていると、リンク後にhook_entry_XXX()が歯抜けになる可能性があるので、少なくともNORTi_interrupt.cには-goptimizeを指定しない、といった対処が必要になるかと思います。

    そういう罠があるとは・・知りませんでした。

    なにはともあれ。NoMaYさん本当にありがとうございます。
    おかげさまでFIT/CGをNORTiと同居させるというテーマについて、かなり見通しが開けてきたと思います。
    本来はNORTiユーザが頑張らないといけないのですが・・まだまだ力が及ばずすいません。
    (ka.makiharaさんのスレッドでこんな語りをやってしまって、ka.makiharaさんにも申し訳ありません)

    ちょっと今多くは動けないのですが、そのうちまとめたり実験したりしてお知らせしたいと思います。

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

    実験のネタになるかどうか分かりませんけれども、昨日ちょっと書いたFITのAPIで気になるAPIというのは、以下の画面コピーの通りのソフトウェア割り込み制御APIです。(タスクという言葉が用いられていますけれども、RTOSのタスクを対象としているのでは無いみたいです。もうちょっと素朴に、関数ポインタと引数ポインタのペアのことみたいです。) このAPIは、(今回のことで意義は薄れてしまいましたけれども)昨日のお話のような用途にも使えるかも知れないのと、以下の画面コピーの最初のNORTiのマニュアルに書かれている小技に使えるかも知れないです。

    RXファミリ ボードサポートパッケージモジュール Firmware Integration Technology
    www.renesas.com/document/apn/rx-family-board-support-package-module-using-firmware-integration-technology-rev710

    5.25 R_BSP_SoftwareInterruptOpen()
    5.26 R_BSP_SoftwareInterruptClose()
    5.27 R_BSP_SoftwareInterruptSetTask()
    5.28 R_BSP_SoftwareInterruptControl()

     
    GitHub上のソース
    github.com/renesas/rx-driver-package/blob/master/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/r_bsp_software_interrupt.c
    github.com/renesas/rx-driver-package/blob/master/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/r_bsp_software_interrupt.h

    NORTi V4 カーネル編 ユーザーズガイド
    www.mispo.co.jp/document/no4guid.pdf

    画面コピー










    [追記]

    ただ、ちょっと大掛かり過ぎかも、みたいな感もあって、CGのAPIで簡素なものを自作した方がやり易いかも、、、

    スマート・コンフィグレータ ユーザーズマニュアル RX APIリファレンス
    www.renesas.com/document/mat/smart-configurator-users-manual-rx-api-reference

    画面コピー



     

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

    実験のネタになるかどうか分かりませんけれども、昨日ちょっと書いたFITのAPIで気になるAPIというのは、以下の画面コピーの通りのソフトウェア割り込み制御APIです。(タスクという言葉が用いられていますけれども、RTOSのタスクを対象としているのでは無いみたいです。もうちょっと素朴に、関数ポインタと引数ポインタのペアのことみたいです。) このAPIは、(今回のことで意義は薄れてしまいましたけれども)昨日のお話のような用途にも使えるかも知れないのと、以下の画面コピーの最初のNORTiのマニュアルに書かれている小技に使えるかも知れないです。

    スマートコンフィグレータのBSPにソフトウェア割込みの項目があったのは知ってたんですが、何に使うんだろうぐらいしか思ってませんでした。こういう事だったんですね!

    じつはRXシリーズ出る前にほぼ同じことをタイマ割込み使ってやってたのを思い出しました。
    OS無しの運用で、最低割込みレベルの超短いタイマ割込みをおこして多重割込み許可で長い処理させてました。処理内容は固定でしたが。そのとき私も「裏タスク」って命名してました。
    なので「うんうんわかる!わかるぞー!」と思いながらそのAPI読みましたw

    あとNORTiの小技的には、あの「ソフト割込み使ったFITとNORTiの同居」(古川制御方式)の場合、

    割り込みレベルの高い順に

    FIT/CGの割込みレベル
    NORTiのカーネル割込み禁止レベル
    NORTi使ったドライバなどの割込みレベル
    ソフトウェア割り込み(最低の割込みレベル)

    としたほうが、FIT/CGがNORTiに邪魔されなくて高速に動けるってことでしょうか。要検討ですかね。

    ただ、ちょっと大掛かり過ぎかも、みたいな感もあって、CGのAPIで簡素なものを自作した方がやり易いかも、、、

    ですねえ。私もそう思います。

  • ふぐりんです
    ka.makiharaさんこんにちは。

    私もNoMaYさんのプログラムを使ったNORTiとFITの実験をしました。
    以下のスレッドで結果を報告していますのでお知らせします。

    MISPOさんのNORTiをRX SmartConfiguratorと一緒に使いたい場合の課題と対策を考察してみるスレッド
    japan.renesasrulz.com/.../mispo-norti-rx-smartconfigurator