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でした。

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

Parents
  • NoMaYさん、ほやさん

    コメント有難うございます。ご推察の通りMathworks社のSimulink,Matlab,EmbddedCorderを利用して、ブロックからC原語を出力し、Makeファイルを作製して実行ファイルを作成しようとしている段階です。これまでTIマイコンでしたが、ルネサス製マイコンへのリプレースを試みています。

    この過程においてmakeファイルを作成するのですが、EmbeddedCorderがーDではじまるオプションを呼び出すため、CC-RXがーDを認識できず、今回の質問?となりました。

    ただ、TIマイコンでのコンパイラは-Dオプションを認識していたのでした。

    どなたかMathworks社のEmbeddedCoderを利用してRXマイコンの実行ファイルを作製している方をご存知ないでしょうか。

    経験をお借りしたく。。。。

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

    > EmbeddedCorderがーDではじまるオプションを呼び出す

    この部分の意味が分からないです。というか、コンパイラが異なればオプションの指定方法が異なるのは普通の事態ですので、どういう経緯で-Dオプション(GNUARM)とほやさん指摘の-defineオプション(CC-RX)の違いの件がクローズアップされているのか分からないのです。

    自分が想像出来るのは、MATLABでソースコードと一緒にmakefileも生成されるけれども、そのmakefileがGNUARM用になっているのをCC-RX用に書き換えようとしている、ところまでしか想像出来ないのです。すみません。

    それでも、一般的にはそのような場合は以下の何れかの対処をするものだと思うのです、、、

    (1) makefileを手作業で書き換える。もし、生成される度に差異が生じるのであれば、毎回書き換える
    (2) 毎回書き換えるのが煩雑で、且つ、スキルがあれば、何らかのスクリプト言語で書き換えを自動化する

    スクリプト言語としては、Linuxであれば古典的にはsed,awk,perlなどがあり現代的にはruby,pythonなどかと思いますし、WindowsであればVBSscript,JScript,PowerShellとかだと思うのです。

    [追記]

    Embedded Coder
    組込みシステム用に最適化された C コードと C++ コードの生成
    jp.mathworks.com/products/embedded-coder.html

    Google検索: Embedded Coder
    www.google.com/search?q=Embedded+Coder

    [追記2]

    こういうやり方をする人はあまりいないと思いますが、私は過去に以下のような芸当をしたこともありました。

    (A) Windows(あるいはDOS時代だったかも)のコンソールアプリケーションとして、渡された引数を、あるコンパイラのものから別のコンパイラのものへ変換して、変換後のオプションで最終的にコンパイラを起動するラッパーアプリケーションを自分で書く

    [追記3]

    そういえば、昔、HEW+KPIT GCC環境で、HEWが渡して来たコマンドオプションファイルを引数にベタに展開してコンパイラを起動するwrapperコマンドが使われていた、という記憶が蘇って来ました。それだったかも、、、

  • 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

  • オプションに-lang=c99を加えると「F0553200:Error occurred in executing 'macrx.exe' 」が出ることが分かりました。

    一歩前進。

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

    > オプションに-lang=c99を加えると「F0553200:Error occurred in executing 'macrx.exe' 」が出る

    たぶん、加えないと

    > E0520020:Identifier "_Bool" is undefined

    ですかね?_BoolはC99で新規追加された言語仕様ですね、、、これは、文法チェックがパスしない段階では

    E0520020:Identifier "_Bool" is undefined

    文法チェックをパスすると

    F0553200:Error occurred in executing 'macrx.exe'

    ということなのではないかと、、、 ひょっとして、

    m: machine
    a: architecture
    c: compile とか code とか

    とかかも知れませんね、、、

  • NoMaYさん こんにちは。

    症状はNoMaYさんの記載されたとおりです。こういう時って、E0520020:Identifier "_Bool" is undefinedのエラーを消して行けば、ゴールにたどり着けるものなのでしょうか???

    m,

    a,

    c

    とはmacrxの最初の3語のことですか?

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

    > ゴールにたどり着けるものなのでしょうか???

    GNUARMでビルド出来ていたのですから、正しい対処をしていけば、ビルド出来るようになりますよ。ただし、間違った対処をしたら、遠回りすることになることもあるでしょうけれど、、、

    今回の_Boolは-c99を付けることが正しい対処だろうと、私は思います。それを、macrx.exeのエラーが出なくなったからといって、-c99を付けないで何かやろうとしたら、それは間違った対処だろうと思うのです、、、

    > macrxの最初の3語のことですか?

    そうです。

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

    > ゴールにたどり着けるものなのでしょうか???

    GNUARMでビルド出来ていたのですから、正しい対処をしていけば、ビルド出来るようになりますよ。ただし、間違った対処をしたら、遠回りすることになることもあるでしょうけれど、、、

    今回の_Boolは-c99を付けることが正しい対処だろうと、私は思います。それを、macrx.exeのエラーが出なくなったからといって、-c99を付けないで何かやろうとしたら、それは間違った対処だろうと思うのです、、、

    > macrxの最初の3語のことですか?

    そうです。

