FITの割込みハンドラの実装について

FITで割込みハンドラを使用すると自動生成で

R_BSP_PRAGMA_STATIC_INTERRUPT などで作成されていますが、

ビルドされたバイナリを逆アセンブラで見ると、

pushm r14-r15

pushm r1-r5

<ハンドラ呼び出し>

の様になっています。

R_BSP_PRAGMA_STATIC_INTERRUPT が pushm に展開(?)される仕組みはどのようになっているのか

ご存じの方がおられましたら、是非、お教えいただきたく。

pushm となっている部分を独自の実装に変更したいと考えているのですが、

#pragma interrupt で置き換えられるのは分かるのですが・・・CC-RX の仕様?

Parents
  • ka.makiharaさん、こんにちは。NoMaYです。

    そうです。CC-RXの仕様です。以前のリプライに書きましたが、まずマクロ展開でCC-RXの#pragma interrupt○○○へ展開されます。そして、その先はCC-RXが#pragma interrupt○○○の仕様に従ってコードを生成しているだけです。

    r_flash_rx のサンプルについて
    japan.renesasrulz.com/cafe_rene/f/forum5/7726/r_flash_rx/40473#40473

    ところで、どういうコードへ置き換えたいのですか?多重割り込み許可とかですか?あるいは、μITRONとかですか?

  • NoMayさん、こんにちは。

    mispoさんのRTOSを使用しているのですが、

    割込みハンドラの入り口と出口に、「RTOS管理用のAPIを入れてください」と指示がありまして、

    CGで作成したコンポーネントには

    /* Start user code for などがあり、任意に追加できたので、問題なかったのですが、

    FITの場合、これが出来なくて、とりあえず挿入しています、

    挿入箇所が、どのタイミングで上書きされて無くなってしまうのかが良くわからず、

    色々と試しています。

    #pragma interrupt ・・・での置き換えを調整できるのなら、一番スマートかな、と思いまして。

    結局のところFITの自動生成がどのようにコードを生成しているのか分からないというのがあるのですが、

    スマートコンフィグレータでFITモジュールの設定を色々変更しても、ヘッダーファイルの記述が変わるのみで

    Cコードは上書きされず、クリーンしても変わらず。

    コンポーネントを削除して、再度インポートした時はさすがに消えていましたけど、これはCGでも同じですし。

    ふと、以前フォーラムで、CGとFITについて教えて頂いた記憶があるのですが、

    CGはコードでパラメータ等を直接指定、なので引数等が少なく

    FITはパラメータで設定。

    ということは、CGだから、/* Start user code for が必要なのであって

    FITの場合はヘッダーのパラメータが変わるだけなので、コードは同じ、だから/* Start user code for 

    は不要。と考えると、FITで生成されたコードにユーザーコードを埋め込んでも、上書きはされない・・・

    とも思えるのですが、どうでしょう?

  • ka.makiharaさん、こんにちは。NoMaYです。

    RXスマートコンフィグレータに実はFITのコード生成(というかソース生成)の規則を制御する設定画面があるのです。以下の1枚目の画面コピーの [コード生成設定]→[生成条件] なのですが、以下の通りの意味なのです。(記憶違いの可能性もありますけれども、昔はFITモジュールの設定であることが分かり易かったような気もするのですけれども。)


    [コード生成設定]→[生成条件]

    選択肢
    ・コンポーネントが存在する場合は何もしない ⇒ FITモジュールのソースが生成済みならそのソースは上書きしない
    ・既存のコンポーネントに上書きする ⇒ FITモジュールのソースが生成済みでもそのソースを上書きする


    なお、脱線しますけれども、FITモジュールをバージョンアップする時、もしくは.scfgファイルと実際に生成されているFITモジュールのソースのバージョンが不一致だった時、などに、何か直感に反する挙動が見受けられた、ように記憶しています。(バージョンアップ時にも設定が効いていて古いままソースが残る、とか、新規追加されたソースのみ新しいソースが追加される、とか、新バージョンで削除されたソースに関しては取り残されたソースで必要でも削除されてしまう、とか、そんな経験をした記憶があります。)

    以下、e2 studioのRXスマートコンフィグレータ設定画面の画面コピーです。

    [コード生成設定]→[生成条件] : FITモジュールの設定です
    [コード生成設定]→[trashへのバックアップ数 (0-20)] : FITモジュールとCGコンポーネントに共通です
    [コード生成設定]→[API関数出力 : CGコンポーネントの設定です
    [依存コンポーネントの確認と追加] : FITモジュールの設定です


    [エンコード] : CGコンポーネントの設定です(というか端子設定エクスポート機能関連なのでFITモジュールも無関係では無いけれども)
    [コード生成設定] : CGコンポーネントの設定です(最近はr_pincfgフォルダ内生成ソースではFITモジュール系のソースにも適用される)



    [関連リンク]

    RXスマート・コンフィグレータ ユーザーガイド: e² studio 編
    R20AN0451JS0140 Rev.1.40 Pages 88 2021.06.21
    www.renesas.com/jp/ja/document/mat/rx-smart-configurator-users-guide-e-studio-rev140

    スマート・コンフィグレータ 製品ページ (なのか?あれあれ??こんなのだったっけ???)
    www.renesas.com/jp/ja/software-tool/smart-configurator
     

Reply
  • ka.makiharaさん、こんにちは。NoMaYです。

    RXスマートコンフィグレータに実はFITのコード生成(というかソース生成)の規則を制御する設定画面があるのです。以下の1枚目の画面コピーの [コード生成設定]→[生成条件] なのですが、以下の通りの意味なのです。(記憶違いの可能性もありますけれども、昔はFITモジュールの設定であることが分かり易かったような気もするのですけれども。)


    [コード生成設定]→[生成条件]

    選択肢
    ・コンポーネントが存在する場合は何もしない ⇒ FITモジュールのソースが生成済みならそのソースは上書きしない
    ・既存のコンポーネントに上書きする ⇒ FITモジュールのソースが生成済みでもそのソースを上書きする


    なお、脱線しますけれども、FITモジュールをバージョンアップする時、もしくは.scfgファイルと実際に生成されているFITモジュールのソースのバージョンが不一致だった時、などに、何か直感に反する挙動が見受けられた、ように記憶しています。(バージョンアップ時にも設定が効いていて古いままソースが残る、とか、新規追加されたソースのみ新しいソースが追加される、とか、新バージョンで削除されたソースに関しては取り残されたソースで必要でも削除されてしまう、とか、そんな経験をした記憶があります。)

    以下、e2 studioのRXスマートコンフィグレータ設定画面の画面コピーです。

    [コード生成設定]→[生成条件] : FITモジュールの設定です
    [コード生成設定]→[trashへのバックアップ数 (0-20)] : FITモジュールとCGコンポーネントに共通です
    [コード生成設定]→[API関数出力 : CGコンポーネントの設定です
    [依存コンポーネントの確認と追加] : FITモジュールの設定です


    [エンコード] : CGコンポーネントの設定です(というか端子設定エクスポート機能関連なのでFITモジュールも無関係では無いけれども)
    [コード生成設定] : CGコンポーネントの設定です(最近はr_pincfgフォルダ内生成ソースではFITモジュール系のソースにも適用される)



    [関連リンク]

    RXスマート・コンフィグレータ ユーザーガイド: e² studio 編
    R20AN0451JS0140 Rev.1.40 Pages 88 2021.06.21
    www.renesas.com/jp/ja/document/mat/rx-smart-configurator-users-guide-e-studio-rev140

    スマート・コンフィグレータ 製品ページ (なのか?あれあれ??こんなのだったっけ???)
    www.renesas.com/jp/ja/software-tool/smart-configurator
     

Children
  • NoMaYさん、こんにちは。

    e2 にこのような設定画面があったのですね。

    早速と思ってみたら、何故かこちらのe2設定画面には 「Renesas」の項目すら、無い・・・

    e2のバージョン?(2022-04)

    以前は「Renesas」の項目があったような気がするのですが、

    いつの間にか消えてる?

  • ka.makiharaさん、こんにちは。NoMaYです。

    > 以前は「Renesas」の項目があったような気がするのですが、
    > いつの間にか消えてる?

    場所が違いますよ。

    誤) プロジェクトのプロパティ
    正) メニュー [ウィンドウ]→[設定] の [設定ダイアログ]

    それから、もう一方はそういうことだったのですね。納得がいきました。

    > たまたま、なのか、今のコンポーネントではCGを使用しているものについては
    > ***users.c に #pragma interrupt でハンドラが定義されているものばかりで、
    > /* Start user でなんとか対応できています。

  • NoMaYさん、ありがとうございます。

    「設定」を見ているところが違っていたのですね、画面確認できました。

    ついでに、trash いらないなー、思っていたので、こちらも 0に設定できてよかったです。