私は組み込みシステムに不慣れで、MP3 変換プログラムを ARM ベースのSTM32L476G-DISCO
開発ボードに移植しようとしています。また、Eclipse ベースの無料の System Workbench ソフトウェアも使用しています。プログラムをコンパイルしてボードにフラッシュするところまで成功しました。プログラムがファイル入力を要求するところまで実行されます ( .wav
)。
私の質問は、ファイル処理部分をどのように実装するのですか? 以前は、元の Windows コンソール アプリを実行するときに、 のようなコマンド ライン引数を送信するだけ>C:\file.wav < C:\file.mp3
でした。
簡単に始めてファイルを埋め込むだけだと思っていましたが、コードで呼び出す方法がわかりません。プログラミング ソフトウェアを使用してメモリを手動でプログラムすることはできますが、データをフラッシュした場所のアドレスしかわかりません。デバッガーでプログラムをステップ実行すると " wave_open
" になりますが、ファイルを使用していないため、f_open または f_read の代わりに何を入れたかよくわかりません。STCubeMX
また、に加えて生成されたHALライブラリを使用していますSTDIO.h
ここに私が使用しているコードのスニペットがあります:
/* 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;
....