Children
  • NoMaYさん

    有難うございます。

    勇気が出ました!

  • > それを、macrx.exeのエラーが出なくなったからといって、-c99を付けないで何かやろうとしたら、それは間違った対処だろうと思うのです、、、
    同じくそう思います。正常にコンパイルできたから、その先に進んでmacrx.exeが呼ばれるようになったと考えます。
    ちなみにmacrx.exeもccrx.exeみたいに-v (version) オプションがあるのかなーと思って試してみたら、Macro Processorと表示されました。

    やっぱり主要な原因は環境変数が足りていないことではないかと考えます。
    CS+(e² studioでもいいんですが)で、ビルド時に使われている環境変数の指定を極力真似してみるのが近道じゃないかと思います。

  • ほやさん

    ありがとうございます。もしCS+にて特に環境変数を設定しない場合はデフォルトではどのような設定となるのでしょうか。これを確認できる術はないでしょうか?

  • CS+で「ビルドの前(後)に実行するコマンド」(共通オプションタブの下の方の「その他」の中にあります)に set  コマンドを書いてビルドしてみると、コンソールに環境変数がズラズラ表示されます。

  • ほやさん

    みえました。ありがとうございます。

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

    別スレッドに質問を投げられていたことから気になったのですけれど、ひょっとして、先へ進めていないのでしょうか?

    気になった別スレッドへの質問

    コマンドラインからccrxコンパイラを実行すると、「F0553200:Error occurred in executing 'macrx.exe' 」が出る
    japan.renesasrulz.com/cafe_rene/f/forum21/5213/ccrx-f0553200-error-occurred-in-executing-macrx-exe/37689#37689
     

  • NoMaYさん

    こんにちは。

    実はまだうまくいっていません。macrx.exeへのpathも正しく切れたと認識しています。

    Pathの文字数限界があることをルネサスさんから伺いました。これは問題ないようです。

    macrx.exeがうまく実行できない理由を探している状態です。

    CS+に生成された.c,.hファイルをインクルードしてビルドすると.hフィアルが参照できないとのエラーがたすうでるため、

    ヘッダファイルがうまく認識できていない場合には「F0553200:Error occurred in executing 'macrx.exe' 」が出ることがあるのか気にしている状態です。

    「F0553200:Error occurred in executing 'macrx.exe' 」エラーの原因の詳細が分かればよいのですが。。。

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

    敢えてくだけた言い回しをさせて貰えば、「最初に変なエラーに遭遇してしまったせいで、作業が迷走しているんじゃないかなぁ~?」という気がするのです。一般論的には、以下のようなコンパイラが内部で起動しているコマンドが起動出来ないなんてエラーはPath設定が足りない程度では出るものではなく、ヘッダが足りないとか、宣言がエラーになるとか、そういったエラーがごく普通に膨大に出たりして、それをひとつひとつ解決していくのが移植という作業なのです、、、そういった作業の一例として、かふぇルネでも気の遠くなるような以下のスレッドがあります、、、

    今どきPath設定が足りない程度で出るとは思わなかったエラー:

    F0553200:Error occurred in executing 'macrx.exe'

    かふぇルネでの気の遠くなるような移植にまつわるスレッド:

    Amazon FreeRTOSだそうです。ルネサスさんのRXは参加しないのかな?
    japan.renesasrulz.com/cafe_rene/f/forum21/4772/amazon-freertos-rx

    思ったのですが、移植に関する経験値が足らずに、ヘッダが足りないとか、宣言がエラーになるとか、そういったエラーがごく普通に膨大に出たりする、ということを受け入れることが出来ない状態なのかなぁ、という気がしました、、、

    だから、F0553200エラーが出ない代わりに、ヘッダが足りないとか、宣言がエラーになるとか、そういったエラーが出るのであれば、もしかすると膨大なエラーの量になるかも知れませんけど、地道に解決していくしかないよなぁ、と思うのです。(もちろん、経験値がアップすれば、いろんなテクニックが身に付けているんですけれどね、、、)

    ちなみに、確認ですけれど「(A)の状況では(B)は出ない」ですよね???出るとしたら私の認識が間違っていますね、、、

    (A) CS+に生成された.c,.hファイルをインクルードしてビルドすると.hフィアルが参照できないとのエラーが多数出る

    (B) 「F0553200:Error occurred in executing 'macrx.exe' 」が出る
     

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

    そういえば、以前、移植(移行)は初めて、という人の投稿がありましたが、参考までにURLを書いておきます。

    H8/3694からRX130への移行
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/6376/h8-3694-rx130
     

  • NoMaYさん

    こんにちは。(A)の状況では(B)は出ない」←その通りです。

    Matlab側のコマンドラインでも同様に.hファイルが参照出来ない。というエラーがでればよかったのですが。

    CS+側にインクルードして初めてわかりました。