音声ファイル(.bin)を一緒にビルドしたい

stlと申します。

「音声ファイル(MIDIデータ)の再生をPWM機能を使って実現しようと試みています。

音声データを .bin ファイルに変換したものを、プログラムファイルと一緒にビルドする方法について教えていただけますか?

Parents
  • Anonymous
    Anonymous

    音声ファイルが例えば「ぺいぺい」とか「わおーん」とか提供されたものを改変せず使う(=開発中に更新される頻度が極めて少ない)のであれば、開発中のプログラムに直接組み込む必要はないわけです。プログラムとは離れた固定アドレスに格納するだけ。そういう場合、ウチでは次の手順としています。

    1. マイコン内 CodeFlash のどこにその音声データを置くか決める

    2. bin ファイルを当該アドレスに配置された mot / hex 形式に変換する。

    3. 開発環境上、ポストビルド工程でプログラムの mot / hex と音声の mot / hex を単純に結合する

    (begin / end レコードだけ特別扱いしないといけません)

    RX671 2MiB マイコンだと FFE0000H-FFFFFFFFH が CodeFlash ですから

    音声データを FFE00000H から配置する(ような mot に変換する)

    プログラムは FFF00000H から配置する(ようにリンカスクリプトを書く)

    mot と mot を結合する

    こうしておくと音声データが最大 1MiB まで格納できます。コンパイラやリンカに音声データを食わせなくてよくて、ビルド時間が短縮できてハッピーになれそうです。

  • 固定番地に配置するのであればリンカスクリプトでバイナリファイルを直接突っ込む方法が適しているかもしれません。
    (参考) Include .bin Binary Files in a GNU Linker File
    https://mcuoneclipse.com/2022/06/17/include-bin-binary-files-in-a-gnu-linker-file/

Reply Children
  • >>固定番地に配置するのであればリンカスクリプトでバイナリファイルを直接突っ込む方法が適しているかもしれません

    こちらの方法が良いと思われるのはなぜでしょうか?

  • > こちらの方法が良いと思われるのはなぜでしょうか?
    セクション名もラベルも使わず記述できる点(多少使った方が分かり易そうですが)、ファイルが複数あってもリンカスクリプトの記述だけで完結できる点です。

    後からデータを差し替えられるようにしたいなら、スタティックリンクせず上記のように *mot(*.srec, *.hex) ファイルを別々に作った方が良いかもしれません。

  • Okraさん

    お答えいただきありがとうございました。