”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

cc-rxでのプリプロセッサ指令

お世話になります。

RXコンパイラcc-rxにおいてプリプロセッサ命令には下記のような物はないと認識したので宜しいですよね?

これらはGCCの場合に有効なプリプロセッサ命令ですよね。

DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTID01EQ=0 -DMODEL=NassFCM -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO

 

マイコンの変更に伴うコード移植をしております。前マイコンはTIのRM46 ARM系出会ったため、GCCでした。

どうぞ宜しくお願いします。

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

    ほやさん指摘のウェブページを見て、BIN_RXという環境変数がlbgrxコマンド利用時は省略不可である、ということを初めて知りました、、、

    ところで、先日の件、コマンドを手入力したらどうなりましたでしょうか?

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

    まだ解決していないのですよね。私の認識は、こんな感じなのですけれども、、、

    (1) TIのARMマイコンよりルネサスさんのRXマイコンを使った方が、市場競争力の高い自社製品を開発出来そうだと感じている(よって、マイコンを乗り換えたい)が、MATLAB Embedded Coderを使うのが社内では当たり前になっているので、それが使えないのでは社内の賛同を得ることは難しい。

    (2) MATLAB Embedded Coderが、自身が生成したソースコード中の条件コンパイル文に対して、どういう場合にどんなdefineを有効にしてくるのか分からないので、MATLAB Embedded Coder上でビルドすることを早々に諦める訳にはいかない。

    (3) 理屈の上では(ドキュメント上は)、MATLAB Embedded Coderのコンパイラ対応機能を活用することでMATLAB Embedded Coder上でビルド出来る筈であるが(出来る筈だと思われるのだけれども)、何故か謎のエラーが発生してCC-RXの実行に失敗してしまう。(なお、まだ、仮にビルド出来るようになったとしても、ちゃんと動作するかどうか、ちゃんと動作するようにするにはどうすれば良いか、といった話は、まだまだ、これからである。) ちなみに、TIのARMマイコンでは、GNUARMがちゃんと実行出来て、ビルドも出来て、動作する物も出来ていた。

    (4) CC-RXの実行に失敗してしまう原因は、ルネサスさんにも心当たりが無い。(環境変数がどうのこうの話の発端は私のリプライの中の環境変数の話が発端なだけなのかも?、、、)

    基本的なアプローチは以下なのだとは思うのですが、、、

    (A) MATLAB Embedded Coderで、動作するかどうかは別問題として、まずは最小限のコードを生成するように設定して、MATLAB Embedded Coder上でビルド(しようと)して、実行される(筈の)ビルドコマンドの一覧 or makefileを入手する。

    ここで、場合分けがひとつ、発生します。

    (B-1) そうしたらビルド出来てしまった、とか?
    (B-2) それでもビルド出来ないことに変わり無し --> たぶん、こちらかな、と仮定しておきます

    (C) 同じコマンドをコマンドプロンプト上で実行するとどうなるか? --> たぶん、今ここですね

    ここで、場合分けがひとつ、発生します。

    (D-1) それでもビルド出来ない --> 空のmain()程度のmain.cをコマンドプロンプト上でCC-RXでビルド出来るか?
    (D-2) そうしたらビルド出来てしまった --> とっさに私が思い付くのは環境変数TEMP/TMPぐらいだったけれども、、、

    可能性的には、makefileベースのオープンソースソフトウェアでPCを変えたらビルド出来なくなった、というあたりのトピックスと同レベルではないかなぁ、という考えはあるものの、今まで自分は過去どうやってきたのか、いざとなると思い返せないのが申し訳無いですね、、、

    どうやっていたっけなぁ、、、

  • ほやさん

    ご教示ありがとうございます。CS+の場合で試してみます。

  • NoMaYさん

    おおよそご推察の通りです。

    (A)→(B-2)→(C)←今ここです。

    コマンドで実行する場合とEmbeddedCoder上で実行する際のエラーが異なっていました。

    InputFileが見つけられないため、E0511134:Input file "AirByp.c" is not found.が発報され、F0553200:Error occurred in executing 'macrx.exe' が判断されているのか?などと思っております。

    〇コマンドプロンプトの場合

    C:\Users\59692>"C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx" -isa=rxv2 -fpu -endian=big -dbl_size=8 -signed_char -signed_bitfield -auto_enum -bit_order=left -pack -lang=c99 -define=TERMFCN=1 -define=ONESTEPFCN=1 -define=MAT_FILE=0 -define=MULTI_INSTANCE_CODE=0 -define=INTEGER_CODE=0 -define=MT=0 -define=CLASSIC_INTERFACE=0 -define=ALLOCATIONFCN=0 -define=TID01EQ=0 -define=MODEL=NassFCM -define=NUMST=1 -define=NCSTATES=0 -define=HAVESTDIO -include=C:/Users/59692/Desktop/202102~1/Main -include=C:/Users/59692/Desktop/202102~1/Main/NassFCM_ert_rtw -include=C:/Program -include=C:/Users/59692/Desktop/202102~1/Main/Files -include=C:/Users/59692/Desktop/202102~1/Main/(x86)/Renesas -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin -include=C:/Users/59692/Desktop/HA11test/src/smc_gen -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Nass -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic -include=C:/PROGRA~1/MATLAB/R2017A~1/extern/include -include=C:/PROGRA~1/MATLAB/R2017A~1/simulink/include -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src/ext_mode/common -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/ert "AirByp.c"
    RX Family C/C++ Compiler V3.03.00 [20 Nov 2020]
    RX Family Assembler V3.03.00.02 [11 Nov 2020]
    Renesas Optimizing Linker V3.03.00  [01 Oct 2020]
    Copyright (C) 2011, 2020 Renesas Electronics Corporation
    Copyright (C) 2003-2020 University of Illinois at Urbana-Champaign.
    All rights reserved.
    E0511134:Input file "AirByp.c" is not found.

    〇EmbeddedCoderの場合

    ...### ツールチェーンの使用: Renesas | gmake makefile (RX64M)
    ### 'C:\Users\59692\Desktop\20210222_Simulink Share\Main\NassFCM_ert_rtw\NassFCM.mk' を作成しています...
    ### 'NassFCM' をビルドしています: "C:\PROGRA~1\MATLAB\R2017A~1\bin\win64\gmake"  -f NassFCM.mk postbuild all
    "C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx" -isa=rxv2 -fpu -endian=big -dbl_size=8 -signed_char -signed_bitfield -auto_enum -bit_order=left -pack -lang=c99 -define=TERMFCN=1 -define=ONESTEPFCN=1 -define=MAT_FILE=0 -define=MULTI_INSTANCE_CODE=0 -define=INTEGER_CODE=0 -define=MT=0 -define=CLASSIC_INTERFACE=0 -define=ALLOCATIONFCN=0 -define=TID01EQ=0 -define=MODEL=NassFCM -define=NUMST=1 -define=NCSTATES=0 -define=HAVESTDIO -include=C:/Users/59692/Desktop/202102~1/Main -include=C:/Users/59692/Desktop/202102~1/Main/NassFCM_ert_rtw -include=C:/Program -include=C:/Users/59692/Desktop/202102~1/Main/Files -include=C:/Users/59692/Desktop/202102~1/Main/(x86)/Renesas -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin -include=C:/Users/59692/Desktop/HA11test/src/smc_gen -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Nass -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic -include=C:/PROGRA~1/MATLAB/R2017A~1/extern/include -include=C:/PROGRA~1/MATLAB/R2017A~1/simulink/include -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src/ext_mode/common -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/ert "AirByp.c"
    RX Family C/C++ Compiler V3.03.00 [20 Nov 2020]
    RX Family Assembler V3.03.00.02 [11 Nov 2020]
    Renesas Optimizing Linker V3.03.00  [01 Oct 2020]
    Copyright (C) 2011, 2020 Renesas Electronics Corporation
    Copyright (C) 2003-2020 University of Illinois at Urbana-Champaign.
    All rights reserved.
    AirByp.c:
    F0553200:Error occurred in executing 'macrx.exe'
    gmake: *** [AirByp.obj] Error 1
    ### 次のモデルに対するビルド プロセス:'NassFCM' はエラーのため中止されました。

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

    これは、コマンドプロンプトの場合は、CC-RXのコマンドを実行する前にカレントディレクトリを変更しておく必要がありますね。たぶん、以下のコマンドを実行してからCC-RXを実行する必要があると思います。

    C:\Users\59692>cd /d C:\Users\59692\Desktop\20210222_Simulink Share\Main\NassFCM_ert_rtw


    たぶんプロンプトが以下のように変わると思います。

    C:\Users\59692\Desktop\20210222_Simulink Share\Main\NassFCM_ert_rtw>


    その後、dirコマンドを打つとAirByp.cがカレントディレクトリに存在することが表示されると思うのですが、、、、

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

    あと、(動いていれば余り気にしない事項ですが)動かないのであれば、全体的にフォルダのパスが危うい気がします。

    (A) WindowsのデスクトップにCS+やMATLABをインストールしているのですか?(最近のインストール事情はそういうものなのかな?)
    (B) フォルダのパス中に半角スペースが使われている箇所がありますね、、、

    私は古い人間ということもあって、パスに半角スペースが入るような場所には、ツールをインストールしませんし、プロジェクト(e2 studioであればワークスペース)も作らないです。(それだけでトラブルの可能性が減りそうなのですので、、、くどいですが、私は古い人間ということもありまして、、、)

    もし、ツールをインストールし直すことがあれば、その時にはC:\Renesasにインストールしてみるのも一案かも知れません。

  • NoMaYさん

    こんにちは。コマンドプロンプトについて御教示ありがとうございます。

    さっそく、朝一で試みます。

  • NoMaYさん

    (A)CS+やMATLABはCドライブにインストールしていますよ。ただ、.c、.hのようなファイルはフォルダをデスクトップににおいています。

    (B)フォルダパスに半角が入っているとは「20210222_Simulink Share」のことですね。この点も修正してみます。

    どうもありがとう御座います。

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

    > CS+やMATLABはCドライブにインストールしていますよ。

    ああっ、そういえば以下になっていましたね。失礼しました。

    "C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx"


    でも、以下もあって、先ほどの私のリプライはこちらに反応してしまったのでした。何だろう、、、

    -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin

     

  • NoMaYさん、こんにちは。

    〇コマンドラインにてカレントディレクトリを変更して、ccrxを実行したところ、EmbeddedCoderにて実行したときと同じように「F0553200:Error occurred in executing 'macrx.exe'」にて止まりました。

    C:\Users\59692\Desktop\20210222_Simulink Share\Main\NassFCM_ert_rtw>"C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx" -isa=rxv2 -fpu -endian=big -dbl_size=8 -signed_char -signed_bitfield -auto_enum -bit_order=left -pack -lang=c99 -define=TERMFCN=1 -define=ONESTEPFCN=1 -define=MAT_FILE=0 -define=MULTI_INSTANCE_CODE=0 -define=INTEGER_CODE=0 -define=MT=0 -define=CLASSIC_INTERFACE=0 -define=ALLOCATIONFCN=0 -define=TID01EQ=0 -define=MODEL=NassFCM -define=NUMST=1 -define=NCSTATES=0 -define=HAVESTDIO -include=C:/Users/59692/Desktop/202102~1/Main -include=C:/Users/59692/Desktop/202102~1/Main/NassFCM_ert_rtw -include=C:/Program -include=C:/Users/59692/Desktop/202102~1/Main/Files -include=C:/Users/59692/Desktop/202102~1/Main/(x86)/Renesas -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Nass -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic -include=C:/PROGRA~1/MATLAB/R2017A~1/extern/include -include=C:/PROGRA~1/MATLAB/R2017A~1/simulink/include -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src/ext_mode/common -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/ert "AirByp.c"
    RX Family C/C++ Compiler V3.03.00 [20 Nov 2020]
    RX Family Assembler V3.03.00.02 [11 Nov 2020]
    Renesas Optimizing Linker V3.03.00  [01 Oct 2020]
    Copyright (C) 2011, 2020 Renesas Electronics Corporation
    Copyright (C) 2003-2020 University of Illinois at Urbana-Champaign.
    All rights reserved.
    AirByp.c:
    F0553200:Error occurred in executing 'macrx.exe'

    〇ok.cファイルを作成して、ccrxを呼び出してみたところ、「F0553200:Error occurred in executing 'macrx.exe'」にて止まりました。

    C:\Users\59692\Desktop\20210222_Simulink Share\Main\NassFCM_ert_rtw>"C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx" -isa=rxv2 -fpu -endian=big -dbl_size=8 -signed_char -signed_bitfield -auto_enum -bit_order=left -pack -lang=c99 -define=TERMFCN=1 -define=ONESTEPFCN=1 -define=MAT_FILE=0 -define=MULTI_INSTANCE_CODE=0 -define=INTEGER_CODE=0 -define=MT=0 -define=CLASSIC_INTERFACE=0 -define=ALLOCATIONFCN=0 -define=TID01EQ=0 -define=MODEL=NassFCM -define=NUMST=1 -define=NCSTATES=0 -define=HAVESTDIO -include=C:/Users/59692/Desktop/202102~1/Main -include=C:/Users/59692/Desktop/202102~1/Main/NassFCM_ert_rtw -include=C:/Program -include=C:/Users/59692/Desktop/202102~1/Main/Files -include=C:/Users/59692/Desktop/202102~1/Main/(x86)/Renesas -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Nass -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic -include=C:/PROGRA~1/MATLAB/R2017A~1/extern/include -include=C:/PROGRA~1/MATLAB/R2017A~1/simulink/include -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src/ext_mode/common -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/ert "ok.c"
    RX Family C/C++ Compiler V3.03.00 [20 Nov 2020]
    RX Family Assembler V3.03.00.02 [11 Nov 2020]
    Renesas Optimizing Linker V3.03.00  [01 Oct 2020]
    Copyright (C) 2011, 2020 Renesas Electronics Corporation
    Copyright (C) 2003-2020 University of Illinois at Urbana-Champaign.
    All rights reserved.
    ok.c:
    F0553200:Error occurred in executing 'macrx.exe'

    〇ちなみにですがEmbeddedCoderにて出力された別の.cファイルについても実施してみたところ、「Types.h(113):E0520040:Expected an identifier」というエラーで止まりました。これはTypes.hが読めていないことを示していると認識しております。

     

    〇-include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/binに関してはどの辺が気になられているのでしょうか?

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

    運良く(?)手元のPCのコマンドプロンプト上で同じ原因による(ものだろうと思われる)現象が再現しました。 次のステップはこの単純なmain.cがコマンドプロンプト上でコンパイル出来ない原因を探す訳ですが、まずはオプションの種類を絞って(削って)試してみることですね。ちょっとやってみます。

    以下、画面コピーです。


    なお、以下ですが、インクルードパスの内容からのイメージですと、以下の場所にCS+がインストールされているような印象がしたのです。

    > でも、以下もあって、先ほどの私のリプライはこちらに反応してしまったのでした。何だろう、、、
    > -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin

    (binフォルダがインクルードパスに指定されている是非は別にして)
    以下の場所にCS+がインストールされているような印象がするのですが、、、

    C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+
     

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

    原因が分かりました。以下の画面コピーの通り、環境変数 Path にCC-RXのパスを追加する必要がありますね。

    以下、画面コピーです。

  • NoMaYさん

    またしてもありがとうございます。最初に指摘頂いていた環境変数に原因があったのですね。早速明日リトライします。

    さらに御教示いただきたいのです。ネットで調べてみたものの環境変数とはいったい何なのかがいまいち理解出来ていないのが正直なところです。環境変数はCC-RXを稼働させるために、何に対して設定するものなのでしょうか?

    どうぞ宜しくお願いいたします。

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

    環境変数の一般論については、やっぱりWikipediaに頼って、以下のような感じですね。

    ja.wikipedia.org/wiki/環境変数#利用

    環境変数は様々な用途で利用される。


    CC-RX自体にとっては、以前にほやさんが指摘したページに記載されていた以下の通りなのですが、まだMakeも無かったような数十年昔のコンパイラの便利技の名残り、といったものでしょうか、、、

    数十年昔にはWindowsは無く、UNIXとかCP/MとかMS-DOS/PC-DOSとかのキャラクタ端末環境でしたが、コマンドラインオプションで指定するオプションの一部のものについては環境変数に事前に登録しておくことが出来るようになっていて、それにより手入力時の入力文字数を少なくすることが出来るようになっていたのですね。便利だったのですよ、、、(遠い目、、、)

    ただ、便利技の範疇を外れて、何というか、コマンドラインオプションでは指定出来ずに環境変数だけでしか指定出来ないようなものも出てくるようになって(ひょっとしたら結構最初からそういうものもあったかも)、訳が分からなくなっていますね、、、、

    top > コンパイラ編 > コマンド・リファレンス > 環境変数 - CS+ online help
    tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/latest/CS+.chm/Compiler-CCRX.chm/Output/ccrx02c0300y.html

    2.3 環境変数
    環境変数の一覧を以下に示します。
    表 2.2


    正直なところ、環境変数というものが一般の人(ソフトウェア開発者含む)の目に触れることが殆どなくなった今の時代に、CC-RXに省略不可の環境変数が存在していたことは、失礼ながら、ちょっとCC-RXの開発者さんのセンスが疑われてしまっても不思議は無いような気もしなくも無いですね、、、もっとも、他方で、統合開発環境が何でも面倒を見てくれるのだから誰も指摘しなくなっているので意識されていない、意識されていないものは直しようが無い、というべきかも知れませんけれども、、、(日常生活では、身だしなみ、みたいな?)

    [追記]

    > 環境変数はCC-RXを稼働させるために、何に対して設定するものなのでしょうか?

    ちょっと極端には、MATLAB Embedded Coderのコンパイラ対応機能で環境変数 Path を以下にしてしまっても良さそうに思います。コンパイラ対応機能に、環境変数を操作するものって、用意されていないでしょうか?

    以下、コマンドプロンプトでのPath設定例の画面コピーです。


    [追記2]

    ほやさんが指摘したページを見直してみたところ、先日気付いたBIN_RXの他に、Pathが全くの省略不可である、ということになっていますね、、、ひょっとして、今回のエラーが起きるからだったのかも、、、

    > ほやさん指摘のウェブページを見て、BIN_RXという環境変数がlbgrxコマンド利用時は省略不可である、ということを初めて知りました、、、

  • NoMaYさん、ほやさん

    お世話になっております。

    環境変数を書き込んで、cccrxオプションを減らしたところ状況が好転したように見えます。

    これからどのオプションで引っ掛かっているのかを確認してみます。

    ありがとうございます。

    "C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.03.00\Bin/ccrx" -isa=rxv2 -define=TERMFCN=1 -define=ONESTEPFCN=1 -define=MAT_FILE=0 -define=MULTI_INSTANCE_CODE=0 -define=INTEGER_CODE=0 -define=MT=0 -define=CLASSIC_INTERFACE=0 -define=ALLOCATIONFCN=0 -define=TID01EQ=0 -define=MODEL=NassFCM -define=NUMST=1 -define=NCSTATES=0 -define=HAVESTDIO -include=C:/Users/59692/Desktop/202102~1/Main -include=C:/Users/59692/Desktop/202102~1/Main/NassFCM_ert_rtw -include=C:/Program -include=C:/Users/59692/Desktop/202102~1/Main/Files -include=C:/Users/59692/Desktop/202102~1/Main/(x86)/Renesas -include=C:/Users/59692/Desktop/202102~1/Main/Electronics/CS+/CC/CC-RX/V3.03.00/bin -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Nass -include=C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic -include=C:/PROGRA~1/MATLAB/R2017A~1/extern/include -include=C:/PROGRA~1/MATLAB/R2017A~1/simulink/include -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/src/ext_mode/common -include=C:/PROGRA~1/MATLAB/R2017A~1/rtw/c/ert "AirByp.c"
    RX Family C/C++ Compiler V3.03.00 [20 Nov 2020]
    RX Family Assembler V3.03.00.02 [11 Nov 2020]
    Renesas Optimizing Linker V3.03.00  [01 Oct 2020]
    Copyright (C) 2011, 2020 Renesas Electronics Corporation
    Copyright (C) 2003-2020 University of Illinois at Urbana-Champaign.
    All rights reserved.
    AirByp.c:
    C:/Users/59692/Desktop/202102~1/Main/AppInterface/Generic/aaa.h(65):E0520020:Identifier "_Bool" is undefined