RL78/G1CのUSBサンプルコードについて

パソコンとRL78G1CでのUSB通信を行いたいので、スターターキットを購入して、サンプルコードとして an_r01an0555jj0215_usb を入手して、an_r01an0555jj0215_usb\workspace\RL78\CS+\RL78G1C\ にあるRL78G1C.mtpjからCS+を起動させて、端子割り当て設定のみを行ってコードの生成後にビルドを行ったのですが、

RA78K0R error E3404: Multiple symbol definition '_main' in file 'ECHO\r_cg_main.rel'. First defined in file 'ECHO\main.rel'
RA78K0R error E3404: Multiple symbol definition '_hdwinit' in file 'ECHO\r_cg_systeminit.rel'. First defined in file 'ECHO\rl78usbmcu.rel'

というメッセージが出てビルド出来ませんでした。「RL78/G1CのUSBポート使用について」の投稿を確認したのですが、それとは内容が異なる様です。なにか他に変更すべき箇所があれば御教授願えないでしょうか。

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

    ごめんなさい。私の見込みがちょっと甘かったようですね。そういえば、コード生成機能で端子設定だけしても、クロック周りの初期化処理がコード生成されたソース中にありますね。予想なのですが、関数名の重複は片付いても、今度は、処理そのものが、コード生成されたソースとサンプルコードのソースとで重複して実行されていることによるように思います。

    RL78/G1Cでコード生成させたソースが手元になくて、ちょっと申し訳ないのですが、コード生成されたソース中のクロック周りの初期化処理の方が先に実行されていると思いますので、サンプルコードのソース中のusb_cpu_mcu_initialize()の中身を空にする(又は、この関数を呼び出さないよう呼び出し元の方をコメントアウトする)ようにすれば良いように思います。

    ただ、念の為、usb_cpu_mcu_initialize()の中身と同等の処理が、コード生成されたソース中のクロック周りの初期化処理(おそらくr_cg_cgc.cのR_CGC_Create()だと思います)にあることは確認しておいて下さい。(もし、等価ではないようでしたら、その旨、連絡を下さい。自分の方でも、RL78/G1Cで試しにコード生成させてみようと思います。とはいえ、チップもボードも持っていないので、もしかしたら途中までしかお手伝い出来ないかも知れません。)

  • NoMaYさん、ありがとうございます。
    ご指摘の通り、クロック周辺機能の設定が重複していました。
    usb_cpu_mcu_initialize() をコメントアウトして、usb_cpu_mcu_initialize() 内の CMC = 0x41からMCKC |= 0x01 までが等価になる様にクロック周辺の設定を見直し、コード生成で初期化した状態のみにしたら、USBシリアルデバイス(COM6)として認識しました。
    Microsoftのusbser.sys をドライバーとして認識しているのですが、この状態で良かったでしょうか?
Reply
  • NoMaYさん、ありがとうございます。
    ご指摘の通り、クロック周辺機能の設定が重複していました。
    usb_cpu_mcu_initialize() をコメントアウトして、usb_cpu_mcu_initialize() 内の CMC = 0x41からMCKC |= 0x01 までが等価になる様にクロック周辺の設定を見直し、コード生成で初期化した状態のみにしたら、USBシリアルデバイス(COM6)として認識しました。
    Microsoftのusbser.sys をドライバーとして認識しているのですが、この状態で良かったでしょうか?
Children
No Data