2016-10-26 21 views
0

Я новичок во встроенных системах и пытаюсь перенести программу конвертации MP3 на плату разработки STM32L476G-DISCO на базе ARM. Я также использую бесплатное программное обеспечение System Workbench на основе Eclipse. Я был успешным до такой степени, что скомпилировал программу и высветил ее на доске. Он работает даже до того момента, когда программа запрашивает ввод файла (.wav).Код для вставки файла в флэш-память платформы STM32 ARM

Мой вопрос в том, как реализовать часть обработки файлов? Раньше при запуске приложения для консольного приложения Windows я просто отправлял аргумент командной строки, например «'> C: \ file.wav < C: \ file.mp3".

Плата поставляется с 128 МБ флэш-памяти, использующей QSPI для связи, а также для внутренней вспышки. Нужна ли файловая система для чтения/записи файла в мою программу? Я думал начать просто и просто вставлять файл, но я не знаю, как назвать его в моем коде. Я могу запрограммировать память вручную с помощью программного обеспечения, но опять же, все, что я знаю, является адресом, где я сверкал данные.

+0

Непонятно для меня. Предполагается ли, что ваше приложение всегда будет воспроизводить один и тот же файл или вы должны время от времени отправлять разные файлы? Является ли свободное пространство вашей встроенной платформы достаточным для хранения файла для воспроизведения? – LPs

+0

В конце концов я бы послал ему другой файл каждый раз, но для начала я хотел бы просто прочитать в том же файле и преобразовать его. Плата имеет 1 МБ внутренней вспышки, из которой только 80 КБ используется кодом приложения. Сам файл .mp3 составляет 148 КБ. – sam

+0

Итак, как описано в описании @Clifford, вы можете рассматривать его как «большой массив байтов» и связывать wav-файл с кодом приложения. Для дальнейшего использования вы зарезервируете место (например, используя скрипт liker) на flash, где вы будете хранить «байты» wav-файла, который нужно преобразовать и воспроизвести. – LPs

ответ

0

Если вы написали данные во внутреннюю флэш-память, все, что вам нужно, это ее адрес - он больше не является «файлом», он может обрабатываться так, как если бы вы прочитали данные из файла в этом месте. Вместо того, отдельно программировать данные из вашего приложения вы можете написать инструмент генерации кода, который считывает дэ Фике на Teh узле разработки и преобразует его в массив код данных C таким образом:

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

, что вы затем компилировать и ссылка на ваш код приложения.

Это позволило бы компоновщику найти ваши данные и избежать каких-либо проблем с кодом приложения и данными, посягающими друг на друга. Кроме того, он дает игрушечным данным символический начальный адрес и размер, который может быть определен sizeof(wav_file).

Вы не можете использовать этот метод, если данные хранятся во внешней вспышке, так как это не отображено в памяти. В этом случае данные необходимо будет считывать в ОЗУ для обработки.

Если ваша аудио-библиотека ожидает файл, и вы не хотите его изменять, то да, вам нужна файловая система. Файловая система, вероятно, является самым простым и безопасным средством управления внешней вспышкой в ​​любом случае.

+0

Если мой файл объявлен следующим образом: '/ * Некоторые глобальные вары. */ char * infname, * outfname; FILE * infile, * outfile; ' и позже называются вот так ...: 'int main (void) { \t wave_t wave; \t int письменный; \t неподписанный char * данные; \t время (& start_time); \t/* Откройте входной файл и заполнить заголовок конфигурации shine_wave_t */ \t если \t ошибка ("Не удалось открыть файл WAVE") (wave_open (infname, и волны, и конфигурации, тихо!)); \t infile = wave.file; \t ... ' Как указать только для чтения файла в том месте, где я его выслал (0x08020000)? – sam

+0

@sam Решение зависит от платформы, от компилятора и компоновщика. Вы должны написать новый вопрос с подробностями – LPs

+0

@sam: комментарии не подходят для публикации дополнительных вопросов или разъяснений, особенно в том числе кода. Обновите свой вопрос или задайте новый вопрос. Вам не нужно использовать 'wave_open()' или любой API ввода-вывода файлов вообще. Вам не нужно «открывать» файл, потому что нет файла - данные wav уже существуют как полный массив данных. Это может помочь, если вы указали, какую библиотеку wav вы используете, - снова, обновив вопрос, а не в комментарии, – Clifford

 Смежные вопросы

  • Нет связанных вопросов^_^