Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

RL78G14 音声再生について

ケロリといいます。

現在RL78G14で音声を再生を試みています。

R_tfat_f_stat関数などの挙動を一度知っておきたく、r_main.cにて#include "r_tfat_lib.h" 後関数を実行しました。
 
しかし,
Undefined external symbol "_R_tfat_f_stat" referenced in "DefaultBuild\r_main.obj"
とエラーメッセージが表示され、ビルドが完了できません。
 
上記エラー後ライブラリtfat_rl78.libを入れていないことが原因と考え、プロジェクトに入れた後にビルドすると以下のエラーが出てきます。
external symbol "_R_tfat_disk_write" referenced in "r_TinyFAT"
 
r_TinyFATに関するファイルを調べたのですが、出てこなかった為、対処に困っています。
どのように対処したらよろしいでしょうか。
  • In reply to NoMaY:

    NoMaYさん

    シェルティです、こんにちは。

    ご支援ありがとうございます。R_tfat_f_xxxxxxx() は TFATというファイルシステムのAPIですね。

    ミドルウェア系のものは色々な人が作ったものを1個のシステムとしてプロジェクト登録する必要があり、

    ソースコードが見えているとヘッダ同士がぶつかったりするので、

    私が作ったアプリケーションノートではバイナリ化してサンプルコードに組み込んであることが多いですね。

    ケロリさん

    NoMaYさんの仰る通りで、上記エラーはR_tfat_f_xxxxxxx() という関数を持つコード(バイナリかもしれないしソースコードかもしれない)がプロジェクト中に存在しないときに出ます。

     

    このアプリケーションノートのサンプルコード現物を改めて確認しました。無改造状態では問題なくビルドが通ります。

    https://www.renesas.com/jp/ja/software/D3017501.html

     ビルド確認したプロジェクト:\an_r20an0194jj0102_rl78_s2_sound\workspace\sample\yrdkrl78g14\CS+ for CC

     

    それで、エラー原因のR_tfat_f_xxxxxxx() は、TFATのバイナリ(tfat_rl78.lib)の内側に存在しておりまして、

    ケロリさんの環境ではこのファイルがプロジェクト・ツリーに存在しないか、ビルド対象から外れてしまっているか、どちらかかと思います。

     

    > Undefined external symbol "_R_tfat_f_stat" referenced in "DefaultBuild\r_main.obj"

    この関数については、私の前のポストに書いたように、r_tfat_drv_if.c に存在します。

    このエラーは私の前のポストを見たケロリさんがこのファイルをプロジェクト・ツリーに登録したので解消したのだと思います。

     

    いずれにしても、何か色々自分で手を入れる前に、配布されているサンプルをとにかく無改造で動くことを確認することをお勧めします。

    いったん動いてしまえば、自分で新たに作った環境が動かなくても、動いている環境と比較しながら詰めていけば原因がすぐ見つかります。

     

    以上です

     

     

  • In reply to シェルティ:

    NoMayさん、シェルティさんへ

    ケロリです。

    やはりファイルがないってことなんですかね。
    一度無改造で動ける環境を取得したいと思います。
    いきなり現在の私が所有しているものに当てはめるより、シェルティさんが仰ったように一度動く環境を手に入れて、比較していこうと思います。

    質問が多く申し訳ありませんでした。
    本当に長々と付き合っていただきありがとうございます。
  • In reply to ケロリ:

    ケロリさん

    シェルティです、こんにちは。

    RL78で音声再生できるとなかなか楽しいです。こんな小さい回路でちゃんと音が鳴るのだと感動しますね。
    あと、シェルティの回答を読み直したところ不正確なところがありました。少し情報まとめます。

    ■ケロリさんの最初の投稿
    Undefined external symbol "_R_tfat_f_stat" referenced in "DefaultBuild\r_main.obj"
    とエラーメッセージが表示され、ビルドが完了できません。

    上記エラー後ライブラリtfat_rl78.libを入れていないことが原因と考え、プロジェクトに入れた後にビルドすると以下のエラーが出てきます。
    external symbol "_R_tfat_disk_write" referenced in "r_TinyFAT"

    ■シェルティの回答 → これは正しい
    R_tfat_disk_write()のシンボルがないというエラーですが、これはファイルシステムからストレージアクセスする際の抽象化関数ですね。
    上記サンプルコードで言うところの以下コードに収録されています。ご確認ください。
    \an_r20an0194jj0102_rl78_s2_sound\workspace\sample\yrdkrl78g14\CS+ for CC\src\tfat_mmc_if
    ⇒r_tfat_drv_if.c

    ■ケロリさんの追加投稿
    R_tfat_f_openなどのファイルを扱う関数を使用したいのですが、以下のようなエラーコードの対処ができていません。一番最初の話に戻ってしまうみたいで恐縮なのですが、このような場合はどのような原因が考えられるでしょうか。
    (E) E0562310 E0562310:Undefined external symbol "_R_tfat_f_read" referenced in "DefaultBuild\r_s2_decode.obj" serial.mtpj

    ■シェルティの追加回答 → 「この関数については、私の前のポストに書いたように」のくだりが間違い
    エラー原因のR_tfat_f_xxxxxxx() は、TFATのバイナリ(tfat_rl78.lib)の内側に存在しておりまして、
    ケロリさんの環境ではこのファイルがプロジェクト・ツリーに存在しないか、ビルド対象から外れてしまっているか、どちらかかと思います。

    > Undefined external symbol "_R_tfat_f_stat" referenced in "DefaultBuild\r_main.obj"
    この関数については、私の前のポストに書いたように、r_tfat_drv_if.c に存在します。
    このエラーは私の前のポストを見たケロリさんがこのファイルをプロジェクト・ツリーに登録したので解消したのだと思います。

    ■シェルティの追加回答の修正
    エラー原因のR_tfat_f_xxxxxxx() は、TFATのバイナリ(tfat_rl78.lib)の内側に存在しておりまして、
    ケロリさんの環境ではこのファイルがプロジェクト・ツリーに存在しないか、ビルド対象から外れてしまっているか、どちらかかと思います。

    > Undefined external symbol "_R_tfat_f_stat" referenced in "DefaultBuild\r_main.obj"
    この関数についてもTFATのバイナリ(tfat_rl78.lib)の内側に存在しておりまして、原因は上記の通りと推察します。
    私の前のポストに書いたr_tfat_drv_if.c に存在するのは、_R_tfat_disk_xxxxxxx()系の関数です。
    この関数系に関するエラー("_R_tfat_disk_write"等)は私の前のポストを見たケロリさんがr_tfat_drv_if.cをプロジェクト・ツリーに登録したので解消したのだと思います。

    それでR_tfat_f_xxxxxxx() 系のエラーが残ったとのことですが、
    でもケロリさんは「ライブラリtfat_rl78.libを入れていないことが原因と考え、プロジェクトに入れた後にビルドする」と仰っていますので、どこかのタイミングで「ライブラリtfat_rl78.lib」が入っていない状態にプロジェクトが戻ってしまったものと推測します。

    先のアドバイス(動くものを用意し比較しながら新しく作る)と似ていますが、
    ソフトウェア作りは「1歩先確認、1歩進める」の繰り返しで「知らないうちに戻ってしまった」ことを避けるためにバージョン管理ツール(git等)の導入を強くお勧めします。
    ツール操作しているのは人間なので、「いつの間にか戻っちゃう」ことは頻繁に発生します。

    動いたら都度バージョン管理ツールにコミットすれば、その後何かして動かなくなってしまっても、
    いつの間にか戻っちゃっても、すぐ動くコミットに巻戻せます。

    さらに、10年後とかに市場不具合が出たときに、当時何を考えてコードを作ったのかを思い出す必要性に迫られます。
    それはもう激しく詰問されます。当時の設計資料が残っていないとなると目も当てられません。
    バージョン管理ツールはこのときにこそ真価を発揮します。もし使ってなければぜひ使いましょう。
    いまだと総合的に見るとGitHubが自分でサーバ建てずに済むのでおすすめかと思います。
    コード非公開にしたいプロジェクト用のprivateリポジトリも無料になりました。
    自分でサーバ建てられるのならgitサーバを建てるのも良いと思います。

    以上です
  • In reply to シェルティ:

    シェルティさんへ

    ケロリです。
    回答の修正頂きありがとうございます。
    現在奮闘しており、音を出す道筋が見えてきた状況です。

    結論から言いますと、シェルティさんの仰る通りで、ライブラリtfat_rl78.libの入れ忘れでした。一度行き詰まり、クリアなプロジェクトからやり直したことが原因でした。
    助言頂いたgitの件ですが、小さくはありますが、gitサーバーを建てました。今後は動いたら都度バージョン管理ツールにコミットするよう習慣化させます。コミットのコメント記載方法なども詳細に残していこうと思います。

    本当にこのような未熟者に長く付き合ってくださったことに心から感謝しております。
    ありがとうございます。
  • In reply to ケロリ:

    ケロリさん

    シェルティです、こんにちは

    またトラブルがでたら聞いてください。
    自分の作ったソフトは自分の子みたいなもので、その子を可愛がってくれる人がいるのなら応援したいですね。
    できる範囲で支援いたします。
    gitはひとりで使っても役に立ちますが、チームで開発しはじめるともう必須になりますね。

    以上です
  • In reply to NoMaY:

    お世話になります。
    ケロリと一緒に開発している同僚のものです。お忙しい中色々とアドバイス頂きまして大変有難うございました。

    結論から言うと公開されている「RL78/G14 CPU ボードを用いた音声再生/録音デモ」のサンプルコードを改造してRL78/G14-FPBのD/Aを介して音声再生できました。コードはシェアできないのですが、手順の概略をご参考までにシェアさせて頂きます。

    1.adpcmファイルをROMに書き込んでおく
    (アドバイス頂いたやり方)

    2.R_tfat_f_read関数に該当する関数を自作し、ROMからadpcmバイナリを指定バイト数読み出すf_read関数を作成し、代替する。
    (R_tfat_f関連関数はコメントアウトする前提)

    3.file_from_mmc.fileinfo.fsizeにdpcmバイナリのサイズを代入
    (fsizeはデコード状況や再生完了にかかわっている。file_from_mmc.fileinfoはR_tfat_f_stat関数で更新されるが、コメントアウトしているため、fsizeだけは自力で更新)

    4.g_demo_statusをDEMO_STATE_PLAYにする

    以上、SDカードに関連するデータ構造と再生処理が密接なので、結局上記のようにするのが早かったです。動作実績例として皆様に参考にして頂ければ幸いです。

    今後とも、ご指導、宜しくお願いいたします。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page