machine.hについて

初めて質問を投稿させていただきます。至らぬ点はご容赦ください。

現在、CS+で作成したRX62N向けのプロジェクトを、e2studio(GCC)へ移植してします。

色々と試した結果、e2studioで新規に作成したプロジェクトへ、Cのファイルをインポートしたのですが、e2studio(GCC)にはmachine.hが無いということで止まっています。

使用しているのは割り込みの制御に関するclrpsw_i()とsetpsw_i()ぐらいだと思うのですが、何かスマートな解決策をご存知でしたらご教授ねがえないでしょうか。

よろしくお願いいたします。

  • higeさん、こんにちは。NoMaYと申します。

    RX向けGCCに関しては、以下のページにRX向け特有の仕様が記載されています。今回の件ですと、そのページに記載されている以下のビルトイン関数を組み合わせて、CC-RXのビルトイン関数と等価なインライン関数を自前machine.hに書く手がひとつです。また、もうひとつの手として、e2 studioにはCC-RXプロジェクトをRX向けGCCプロジェクトに変換する機能があって、その機能の為に互換machine.hが既に存在しています。(e2 studio 2023-01にもありました。) けれども、以下のスレッドで中を見た時ちょっと怪しげだなぁ、と思って、それ以来ずっとその印象が残ったままです。ただ、私の個人の過去の印象ですので、今はもうそんなことは無くなっている、かも知れません。

    Renesas - GNURX Migration Guide
    llvm-gcc-renesas.com/migration-guides/rx/index.html

    int __builtin_rx_mvfc (int)
    Generates the mvfc machine instruction which reads the control register specified in its argument and returns its value. The integer parameter corresponds to control registers as follows:
    `0x0 psw'
    `0x2 usp'
    `0x3 fpsw'
    `0x4 cpen'
    `0x8 bpsw'
    `0x9 bpc'
    `0xA isp'
    `0xB fintv'
    `0xc intb'
    。。。以下省略。。。


    void __builtin_rx_setpsw (int)
    Generates the setpsw machine instruction to set the specified bit in the processor status word.



    GNURX用のCCRXmachine.hとCCRXmachine.cというソースがe2 studioフォルダにありました(内容は概ね名前から予想される通りのものでした)
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/5046/gnurx-ccrxmachine-h-ccrxmachine-c-e2-studio

    私の場合はe2 studio 2023-01のSupportFilesフォルダの以下にありました。(私はフォルダ場所をカスタマイズしているで別の場所になっているかも知れません。もしそうでしたら、ごめんなさい。)

    .eclipse/com.renesas.platform_733684649/internal/projectgen/rx/Generate/CCRXConversion/inc/CCRXmachine.h

     

  • 「ファイル」メニュー → 「インポート...」で開くインポートウィザードの中にCC-RXのプロジェクトをGCC for RXに変換する機能があるので、まずはそれで作られたものを参考にすると良いと思います。
    NoMaYさんのスレッドでも議論されているように、変換されたものが全く同じ動作になる訳ではないのでそのまま動くとは限りません。参考と言うことで。

  • NoMaYさん

    とても詳しく教えていただきありがとうございます。

    今回は古いソフトの移植とあり、あまり時間をかける事が出来ないので、まずはCCRXmachineを使い動作を確認してみようと思います。

    またSupportFilesフォルダという存在を知らなかったので、ファイルを探すのに苦労しましたが、偶然にも下記方法で見つけることができました。ご存知かもしれませんが参考までに記載します。

    e2studio→ヘルプ→e2studioについて→インストールの詳細→SupportFoldersタグ

    また素朴な疑問なのですが、初めからe2studio(GCC)を使用しRXを動かしている方は、割込み禁止などをする場合にビルトイン関数を使われるのでしょうか?

    今後はe2studio(GCC)を使うことが増えそうなので、参考までに教えていただけたらと思います。

    本当にありがとうございました。助かりました。

  • ほやさん

    教えていただきありがとうございます。

    CS+プロジェクトをe2studioにインポートするのは試したのですが、コンパイラーがCC-RXのままだったので諦めていました。(プロパティーを弄れば行けそうな気もしましたが、ツールチェーンとかよくわからないもので)

    まさか更にCC-RXをGCCに変換する機能があったとは・・・

    早速試してみたところ、machine.hがCCRXmachine.hに置き換わっていました。

    何故かコンパイルするとCCRXmachine.hが無いと怒られるのですが・・・

    ちょっと今回は時間が無いので、プロジェクトにCCRXmachineをコピーする予定です。

    本当にありがとうございました。

    また困ったことがありましたら、フォーラムに書き込ませていただこうと思いますので、その際はよろしくお願いいたします

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

    > また素朴な疑問なのですが、初めからe2studio(GCC)を使用しRXを動かしている方は、割込み禁止などをする場合にビルトイン関数を使われるのでしょうか?

    たぶん、2パターンあると思うのです。(そして、RXスマートコンフィグレータが対応している品種では更にもう1パターンあります。)

    ● RXスマートコンフィグレータが対応していない品種

    初学者さん: ビルトイン関数を使っていると思います
    上級者さん: インラインアセンブラ記述している人も少なくないと思います(ビルトイン関数の場合は組み合わせる必要があって面倒なので)

    ● RXスマートコンフィグレータが対応している品種

    上記の2つに加えて、そもそもRXスマートコンフィグレータ(というかFIT)のBSPモジュールでCC-RXとRX向けGCC(とRX向けIARコンパイラ)で共通に使える関数(というか関数形式マクロ)が用意されていますので、それを使う人もいると思います。

    ちなみに、私はというと、BSPモジュールの共通関数形式マクロをRX向けGCCでは更にCC-RXと同じ関数名になるよう再度マクロ定義して使ったりします。(そうすると、CC-RX⇒RX向けGCCの時にソース本体側は変更しなくても済むからです。なお、その上に書いたように共通関数形式マクロをCC-RXで作業を始めた最初から使っているプロジェクトもあります。もっとも、私の場合、とても小さなプロジェクトばかりですけれども。)

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

    スマートコンフィグレータという方法もあるのですね。

    今回はRX62Nですので使えそうもありませんが、新しい基板を起こすことが出来たら使ってみたいと思います。

    なお私はアセンブラと聞くと思考が停止してしまうダメダメ人間ですので、多分、ビルトイン関数を使うことになりそうです。

    また何かありましたら、こちらに質問させていただくと思いますので、その際はどうぞよろしくお願いいたします。

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

    ごめんなさい、大勢に影響は無いのですけれども、RX向けGCCのビルトイン関数の仕様を私が勘違いしていたかも知れません。(だって、ペアになる別関数が全然離れたところに記載されていたのですから、、、) 引数はPSWのビット番号ですね、、、(RXマイコンの命令セットを確認したら、SETPSW命令もCLRPSW命令も操作対象はビット番号でした、、、)

    void __builtin_rx_setpsw (int)
    Generates the setpsw machine instruction to set the specified bit in the processor status word.

    void __builtin_rx_clrpsw (int)
    Generates the clrpsw machine instruction to clear the specified bit in the processor status word.

  • こんいちは、NoMaYさん。

    わざわざ調べた上で教えていただきありがとうございます。

    本来は私自身がその辺を確認しなければならないのですが、手が回らない状況です。

    ユーザーとしては、もっと簡単に扱えたらと思ってしまいますが、マイコンの設計をされている方々は、もっと大変な想いをしているのでしょうね。

    あと仕方がないとはいえ、e2studioまわりのドキュメントは英語ばかりで頭が痛いです。

    もしもWebの翻訳機能が無かったら・・・