Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как обойти кэширование файлов с mass storage?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Dog Pawlowa
Требуется организовать двухсторонний обмен данными между дивайсом и компьютером WIN/MAC, самое простое , удобное и платформо-независимое - это mass storage.
Компьютер читает один и тот же файл, а прибор подставляет новые данные.
Почти все работает, но компьютер не читает однажды прочитанный файл, использует данные из кэша.

Кто виноват - понятно. Что делать?
GetSmart
Если ОС не опознает файловую систему, то она не должна ничего кэшировать. Из ОС при этом можно читать весь том диска по любому смещению. Т.о. разбивка на файлы делается в обход ОС, со стороны девайса и ПО компа.
Timmy
Цитата(Dog Pawlowa @ Jun 5 2014, 19:19) *
Требуется организовать двухсторонний обмен данными между дивайсом и компьютером WIN/MAC, самое простое , удобное и платформо-независимое - это mass storage.
Компьютер читает один и тот же файл, а прибор подставляет новые данные.
Почти все работает, но компьютер не читает однажды прочитанный файл, использует данные из кэша.

Кто виноват - понятно. Что делать?

Открывать файл с запретом кэширования пробовали? На WIN это точно можно.
mdmitry
Цитата(Dog Pawlowa @ Jun 5 2014, 19:19) *
Почти все работает, но компьютер не читает однажды прочитанный файл, использует данные из кэша.

Может в программе явно сбрасывать кэш или открывать без кэширования.
Dog Pawlowa
Спасибо ответившим.
На сегодня выяснил - чтение диска по номеру сектора не кэшируется, как минимум один вариант для Win есть.
Нагуглил возможность открытия файла с запретом кэширования, но еще не проверял.
Про сброс кэша не знаю ничего, кроме как это должно происходить при чтении большого файла, но заниматься эмуляцией большой флэшки пока не хочется.
GetSmart
Цитата(Dog Pawlowa @ Jun 7 2014, 06:25) *
На сегодня выяснил - чтение диска по номеру сектора не кэшируется, как минимум один вариант для Win есть.

Может возникнуть конфликт с кэшем. Например, если перезаписать в обход файловой системы весь диск, а система при выключении питания запишет уже поверх записанного свой кэш. Чтобы этого не было, нужно отключать том (если на нём есть ФС, известная ОС).
gerber
Цитата(Dog Pawlowa @ Jun 5 2014, 19:19) *
Требуется организовать двухсторонний обмен данными между дивайсом и компьютером WIN/MAC, самое простое , удобное и платформо-независимое - это mass storage.
Компьютер читает один и тот же файл, а прибор подставляет новые данные.
Почти все работает, но компьютер не читает однажды прочитанный файл, использует данные из кэша.

Вопрос с завидной регулярностью поднимается на форуме.
Вариантов два:
1) при обновлении данных в файле со стороны устройства передёргивать "флэшку", то есть имитировать отключение её от USB-порта и повторное включение. Например, путём отключения/подключения pullup-резистора на линии D+.
2) отказаться от Mass Storage в пользу MTP (Media Transfer Protocol) устройства. Из минусов - поддержка MTP-устройств появилась в винде, начиная с "семёрки". Для XP придётся устанавливать соответствующий драйвер. В MTP-протоколе есть уведомления хоста об изменениях в файловой системе устройства, по которым винда перечитывает файлы.
Побороть кэширование какими-то штатными методами не представляется возможным.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.