2016-10-26 5 views
0

私は組み込みシステムを初めて使用しており、MP3変換プログラムをARMベースのSTM32L476G-DISCO開発ボードに移植しようとしています。また、Eclipseに基づいた無料のSystem Workbenchソフトウェアも使用しています。私はプログラムをコンパイルして、それをボード上にフラッシュするという点で成功しました。プログラムがファイル入力(.wav)を要求するまで実行されます。STM32 ARMプラットフォームのフラッシュメモリにファイルを埋め込みます

私の質問は、ファイル処理部分をどのように実装するのですか?以前は、元のWindowsコンソールアプリケーションを実行しているときに、 "'> C:\ file.wav < C:\ file.mp3"のようなコマンドライン引数を送信するだけでした。

このボードには、内部フラッシュと同様にQSPIを利用した128Mビットのフラッシュメモリが搭載されています。プログラムにファイルを読み書きするためにファイルシステムが必要ですか?私は単純に始めてファイルを埋め込むことを考えていましたが、私のコードでどのように呼び出すかわかりません。私はプログラミングソフトウェアを介して手動でメモリをプログラムすることができますが、私が知っているのは、データをフラッシュした場所のアドレスです。

+0

私にとっては明らかではありません。アプリケーションは常に同じファイルを再生することになっていますか、別のファイルを時々送信する必要がありますか?再生するファイルを格納するのに十分な埋め込みプラットフォームの空き容量ですか? – LPs

+0

最終的に私は毎回別のファイルを送信しますが、開始するには同じファイルを読み込んで変換したいだけです。ボードには1MBの内部フラッシュがあり、そのうち80KBのみがアプリケーションコードによって使用されています。 .mp3ファイル自体は148KBです。 – sam

+0

@Cliffordの答えは「バイトの大きな配列」として扱うことができ、wavファイルをアプリケーションコードにリンクすることができます。将来の使用のために、変換して再生するwavファイルの "バイト"を保存するフラッシュ上にスペースを予約します(例:likerスクリプトを使用)。 – LPs

答えて

0

データを内蔵フラッシュに書き込んだ場合、必要なのはそのアドレスだけです。ファイルからデータを読み込んだ場合と同じように処理できる「ファイル」ではありません。むしろ、その後個別にあなたがtehの開発ホスト上でTEH fikeを読み取り、これCコードのデータ配列に変換コード生成ツール書くことができ、アプリケーションからのデータをプログラミング:

static const uint8_t wav_file[] = { '\x00, `\x55` ... 
            ... 
            ... } ; 

あなたは、その後にコンパイルとリンクをお使いのアプリケーションコード。

これにより、リンカーはデータを見つけ出し、アプリケーションコードとデータが互いに侵害するのを避けることができます。さらに、玩具データには、象徴的な開始アドレスと、sizeof(wav_file)によって決定できるサイズが与えられます。

データがメモリマップされていないため外部フラッシュに保存されている場合、この方法は使用できません。その場合、処理のためにデータをRAMに読み込む必要があります。

あなたのオーディオライブラリがファイルを予期していて、それを変更したくない場合は、ファイルシステムが必要です。いずれの場合でも、ファイルシステムはおそらく、最も簡単で安全な外部フラッシュ管理手段です。

+0

私のファイルが次のように宣言されている場合: '/ *いくつかのグローバル変数。 */ char * infname、* outfname; FILE * infile、* outfile; ' 以降はこのように呼び出されます...: 'int main(void) { \t wave_t wave; \t int written; \t unsigned char * data; \t時間(&start_time); \t/*入力ファイルを開き、 \tエラー( "開くことができませんでしたWAVEファイル")場合はコンフィグshine_wave_tヘッダ*/ \tを埋める(wave_open(infname、&波、&設定、静かな)!)。 \t infile = wave.file; \t ... ' 私はそれを(0x08020000)にフラッシュした場所でファイルを読み取るように指定するにはどうすればよいですか? – sam

+0

@sam解決策は、プラットフォーム、コンパイラ、およびリンカによって異なります。 – LPs

+0

@ sam:コメントは、特にコードを含めて、追加の質問や説明を投稿するのには適していません。あなたの質問を更新するか、新しい質問を投稿してください。必要なのは 'wave_open()'やファイルI/O APIをまったく使用しないことです。ファイルがないのでファイルを「開く」必要はありません.wavデータは既に完全なデータ配列として存在しています。コメントではなく質問を更新して、使用しているwavライブラリを指定しておけば助かります。 – Clifford

関連する問題