Файловая система для микроконтроллеров 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 - это то "внешнее устройство",
которое должно заработать "на новой плате после переразводки или установки нового процессора" в первую
очередь (а не в последнюю, как это у некоторых бывает) |