Совместное использование флеш-памяти приложением и данными

В этом разделе рассматривается: fd.availableflashspace.

Флеш-память, которую использует объект fd., состоит из секторов по 264 байта. Обычно 256 байт каждого сектора отводится под собственно данные, а остальное резервируется под «служебную» информацию (контрольная сумма и т.п.).

В зависимости от устройства объект fd. может хранить данные одним из двух способов (в одном из двух мест):

  • В устройствах с общей флеш-памятью прошивка, скомпилированное приложение Tibbo BASIC/C и данные объекта fd. хранятся в одной микросхеме флеш-памяти. Все секторы, не занятые прошивкой и приложением, доступны для ваших данных. Эту область мы будем называть областью данных флеш-микросхемы. Размер области данных в секторах можно получить через свойство fd.availableflashspace (только чтение).
  • В устройствах с выделенной флеш-памятью одна флеш-микросхема служит для хранения прошивки и приложения, а вторая - для хранения данных объекта fd.. В таких устройствах область данных занимает всю вторую микросхему, а fd.availableflashspace всегда возвращает число секторов в этой второй микросхеме. В некоторых устройствах вторая флеш-микросхема на плате отсутствует и подключается снаружи.
Совет

Чтобы узнать, как организована флеш-память вашего устройства, обратитесь к спецификации платформы этого устройства (например, для EM1000 она находится здесь). Сведения об организации памяти приведены в разделе «Miscellaneous Information/Flash Memory Configuration».

Данные с помощью объекта fd. можно хранить двумя способами:

  • Первый способ - читать и записывать секторы области данных напрямую, так называемый прямой доступ к секторам. Этот метод прост и позволяет «делать что угодно» с доступной областью данных.
  • Второй способ - файловый: вы создаёте полноценный флеш-диск с простой файловой системой. Это приводит к некоторым накладным расходам, поскольку файловой системе нужно несколько секторов для собственного «обслуживания». Зато работать с файлами может быть несравнимо удобнее и гибче: многие сложные операции выполняются автоматически, что упрощает приложение. Кроме того, дисковые транзакции делают файловые операции устойчивыми к сбоям.

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

Объект fd. нумерует физические секторы области данных в обратном порядке (см. рисунок ниже, где показано распределение памяти в общей флеш-микросхеме). Прошивка и приложение загружаются во флеш-память начиная с физического сектора 0, а область данных отсчитывается от самого верхнего физического сектора. Для удобства связанные методы и свойства объекта fd. называют этот верхний физический сектор (логическим) сектором 0, предыдущий перед ним - сектором 1 и так далее.

Схема размещения общей флеш-памяти.

Такой подход выбран для того, чтобы изменение размера приложения Tibbo BASIC/C как можно меньше влияло на данные во флеш-памяти. Размер приложения обычно постоянно меняется в процессе разработки и отладки. В то же время часто нужно постоянно хранить некоторые данные в области данных и не создавать их заново при каждой загрузке новой версии приложения. Если бы область данных начиналась сразу за областью прошивки и приложения, любое изменение размера приложения сдвигало бы границу области данных, портило данные и заставляло создавать их заново. Если же область данных начинается с верха флеш-микросхемы и растёт вниз, вероятность её повреждения значительно ниже.

Всё сказанное, разумеется, относится к устройствам с общей флеш-памятью. В устройствах с выделенной флеш-памятью прошивка с приложением и данные объекта fd. хранятся в разных микросхемах, поэтому загрузка более крупной прошивки или приложения не может повредить область данных.

Совет

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

Исходный материал Tibbo обновлён 28 июля 2022Оригинал на docs.tibbo.com · Сообщить об ошибке