RX66N + RI600V4 環境で r_fwup によるセルフアップデートは可能?

こんにちは、よしとです。

r_fwup 1.06 がサポートしている環境には RI600V4 が動作しているシステムは含まれていないと思います。

しかし、RX66N + RI600V4 のシステムで何とかセルフアップデートを実現したいと考えており、RI600V4 に対して何らかの処置をすれば動作できるのではないかと考えていろいろと試しています。
やりたいことは、ユーザコマンドを処理するタスクでファームウェアアップデートコマンドを認識したら、SCI経由のファームアップ機能を起動してファームのセルフアップデートをDUAL modeで行うという事です。

これを実現しようとして色々やってみているのですが、r_flash_fcu.c 内の Excep_FCU_FRDYI() から flash_ready_isr_handler() を呼んでいる部分までは走っていることが追跡できるのですが、その後 _RI_sys_dwn() に捕まってしまいます。
_RI_sys_dwn() 内でパラメータを確認したところ、type=-1, inf1=-25, inf2=3, inf3=213440(不定値)となっており、「カーネル管理割り込みハンドラ終了時点で,PSW.IPL >カーネル割り込みマスクレベルである。」というエラーで捕まったものと思われます。
PSW.IPL をレジスターウィンドウで確認したところ、0 でした。

この状況はファームアップを開始する直前に dis_dsp() をコールしてみたり loc_cpu() をコールしてみたりしても同様でした。

アップデートを開始する前にRTOSに対して何か処理をすれば回避できるものでしょうか。

何かお分かりになる方がいらっしゃいましたらご教授頂けましたら幸いです。

以上、よろしくお願いいたします。

Parents
  • よしと さん、こんにちは。NoMaYです。

    > > (3) カーネルに登録済みの割り込みの割り込み優先順位を全て書き出すとどうなっていますでしょうか?
    > 「カーネルに登録済みの割り込み」は何をお答えすればよろしいでしょうか。

    CS+のオンラインヘルプで、以下の静的APIで「カーネル管理割り込み」として登録(すみません、定義、とした方が良かったですかね)した割り込みのこと、を指したつもりでした。実は、私は、かふぇルネで今までに何度かμITRON系RTOSの質問に返事をしていますが、業務でゴリゴリ使ったことは無く、それどころか、ほとんど触ったことが無いです。(さらには、このかふぇルネで何度も何度もリプライしていますが、ガチの組み込みシステムを開発した経験も殆ど無いです。ただ、ヘルプなり、ユーザーズマニュアルなりを、その都度調べてみていますが、多くの問題の解決のお手伝いは出来ていたようです。)

    top > RI600V4環境 > コーディング編 > システム・コンフィギュレーション・ファイル > 可変ベクタ情報(interrupt_vector[])
    19.18 可変ベクタ情報(interrupt_vector[])
    tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V8.09.00/CS+.chm/Coding-RI600V4.chm/Output/cf_DEF_INH.html

    19.18 可変ベクタ情報(interrupt_vector[])

    ここでは,RX MCUの可変ベクタに設定する割り込みハンドラを定義します。
    未定義の割り込みが発生した場合は,システム・ダウンとなります。


    3 ) カーネル管理割り込みの指定(os_int)

    - 説明
    この割り込みがカーネル管理割り込みかどうかを定義します。
    カーネル割り込みマスクレベル(system_IPL)以下の割り込み優先レベルの割り込みはカーネル管理割り込み,それ以外の割り込みはカーネル管理外割り込みとして定義する必要があります。
    なお,カーネル割り込みマスクレベル(system_IPL)が15の場合は,すべての可変ベクタ割り込みはカーネル管理割り込みとする必要があります。

    - 定義形式
    シンボル

    - 定義範囲
    以下のいずれか。
    YES: カーネル管理割り込み
    NO: カーネル管理外割り込み

    - 省略時の扱い
    省略不可


  • NoMaYさん、こんにちは。 よしとです。

    コメントありがとうございます。

    調べてみましたところ、下記の様に Excep_FCU_FRDYI() がOS管理割り込みとして登録されていました。(Excep_FCU_FIFERR() も同じく)

    interrupt_vector[23]{

        os_int = YES;
        entry_address = Excep_FCU_FRDYI();
        pragma_switch = E,ACC;
    };

    os_int = NO; として走らせてみた所、Excep_FCU_FRDYI() から抜ける時に _RI_sys_dwn__() に捕まらなくなったようです。 これでやりたいことができるのかどうかは判然としませんが、少なくともデバッグを続けられる状態になったような気がしますので、検討してみたいと思います。

    また何かわからないことが有りましたら質問させていただくかもしれませんが、よろしくお願いいたします。

    アドバイスありがとうございました。

Reply
  • NoMaYさん、こんにちは。 よしとです。

    コメントありがとうございます。

    調べてみましたところ、下記の様に Excep_FCU_FRDYI() がOS管理割り込みとして登録されていました。(Excep_FCU_FIFERR() も同じく)

    interrupt_vector[23]{

        os_int = YES;
        entry_address = Excep_FCU_FRDYI();
        pragma_switch = E,ACC;
    };

    os_int = NO; として走らせてみた所、Excep_FCU_FRDYI() から抜ける時に _RI_sys_dwn__() に捕まらなくなったようです。 これでやりたいことができるのかどうかは判然としませんが、少なくともデバッグを続けられる状態になったような気がしますので、検討してみたいと思います。

    また何かわからないことが有りましたら質問させていただくかもしれませんが、よろしくお願いいたします。

    アドバイスありがとうございました。

Children
No Data