Файловая система для микроконтроллеров 8051

Файловая система для микроконтроллеров 8051

Данная файловая система написана для 8051 (MSC-51) совместимых микроконтроллеров и предназначена для подключения FLASH памяти данных большого объема. Система обеспечивает минимальный набор функций для работы с файлами, аналогичный функциям MS-DOS для персональных компьютеров. Т е - это дисковая система для 8051 процессора на основе FLASH. Однако, данная система НЕ совместима с MS-DOS по формату данных на диске и в существующем виде НЕ предназначена для подключения MMC и SD карт памяти. Данная система предназначена прежде всего для подключения встроенных в микросистему микросхем FLASH. Так как файловая система написана полностью на Си (за исключением собственно программ обмена с FLASH, которые частично написаны на ассемблере), то она может быть адаптирована на другие 8 и 16 битные процессоры и практически любую FLASH память.

Забыть ассемблер ?

На самом деле микроконтроллеры, и даже 51 серии _не_ программируют на ассемблере. Для 8051 семейства используется компилятор Си Keil C www.keil.com Разумеется, в демо-режиме (ограничение результирующего кода в 2 КБ) эта программа никакого интереса не представляет. Но в полноценном варианте это не просто компилятор, а пофессиональный оптимизирующий компилятор. То есть если, скажем написать в программе y=((4*3)/2)*x, то компилятор поймет, что это значит y=6*x, или если написать y=(5*8)/4, то это просто y=10 и результирующий машинный код 8051 это будет просто присвоение, без всяких умножений и делений. Keil C также учитывает такие проблемы как крайне малый объем памяти RAM, позволяет одновременно включать в проект файлы (подпрограммы) на ассемблере, программировать прерывания на чистом Си или с использованием ассемблера. Сами "торговцы" Keil C как-то скромно нигде об этом не пишут, но результирующий бинарный код Keil C (при включенном режиме максимальной оптимизации) по качеству часто превосходит оптимизацию, которую мог бы сделать программист (и притом очень квалифицированный программист) вручную на ассемблере. Более того. Keil C содержит оптимизированный набор математических функций для стандартных типов, стандартный набор строковых функций, но что очень важно, функцию sprintf. Эта функция преобразует внутренний числовой формат в текст, причем делает это для всех типов чисел, с лидирующими нулями и без... Словом, все математические и строковые функции уже есть, и при этом оптимизированы как по размеру, так и по быстродействию. Конечно (в плане программирования обмена с устройствами) - это не программирование под Windows или MS-DOS, есть определенные особенности. Однако всегда есть возможность проверить, тот ли код создается, заставив компилятор Cи явно создать ассемблерный текст трансляции. В плане же выполнения математических, строковых, логических операций это ничем не отличается от программирования для персональных компьютеров. Но (много восклицательных знаков) ! Мы всегда должны помнить, что пишем достаточно маленькую (!) и простую (!) программу. Скажем, полный исходный текст программы, занимающей около 64 КБайт ROM не превысит 128 килобайт (без учета комментариев). То есть это должна быть программа с простой, ясной, чёткой логикой

DKFS-51 - упрощенная файловая система для ККМ на базе 51 микроконтроллера

Загрузить dkfs51 912 КБайт

Список файлов

Подробное описание файловой системы

Предположим, мы имеем память FLASH размером хотя бы 128 килобайт внутри ККМ. Что у нее внутри ? "База товаров". Хорошо. Предположим, мы хотим добавить в запись базы товаров некую новую величину. Или, скажем, мы захотели изменить число отделов в кассе. Или создать список фамилий кассиров. Кто знает, где у нас есть во FLASH свободное пространство ? Никто не знает. Хотя Keil C и обеспечивает автоматическое распределение памяти в RAM и XRAM, он не может сделать это для FLASH, которая по сути - внешнее устройство неизвестно какого интерфейса и ёмкости. Но так как FLASH - это диск (см выше), то можно создать дисковую операционную систему. Вот, скажем Билл Гейтс написал систему для компьютера - и стал миллиардером (хотя на тот момент (1983 год) никто не знал, что такое настоящий компьютер, а в СССР - это уже точно). А я написал операционную систему для "русской кассы" - и стал безработным в капиталистической стране. И между прочем, не в Германии. Что тут скажешь ? Ищу работу. Что представляет собой система ? Система автоматически распределяет память FLASH в виде файлов. При этом гарантируется, что обращение (запись) в файл не вызовет ошибку внутри другого файла. Вся информация проверяется с помощью надежной контрольной суммы CRC16. Но это не MS-DOS. Помните ошибку в MS-DOS - "Диск переполнен" (или даже в Windows. После этого компьютер обычно виснет) ? Защита от таких ошибок тоже гарантируется. Более того. Появляется возможность передавать и принимать с компьютера файл базы товаров (а не отдельные записи в базе), что дает существенный выигрыш в скорости обмена. Эта операционная система (назовём её скромно DKdos51) занимает в ПЗУ всего лишь около 8 килобайт. "Да, но это так много..." Но зато за счет этого многочисленные кассовые функции и протоколы (если знать меру, конечно) реализуются настолько коротким и маленьким набором функций, что общий объем программы резко снижается. Более того. Программист при отладке кассовой программы может не пользоваться "кассовой клавиатурой", "кассовым дисплеем" и уж точно - "кассовым принтером" для вывода отладочной диагностики. ККМ подключается к компьютеру по RS-232 и с помощью терминальной программы ведется отладка. Словом, RS-232 - это то "внешнее устройство", которое должно заработать "на новой плате после переразводки или установки нового процессора" в первую очередь (а не в последнюю, как это у некоторых бывает)

Посмотреть демонстрацию работы файловой системы
(При просмотре: в новом окне нажмите F11 для просмотра на полном экране)
Нет, это не персональный компьютер в MS-DOS. Это процессор 8051 в отладчике Keil C (эмуляция вывода процессора на последовательный порт). Таким же образом программа тестируется на реальной системе, без всяких отладчиков.