現在,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
「単精度から倍精度にすれ」とあるのでその通りにすればよいのでは?
画像はRX63Nの例ですが、下記設定をご確認ください。
・double型、およびlong double型の精度 ”倍精度として扱う”
・リンクするRPDLのライブラリ指定
昔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の方にはインクルードガードは入っているのに、そのエラーはおかしいですね