CS+ for CC (V5.00.00)でのPDG2(v2.09.000)の使い方について

現在,RX62TのSCIbを使ってPCと通信をするためにPDG2を用いてプログラムを書こうと思っています.

しかし,生成されたソースコードを用いると下記のようなエラーが大量に出てきてしまいます.

 

(E) E0520101 i_src\iodefine_RPDL.h(72):E0520101:"st_ad" has already been declared in the current scope iodefine_RPDL.h 72 LED_test3.mtpj

(E) E0520101 i_src\iodefine_RPDL.h(133):E0520101:"st_bsc" has already been declared in the current scope iodefine_RPDL.h 133 LED_test3.mtpj

(E) E0520101 i_src\iodefine_RPDL.h(168):E0520101:"st_can" has already been declared in the current scope iodefine_RPDL.h 168 LED_test3.mtpj

・・・

(E) F0520035 i_src\r_pdl_definitions.h(31):F0520035:#error directive: "Double precision is not selected. Please change from single to double precision." r_pdl_definitions.h 31 LED_test3.mtpj

 

 

手順としては

・PDG2で設定を行って「ソースの生成」(CS+への直接の登録はできない?)

・生成された「(名前).pd2」以外のファイルをプロジェクトのフォルダにコピーしてプロジェクトに追加

・P_PG_(名前).hをソースにインクルード

・ビルド

 

どのように解決すればいいのか見当がつかないので助言をいただけたら幸いです.

 

ツリーの状態はこのようになっています(プロジェクトの名前は「LED_test3」です).

  • > (E) E0520101 i_src\iodefine_RPDL.h(72):E0520101:"st_ad" has already been declared in the current scope iodefine_RPDL.h 72 LED_test3.mtpj

    > (E) E0520101 i_src\iodefine_RPDL.h(133):E0520101:"st_bsc" has already been declared in the current scope iodefine_RPDL.h 133 LED_test3.mtpj

    > (E) E0520101 i_src\iodefine_RPDL.h(168):E0520101:"st_can" has already been declared in the current scope iodefine_RPDL.h 168 LED_test3.mtpj

    iodefine_RPDL.h が2重インクルード対策されてないのでは?

    > (E) F0520035 i_src\r_pdl_definitions.h(31):F0520035:#error directive: "Double precision is not selected. Please change from single to double precision." r_pdl_definitions.h 31 LED_test3.mtpj

    「単精度から倍精度にすれ」とあるのでその通りにすればよいのでは?

  • わわいです
    SCIで通信する程度なら、レジスタを数個設定してやる程度で簡単な通信ができるようになります。
    マニュアルを見ながら、ご自分でコードを書かれてはどうでしょうか。

    #いくら他人のコードの使い方をマスターしたところで、知識もスキルも増えません。。
  • 画像はRX63Nの例ですが、下記設定をご確認ください。

    ・double型、およびlong double型の精度 ”倍精度として扱う”

    ・リンクするRPDLのライブラリ指定

  • CS+ v5.0でもPDGからの生成コード登録は出来ます
    CS+で対象のプロジェクトを開いた状態で、PDGでの「ソースの生成」実行後に「CubeSuite+プロジェクトへ登録」で登録されます
    この時にインクルードディレクトリの設定もされるはずです

    doubleのエラーは鈴木さんの対策で解消できます
    iodefine_RPDL.hの方にはインクルードガードは入っているのに、そのエラーはおかしいですね
  • 昔RX62NでPDG2を触っていたときのソースがPCの中にあったので見てみたのですが、
    インクルードガードに品種文字列が入っていました。手作業で組み込まれたようです
    ので、推測ですが、CS+で生成したiodefine.hとPDG2で生成したiodefine_RPDL.hで
    対象デバイスが違ってしまって、更に、どこかで2つともインクルードしてしまっている
    可能性があるような気がしています。

    (A) iodefin.hのインクルードガード
    #ifndef __RX62NIODEFINE_HEADER__
    #define __RX62NIODEFINE_HEADER__
    ...
    #endif

    (B) iodefine_RPDL.hのインクルードガード
    #ifndef __RX62NIODEFINE_HEADER__
    #define __RX62NIODEFINE_HEADER__
    ...
    #endif

    そうでなかった場合ですが、質問された人は自動生成したソースでコンパイルエラーが
    発生してパニックを起こしてしまっているのでは無いかという気がしています。自分で
    書いたソースで同じコンパイルエラーが発生した場合には冷静にソースを検索して対処
    されるだろうと思います。きっと、落ち着いて普段通りに対処すれば、コンパイルエラーの
    直接の原因は分かるだろうと思っています。もっとも、その次に、どうしてCS+とPDG2で
    そうなってしまっているのか、という質問になりそうな気がしますが、、、

    fujita nozom様 wrote said:
    iodefine_RPDL.h が2重インクルード対策されてないのでは?

    windypon様 wrote said:
    iodefine_RPDL.hの方にはインクルードガードは入っているのに、そのエラーはおかしいですね