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

M3S-S2-TinyのCC-RLコンパイラの動作について

こんにちは。

マルツエレックさんのRL78/G14 マイコン・トレーニング・キット MTK-RL78G14の音声再生を参考にして、G13で音声再生をしたいと考えています。

トレーニングキットではきちんと再生されるのですが、G13ではかすかに再生されていることが分かるのですが音量が小さいです。

 

原因を追っていったところ、ライブラリで伸張された音声データに差があることが分かりました。

s2_decode.cの R_DecodeProc_1st関数にてコールされているS2ライブラリの

 R_adpcm_refreshDec();
 R_adpcm_decode();

の前までのinfo.inputaddrとして渡しているデータまではトレーニングキットとG13のデータは同一。

伸張後に、構造体info.pcmdata[]に格納されたデータを比較すると差がでる。

アプリケーションノートを確認してみたのですが、問題解決のヒントを見つけきれませんでした。

 何か解決の糸口を教えていただけると助かります。

[当方の環境]

トレーニングキットでの動作環境

 - CS+ for CA,CX V4.00.00

 - CA78K0R v1.72

 - コード生成ツール V2.04.05.01

G13動作環境

 - CS+ for CC V4.01.00

 - CC-RLコンパイラパッケージ  V1.03.00

 - コード生成ツール V2.03.03.03

  • MTK-RL78G14 が CA78K0R を使用して上手く動作しているのであれば、他方も同じツールを使用されて良いのでは?
    或いは、MTK-RL78G14 でも CC-RL を試されてはどうでしょうか。問題の原因の絞り込みをされたいのであれば、差異は小さい方が見つける効率は良い筈です。
  • おたっくさん、こんにちは。NoMaYと申します。

    サンプルコードを見ているうちに藤田さんからリプライがあって、同じようなリプライが重複してしまうなぁ、とは思ったのですが、藤田さんが仰っていたMTK-RL78G14でCC-RLを試されてはどうか、というのに丁度良いと思われるもの(というかそのものズバリだと思われるもの)がr20an0194jj0102のサンプルコードの以下のフォルダに入っているようですので、試されてはどうでしょうか?

    サンプルコード:
    www.renesas.com/.../D3017501.html

    フォルダ:
    an_r20an0194jj0102_rl78_s2_sound\workspace\sample\yrdkrl78g14\CS+ for CC

    ドキュメント:
    www.renesas.com/.../r20an0194jj0102_rl78_s2.pdf

  • In reply to fujita nozomu:

    fujita nozomuさん

    そうですね。比較している環境の差がまだ大きいので、まずは差異をなくす方向で絞り込んでいきたいと思います。
    ありがとうございます。
  • In reply to NoMaY:

    NoMaYさん
    コメントありがとうございます。
    確かに、CC-RLコンパイラ版のサンプルコードがありました!(見落としていました。。。)
    fujita nozomuさんもおっしゃっているように、差異をなくす方向で絞っていきたいと思います。

    結果が分かり次第また投稿いたします。ありがとうございました!
  • In reply to おたっく:

    教えていただいたトレーニングキットのCC-RLコンパイル版のサンプルコードを使用し、
    動作環境を完全にG13での動作環境に合わせて実行したところ、
    当然ですが、トレーニングキットのデモは正常に動作しました。

    その時のトレーニングキットの伸長データは、CA-K0Rの結果と同じでした。

    また、G13の音声データを格納していたEEPROMをトレーニングキットに接続し、
    G13で使用してたEEPROM読出し関数を流用して伸長データを確認したところ、
    デモサンプルで伸張した音量が適正なデータと同じ結果が出ました。

    上記状況から、G14で伸張すると問題なく、G13で伸張すると音量が小さくなるように見えます。
    M3S-S2-Tiny(CC-RL)をG13で実行するには、
    何かコンパイルオプションをつけるなどする必要があるのでしょうか?
    ライブラリの注意事項には、CPUの制限や使用方法について、特にめぼしい記載は見つけきれませんでした。。。

    まずは、G13+M3S-S2-Tiny+CA-K0Rコンパイラにて動作できたとの書き込みがあるので、そちらを確認してみようと思います。
  • In reply to おたっく:

    おたっくさん、こんにちは。NoMaYです。

    M3S-S2-Tinyのソースコードを見てみたのですが、アセンブラソース内でG14(S3コア)特有の命令は使われていませんでしたので、理屈の上ではG13(S2コア)でも動く筈なのですが、、、

    試しに、CC-RLの設定でS2コアとしてコンパイルするようにして、トレーニングキット上で動作を確認してみるのはどうでしょうか? それで動けば、CPUコアの違いでは無いところで何かがあるということになりそうですが、、、

    フォルダ: an_r20an0194jj0102_rl78_s2_sound\workspace\sample\yrdkrl78g14\CS+ for CC\lib\s2\lib
    ファイル:
    adpcm_decoder_rl78_ccrl.asm
    adpcm_encoder_rl78_ccrl.asm
    adpcm_table_rl78_ccrl.asm
    r_adpcm.h
    r_mw_version.h
    r_s2_version.c
    r_stdint.h

    G14(S3コア)特有の命令:
    MULHU (符号なし16ビット乗算)
    MULH (符号付き16ビット乗算)
    DIVHU (符号なし16ビット除算)
    DIVWU (符号なし32ビット除算)
    MACHU (符号なし積和算 (16ビット×16ビット)+32ビット)
    MACH (符号付き積和算 (16ビット×16ビット)+32ビット)

    とりあえず気になるところでは、変換前データはワードアラインメントの必要があるのではないかとか、adpcm_table_rl78_ccrl.asmの_adpcm_stepsizeTableもワードアラインメントの必要があるのではないかとか、そういうのがあります。

  • In reply to NoMaY:

    NoMaYさん、こんにちは。

    コメントありがとうございます。
    理屈の上では動きそうなんですね。。。。。
    ドキュメントでも確かにコア指定していないですものね。

    アドバイスいただいたように、まずは、S2コアとしてコンパイルして確認してみます。
    ワードアライメントについても、CS+のメモリでの比較(奇数アドレスからは始まっていない)を行っており、仮にアライメントの差分があれば見えると思いますが、今一度確認してみます。
  • s2_decode.cの R_DecodeProc_1st関数にてコールされているS2ライブラリの

     R_adpcm_refreshDec();
     R_adpcm_decode();

    の前までのinfo.inputaddrとして渡しているデータまではトレーニングキットとG13のデータは同一。

    R_adpcm_initDec() と R_adpcm_decode() はアセンブラで書かれている関数ですが、それを間違えているということはないでしょうか?

    CA78K0R 用に書かれたアセンブリソースは CC-RL のアセンブラ移行支援機能を使用すれば CC-RL のアセンブラでアセンブルできたりしますが、CA78K0R と CC-RL は ABI が異なるのでそのままでは正常動作しません。CC-RL で M3S-S2-Tiny を使用するには CC-RL 用に書かれたアセンブリソースを使用する必要があります。

  • In reply to fujita nozomu:

    fujitaさん こんにちは。
    返信が遅くなり申し訳ありません。
    コメントありがとうございます。
    S2-Tinyのアセンブラは、CC-RLで使用する際は、CC-RL用のものを使用していますので正常に動くものと考えています。

    NoMaYさん
    S2コアとしてコンパイルするには、CS+では対応していないようです。(ビルドプロパティの共通で、コアを選択できません)
    CCRLをコマンドラインでコンパイルする必要があると思いますが、知識不足でどうやればいいかわかりません。
    どうやるのが最も簡単でしょうか?
    ご教授いただけると助かります。
  • In reply to おたっく:

    > S2コアとしてコンパイルするには、CS+では対応していないようです。(ビルドプロパティの共通で、コアを選択できません)

    マイクロコントローラの設定を RL78/G14 の R5F104PJ から
    RL78/G13 の R5F100PJ に変更してビルドすれば S2 コアとしてビルドされます。

    メモリマップが

    R5F104PJ: ROM 00000-3FFFF RAM F9F00-FFEDF Mirror F3000-F9EFF
    R5F100PJ: ROM 00000-3FFFF RAM FAF00-FFEDF Mirror F3000-FAEFF

    と、R5F104PJ → R5F100PJ では RAM が 4kB 減る代わりにミラー領域が 4kB 増えており、R5F104PJ でビルドできたプログラムが R5F100PJ でもビルドできれば、原理的には動作するのではないかと思います。
    そのまゝではデバッガで実機にダウンロードできないと予想されるので、一旦 R5F100PJ でビルドして生成したコードを保存しておき、CS+ のプロジェクトのマイクロコントローラの設定を R5F104PJ に戻し、先に保存しておいたコードを上書きしてデバグを行う等工夫が要ると思われます。
  • In reply to fujita nozomu:

    > メモリマップが
    >
    > R5F104PJ: ROM 00000-3FFFF RAM F9F00-FFEDF Mirror F3000-F9EFF
    > R5F100PJ: ROM 00000-3FFFF RAM FAF00-FFEDF Mirror F3000-FAEFF
    >
    > と、R5F104PJ → R5F100PJ では RAM が 4kB 減る代わりにミラー領域が 4kB 増えており、R5F104PJ でビルドできたプログラムが R5F100PJ でもビルドできれば、原理的には動作するのではないかと思います。

    想定外の原因でプログラムが動作しなかったとしても特定は困難だと思われるので、もしこの方法で動作しなかったとしても RL78-S2 コアが原因とは決めつけられません。

    動作した場合に RL78-S2 の命令だけでも問題ないと分かるだけです。

  • > s2_decode.cの R_DecodeProc_1st関数にてコールされているS2ライブラリの
    >
    > R_adpcm_refreshDec();
    > R_adpcm_decode();
    >
    > の前までのinfo.inputaddrとして渡しているデータまではトレーニングキットとG13のデータは同一。

    R_adpcm_decode() の動作をステップ実行すれば違いもすぐに分かりそうですが難しいでしょうか?

  • In reply to fujita nozomu:

    おたっくさん、fujitaさん、こんにちは。NoMaYです。

    あっ、なるほど。さすがfujitaさんですね。アイデアを追加してみました。ノートPCを2台並べ、1台はトレーニングキットに接続してCS+を起動、もう1台はG13動作環境に接続してCS+を起動、それぞれのCS+でステップ実行させて行って違いが発生する箇所を特定する、というのはどうでしょうか?

    GDBであれば、トレース実行(という名前だったと思うのですがステップ実行毎に全レジスタを表示させつつ連続ステップ実行するコマンドのこと)させた結果をファイルにリダイレクトして、トレーニングキットでの結果ファイルとG13動作環境での結果ファイルを、エディタ等で比較する、というのが定番かと思うのですが、CS+だと何がしかのPythonスクリプトを書かないといけない(と思う)のですよね、、、

    [追記] 2017/08/17 11:57

    読み直していて、上のGDB以降の文が混乱を招きそうな気がしてきましたので、少し追記します。1台のPCで、GDBと同じようなことをさせようとすると、CS+だと何がしかのPythonスクリプトを書かないといけないと思った、ということを言いたかったのでした。結局、それよりも、いっそノートPCを2台並べ、それぞれでCS+を起動し、手作業にてそれぞれのCS+を交互にステップ実行させて行って違いが発生する箇所を探すというのはどうでしょうか、ということを言いたかったのでした。

  • In reply to おたっく:

    おたっくさん、こんにちは。NoMaYです。

    失礼しました。確かにGUI上から変更できませんね。一応、先ほど、CS+上でビルドするのと同じコマンドを実行するバッチファイルを作成する方法の紹介、というのを投稿したのですが、このバッチファイルでコンパイルオプションの-cpu=S3を-cpu=S2に変更してみても-dev=○○○\DR5F104PJ.DVF の指定と矛盾する旨のエラーになってしまいますし、更に、そこを何とかしても次はリンクオプション(リンクコマンドファイルに記述されている部分)の方で-DEVICE=○○○\DR5F104PJ.DVFの指定と矛盾する箇所があってエラーになってしまい、なかなか曲者ですね。すみませんでした。

    個人的な思いから、ちょっと意地になって、S2でコンパイル/リンクを通そうとは思っているのですが、おたっくさんの方はfujitaさんのアドバイスへ方向転換した方が良さそうに思います。

  • In reply to NoMaY:

    fujitaさん、NoMaYさん

    ご助言ありがとうございます。

    >R_adpcm_decode() の動作をステップ実行すれば違いもすぐに分かりそうですが難しいでしょうか?

    G13とG14の双方でR_adpcm_decode()をステップ実行して確認してみました。

    結果は、ステップ実行してデコードされた結果は同一となりました。
    しかしながら、連続実行するとやはり結果は異なります。
    (pcm_dataを書き込む前にブレークポイントを張り、連続実行しても結果は異なる。)

    ステップ実行と連続実行の違いについて調べ、割込みが関与している可能性があると考え、
    R_adpcm_decode()の前にDI()を挿入してみましたが、やはり連続実行すると結果が違ってきます。

    参照した投稿
    japan.renesasrulz.com/.../rl78-stop

    ステップ実行と連続実行で他に異なる点は何かあるでしょうか?

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