Микропроцессоры и микроконтроллеры

 
 
 
«Низкоуровневый язык — это когда требуется внимание к вещам, которые никак не связаны с программами на этом языке.»
Alan J. Perlis.
Русский | Українська


Микропроцессоры и микроконтроллеры :: Статьи :: Современный автоответчик на базе ARM.Часть четвёртая

Современный автоответчик на базе ARM.Часть четвёртая

WAV-ФАЙЛЫ

ТАМ-ТАМ может воспроизводить и записывать WAV-файлы в том же формате, что и компьютер. Из-за противоречивой информации в Интернете отслеживание

формата WAV-файла может стать темой для еще одной самостоятельной разработки. Моя первая попытка записать, а затем расшифровать содержимое WAV-файла на компьютере с Windows ХР потерпела неудачу. Существовали различия между форматом, найденным мной в Интернет, и реальными данными из шестнад-цатеричного дампа WAV-файла, записанного компьютером. Определенно, эта проблема была вызвана тем фактом, что Microsoft улучшила или добавила параметры к старому формату.

Хорошей новостью является то, что в случае правильного понимания идеологии устройства сейчас легче расшифровать данные, нежели полагаться на данные, уже размещенные в определенной ячейке памяти. В некоторых случаях формат, распознанный в режиме воспроизведения, может немного отличаться от формата, сгенерированного в режиме записи. Это не влияет на возможность применения данных двух файлов для воспроизведения и записи на ТАМ-ТАМ или компьютере.

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

Во время воспроизведения WAV-файлы анализируются неточно. Интерпретатор файла проходит по структуре файла, чтобы извлечь главный параметр: количество сэмплов, которые должны быть проиграны. Данное значение указывает, сколько байт (не сэмплов) представлено в разделе данных этого файла.

ТАМ-ТАМ не пытается исправить неверное значение скорости выборки квантованием или интерполяцией. Он никак не изменяет файлы, которые могут быть сжаты. С другой стороны анализатор правильно определяет файлы, создаваемые различными версиями

Windows или другими программами в той же операционной системе. Главное — не доверять параметру, который должен быть представлен как фиксированное смещение. Вам необходимо пройти по структуре файла, пропуская непонятные параметры.

ТАБЛИЦА РАЗМЕЩЕНИЯ ФАЙЛОВ (FAT)

Статья «Переносимая библиотека FAT для микропроцессорных приложений (Portable FAT Library for MCU Applications) (Circuit Cellar 176, Март 2005) Ивана Шама, Уильяма Хью и Пита Ризуна (Ivan Sham, William Hue, и Pete Rizun) является великолепной отправной точкой изучения организации FAT16 на карте памяти типа SD/MMC. Их реализация является удачной партией для этого проекта, потому что здесь целью является обеспечение возможности обмена файлами между ТАМ-ТАМ и компьютером. Поэтому и файлы, и метод их записи должны быть совместимы. Файловая система FAT 16 практически устарела, но все еще поддерживается Windows ХР.

Данный код был разработан для другого класса микроконтроллеров, но было относительно легко модернизировать его под этот проект. Я модифицировал аппа-ратно-зависимую библиотеку для соответствия LPC2138 SPI. Начальная реализация на макетных платах от Keil была удачной, и я вскоре мог читать и записывать файлы.

Я добавил несколько функций к исходному коду, который не имел операций чтения, модификации или записи файлов. Исходный код позволял только читать и записывать файлы. Это представляет проблему при записи WAV-файла, потому что информация о длине файла размещается в заголовке в его начале. Но эта информация недоступна, пока не закончится запись. Я обошел эту проблему, позволив файлу открываться в режиме «Только Запись», чтобы записывать входя-

щие WAV-данные. А потом возвращался к началу файла для записи заголовка.

Также я добавил функцию удаления существующих файлов. Без данной функции не было возможности удалить имеющийся файл из системы. И наконец, я ввел функцию переименования файлов.