ReadMe
Манифест
Электроника
Программное обеспечение:
ЖКИ
VLSI
Разные мелочи
Интерфейсы накопителей
Файловые системы
Элементы пользовательского интерфейса
Модули режимов
Координаторы
Отладочный координатор
Пользовательский интерфейс
Фотографии
 
==> Orfey2

Програмная часть: разные мелочи

В этом разделе описаны мелкие модули, которые не удостоились отдельных разделов.

Модуль encode.asm.inc

Этот модуль содержит две процедуры табличной конвертации символов: из кодировки CP-866 и UTF в КОИ-8. Эти процедуры используются при работе с файловой системой FAT для декодирования имен файлов, представленных в различных форматах.

Модуль flash.asm.inc

Модуль оперирует с энергонезависимой помятью. На входе он получает адреса EEPROM и SRAM, а также размер передаваемого блока и направление передачи. Имеется две точки входа, отличающиеся методом передачи параметров: через регистры (f_Read, f_Write) или память программ (f_IO). Преимущественно, в коде плейера используется второй способ. Он выглядит примерно так:

 call   f_IO
.db     f_ORead, 1	; Направление, размер
.dw     nv_main_Mode	; Откуда
.dw     main_Mode	; Куда

При сохранении данных в энергонезависимой памяти модуль предварительно проверяет значение, хранящееся в очередном байте и если оно совпадает со вновь записываемым, операция записи для данного байта не выполняется. Я надеюсь, что это способствует сбережению рессурса памяти. В плейере много участков, которые сохраняя параметры, фактически не изменют их или изменяют не полностью.

Модуль math.asm.inc

Модуль содержит ряд математических процедур (многоразрядное умножение и деление, преобразование 8-и и 16-и-битных чисел в десятичное строковое представление), частично взятых из примеров кода от Atmel.

Модуль selfprog.asm.inc

Этот модуль располагается в защищаемой от перезаписи области памяти программ и вызывается при аппаратном сбросе процессора. Его задача - обновление памяти программ по внешнему запросу.

Модуль общается с внешним миром по интерфейсу rs232, скорость обмена - 38400 бод/с, 8 бит в слове, без бит чётности.

Алгоритм действия таков: при возникновении аппаратного сброса процессора, управление передается на начало модуля. Он инициализирует последовательный интерфейс и затем задерживает свою работу на время около 0,03 секунды. Если за это время в приёмном регистре последовательного интерфейса появляется символ "R", модуль выполняет синхронизацию с внешней программой и уходит в бесконечный рабочий цикл, иначе передает управление на адрес 0 - входную точку основного управляющего кода.

Синхронизация с внешней программой состоит в отправке символа "S" и последующего ожидания символа "N". Когда символ "N" будет получен, происходит переход в рабочий цикл модуля.

Рабочий цикл модуля состоит из получения адреса, данных и контрольной суммы заменяемого блока памяти программ и последующей его записи в энергонезависимую память (в случае успешной проверки контрольной суммы).

Со стороны сопровождающего компьютера с плейером общается программа sprog.

Модуль sleep.asm.inc

Этот модуль содержит ряд процедур, обеспечивающих задержки исполнения программ на различное время. Эти процедуры специально собраны в один модуль для облегчения корректировки исходного текста в случае выбора новой тактовой частоты процессора. Текущая версия модуля расчитана на частоту 8 МГц.

Модуль spi.asm.inc

Помимо того, что этот модуль инициализирует контроллер SPI в ATmega32, а также содержит несколько базовых низкоуровневых процедур обмена по шине, он управляет линиями выбора устройств, подключенных к SPI. Для этого используется процедура spi_CSCLK_Select.

В качестве её единственного параметра внешний код должен задать одну из констант spi_CSCLK_*. После использования шины SPI внешний код должен освободить её, задав в качестве параметра константу spi_CSCLK_release. В противном случае возможны сбои в работе IDE-шины.

Программа FAT Sorter

Эта программа была написана по той причине, что плейер использует только один список воспроизведения: тот, что образован имеющейся на носителе файловой системой. Порядок файлов при этом определяется различными случайными факторами, а FAT Sorter старается всё же уменьшить долю вероятности и отсортировать записи файловой системы по алфавиту.

FAT Sorter работает не на плейере, а на сопровождающем компьютере; код написан, в основном, на языке Pascal, может быть без проблем скомпилирован под Linux или *BSD, хотя, думаю, несложная доработка позволит собрать его и для Windows (от операционной системы требуется только дать посекторный RW-доступ к разделу). Программа не интерактивна, единственный аргумент - имя файла-устройства. Sorter последовательно читает все каталоги, удаляет из них информацию об удалённых файлах, а оставшиеся записи сортирует по алфавиту и записывает назад. Каких либо операций с содержимым файлов не выполняется, загрузочная запись и таблица FAT не модифицируются. Sorter понимает как короткие так и длинные имена файлов.

Когда-то аналогичная функциональность была ещё в ДОС-овской версии симантековского дефрагментатора дисков (без понимания длинных имён). В нынешнем штатном дефрагментаторе Windows её нет.

Владимир