Совместное использование файлового и прямого доступа к секторам

Файловый доступ и прямой доступ к секторам можно применять одновременно, если вы понимаете, как прямой доступ может повлиять на флеш-диск (и, возможно, испортить его).

В разделе Прямой доступ к секторам объясняется, что работа с флеш-секторами идёт через два буфера в RAM с номерами 0 и 1. От этих буферов зависит и работа самого флеш-диска.

Буфер 0 используется для обработки служебных данных и не хранит ценного содержимого, которое нужно сохранить после завершения одного дискового метода. То есть после выполнения такого метода, как fd.setdata, в буфере 0 нет ценных данных.

Буфер 1 служит для загрузки и хранения содержимого последнего загруженного (и, возможно, изменённого) сектора данных. Поэтому если недавно вызывался fd.setdata, в этом буфере могут оставаться новые данные, ещё не сохранённые во флеш-памяти. Порча этих несохранённых данных неприятно скажется на файле. Чтобы этого не случилось, объект fd автоматически размонтирует диск (устанавливает fd.ready = 0 - NO), если приложение выполняет fd.setbuffer или fd.getsector при fd.buffernum = 1, когда в этот буфер загружены новые, ещё не сохранённые данные сектора.

Избежать размонтирования диска просто. Можно работать с буфером RAM 0 (задать fd.buffernum = 0) или сбросить несохранённые данные вызовом fd.flush или fd.close.

Метод fd.setsector вызовет размонтирование диска, если адресат находится внутри области диска (секторы от 0 до fd.totalsize - 1). Запись за пределы области диска работе флеш-диска не мешает.

Метод fd.getbuffer никак не влияет на флеш-диск, поэтому его можно использовать свободно.

Метод fd.checksum записывает в буфер RAM (в режиме «PL_FD_CSUM_MODE_CALCULATE»), но контрольная сумма вычисляется тем же способом, что и на самом диске, поэтому установленная сумма никогда не будет неверной.

Наконец, учтите, что любой метод, связанный с файлами, меняет значение fd.buffernum. Никогда не считайте, что знаете, какое значение у этого свойства. Всегда задавайте его явно и каждый раз перед прямым доступом к секторам.

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