2016-10-28 7 views
0

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

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

私は単純に始めてファイルを埋め込むことを考えていましたが、私のコードでどのように呼び出すのか分かりません。私はプログラミングソフトウェアを介して手動でメモリをプログラムすることができますが、私が知っているのは、データをフラッシュした場所のアドレスです。デバッガでプログラムをステップ実行すると "wave_open"になりますが、ファイルを使用していないので、f_openまたはf_readの代わりに何を置くかはわかりません。また、私はここでSTDIO.h

に加えてSTCubeMXによって生成されたHALライブラリを使用していますことは、私が使用していたコードの抜粋です:

Wave.cオリジナルのソースコードでは、これを考え出した
/* main.c */ # 
include "main.h"# 
include "stm32l4xx_hal.h" 

/* USER CODE BEGIN Includes */ 
# 
include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "layer3.h"# 
include "wave.h" 
    /* USER CODE END Includes */ 

/* Private variables --------------------------------------------------- 
QSPI_HandleTypeDef hqspi; 

SPI_HandleTypeDef hspi2; 

UART_HandleTypeDef huart2; 

/* USER CODE BEGIN PV */ 
/* Private variables --------------------------------------------------- 

/* Some global vars. */ 
char * infname, * outfname; 
FILE * infile, * outfile; 
int quiet = 0; 
int _verbose = 0; 
int stereo = STEREO; 
int force_mono = 0; 
/* USER CODE END PV */ 
/* Parse command line arguments */ 
static int parse_command(int argc, char ** argv, shine_config_t * config) { 
    int i = 0; 
    // if (argc - i != 2) return 0; 
    // infname = argv[i++]; 
    // outfname = argv[i]; 
    //infname = "pcm1644mE.wav"; 
    infname = 0x08020000; 
    outfname = "pcm1644mE.mp3"; 
    return 1; 
} 

int main(void) { 
    /* USER CODE BEGIN 1 */ 
    wave_t wave; 
    time_t start_time, end_time; 
    int16_t buffer[2 * SHINE_MAX_SAMPLES]; 
    shine_config_t config; 
    shine_t s; 
    int written; 
    unsigned char * data; 

    initialise_monitor_handles(); 

    uint8_t msg[100]; 

    time(& start_time); 

    /* Set the default MPEG encoding paramters - basically init the struct */ 
    set_defaults(& config); 

    if (!quiet) print_name(); 

    /* Open the input file and fill the config shine_wave_t header */ 
    if (!wave_open(infname, & wave, & config, quiet)) 
     error("Could not open WAVE file"); 

    infile = wave.file; 

    if (force_mono) 
     config.wave.channels = 1; 
    .... 

答えて

1

典型的な "fopen"でファイルハンドルを開くように見えるが、プラットフォーム上にファイルシステムがないので、fopenの代わりに "fmemopen"を使用してfmemopenを指すだけで、その中のデータその人が他の人を助けることを望むのは、それを理解するのに長い時間がかかったからです。