H8/3694からRX130への移行

初めて投稿させて頂きます。

・開発環境:CS+ for CC V8.03.00(YellowIDEからの移行)

現在、H8/3694用に組んだものをCS+にてRX130用プロジェクトに移行し、動作させたいと考えています。

互換性が無い移行のようで、手動で対応できるエラーについてはあらかた対応し終わったのですが、

下記のようなコンパイラ部分?に未定義エラーなどが無数に発生しており、難儀しております。

未定義であるという意味自体は分かるのですが、開発環境のインクルードファイルに発生している原因と対処が分からず、

対応方法などご教示願えれば幸いです。

 

(E) E0520020 C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.02.00\include\ios(28):E0520020:Identifier "class" is undefined ios 28 Test.mtpj

(E) E0520020 C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.02.00\include\ios(64):E0520020:Identifier "iostate" is undefined ios 64 Test.mtpj

(E) E0520020 C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RX\V3.02.00\include\ios(82):E0520020:Identifier "fmtflags" is undefined ios 82 Test.mtpj

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

    CC-RXのインクルードファイルを追い掛けてみると、iostreamヘッダファイルから2つほどヘッダファイルを経由してiosヘッダファイルがインクルードされることになりますね。なので、それが原因ですね。

    ただ、iostreamをインクルードから外して、2進数表記を修正して、それでコンパイル/リンクが通るようになるかは正直なところ分からないです。(私の方はYellowIDE&Yellow C(?)の仕様が分からないですので、どれだけの道のりがあるのか何とも言えないです。)

    ひとつ思ったのですが、RXマイコン用のGCCコンパイラを試してみる手もあるかも知れません。ちなみに、YellowIDEで使用されていたコンパイラがH8マイコン用のGCCコンパイラだった、とかだったりしますか?そうであれば、e2 studiという開発環境でRXマイコン用のGCCコンパイラが使えますので、コンパイラにこだわりが無ければ、そういう手段も考えられるかも知れません。

    なお、CC-RXでの2進数表記に関してはちょっと手を考えてみました。

    CC-RX向けの2進数リテラル表記もどきマクロを作ってみた(binary literal macro)
    japan.renesasrulz.com/cafe_rene/f/forum21/6721/cc-rx-2-binary-literal-macro
     

  • 確かにコンパイルが通るかどうかは謎でしたが、ひとまずの目標が定まったので大変助かりました。

    YellowIDEのコンパイラについては今調べたところ、H8用のコンパイラYCH8というものが使われているようです。
    コンパイラにこだわりはなく、マイコンをRX130に乗り換えられればよい状態です。
    e2 studiであれば通る可能性があるのであれば、そちらも試させて頂きます。

    なんと、マクロを考案して頂けるとは!
    誠にありがとうございます。2進数表記の方が都合が良い部分があるため、早速試させて頂きます。
  • Thermidorさん、こんにちは。NoMaYです。

    もっと早くに気付けば良かったのですが、あのマクロは16bit長では使えないですね。でも、16bit長までなら少し変更すれば使えます。ですが、32bit長は無理ですね。あちらのスレッドに続きを書きました。

  • NoMay様

    ありがとうございます。
    一旦、現在の2進数表記を16進数表記に書き換えることで対応を行いました。
    すると、既存のエラーはすべて解決したものの、なにやら_mainの二重定義なるエラーが発生しました。

    (E) E0562300 E0562300:Duplicate symbol "_main" in "DefaultBuild\Test.obj" Test.mtpj


    これは、過去にNoMay様が回答されているこちらの質問に似ているように思えます。
    私のケースにおいては、CS+ CCという開発環境またはプロジェクト作成時のミスが関係しているのでしょうか。
    japan.renesasrulz.com/.../e-ai-e0562300-duplicate-symbol-_add_0_pad-in-src-translator-dnn_compute-obj
  • 念の為、プロジェクトで自動生成されたと思しきTest.cのmain()の名前を変更したところ、また別のエラーとして下記が表示されました。

    (E) E0562310 E0562310:Undefined external symbol "__ei" referenced in "DefaultBuild\hogehoge.obj" Test.mtpj

    何か基本的な設定をミスしているのでしょうか……。
  • Thermidorさん、こんにちは。NoMaYです。

    > 何か基本的な設定をミスしているのでしょうか……。

    地道にコンパイラ移行作業が進行中なのだと思います。ひょっとして、コンパイラの移行作業は初めてでしょうか?

    > (E) E0562310 E0562310:Undefined external symbol "__ei" referenced in "DefaultBuild\hogehoge.obj" Test.mtpj

    __eiが見つからないということは_ei()というYCH8コンパイラにはあるがCC-RXには無い組み込み関数が使われていた、ということの筈です。名前からCC-RXの__setpsw_i()に相当すると思われますので、置き換えれば良いかと思います。(CC-RX V3.02では、__setpsw_i()に置き換えるのが手間が少ないと思います。)

    ちなみに、_di()に関しては__clrpsw_i()に置き換えれば良いかと思います。その他もろもろはYCH8とCC-RXのコンパイラのヘルプ/ドキュメントを検索して比較したりすることで分かると思います。

  • NoMay様

    ありがとうございます。
    コンパイラの移行は全くの初で、コード自体も10年近く前に他社が組んだものを少し改造した程度なので、コードを読んだり機能を追加したりはできるが環境まわりは全くよく分かっていない、という状態です。
    初歩的な疑問が多く、大変お手数をおかけします。

    なるほど、少しずつ見えてきたように思えます。
    YCH8にはあったがCC-RXにはなく、それに相当するものに徐々に置き換えていけばよいということですね。
    これを手がかりに進めてまいります。
  • NoMay様

    お陰様で、ビルドを無事に通すことができました。
    大変お世話になりました。
    あとは基盤に流し込んで動作させてみます。
Reply Children
No Data