ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
454966 Топик полностью
fk0, легенда (17.10.2013 19:12, просмотров: 160) ответил AlexBi на Функция write() может содержать в себе memmove(), а потом уже работу с данными, т.е. после возвращения из write() исходные данные становятся не нужны. А что бы не висеть в ожидании окончания записи при последующем вызове write(), вторая страница
Что толку от второй страницы? Ну заткнётся на записи не второй, так третьей страницы и всё равно ждать. Если скорости разные и объёмы большие, то никакой буфер не поможет. memcpy внутри write -- ну давайте уж пойдём до конца и сделаем что-то а-ля дисковый кеш в линуксе. Тогда физическая скорость записи, если записи редкие (средняя скорость очень низкая, ниже физической скорости записи), вообще не имеет значения. И зачем обязательно DMA. Модуль SPI может работать по прерываниям и может иметь какой-то FIFO буфер -- в принципе этого достаточно. У почти все МК так есть. Но соглашусь, это ожидание готовности у SST25 очень мешает... Но при буфере в 256 байт, SST26, оно уже совершенно не мешает. Одно дело тормозить передачу после каждого второго байта, другое дело после большого блока. Накладные расходы на эту остановку уже не так велики, в процентом отношении к объёму передаваемых данных. Но не вижу совершенно проблемы в том, что размер буфера меньше размера страницы. А какая разница? За раз пишется отнюдь не страница, а сколько-то, сколько нужно в данном случае. Может и несколько байт, может и килобайт, а может и несколько страниц за раз. Важно лишь то, что буфер позволяет переслать большой блок сразу, с минимальными накладными расходами на обработку каждого байта (что не так у SST25). Но... это всё здорово и замечательно, но где-нибудь в ядре linux. А когда у нас нет операционной системы, когда у нас нет кеша записываемых данных, когда у нас вообще пару сотен байт раз в полчаса записывается и совершенно не важно, будет ли это на 10мс дольше или нет --> SST25 вполне устраивает, преимущества SST26 или AT45 просто невозможно реализовть. И кроме того, задержки при стирании очередной новой страницы, при записи подряд большого блока, больше всех этих накладных расходов на наличие или отсутствие буфера. А вот если нужные страницы предварительно стёрты и мы начинаем быстро-быстро и много писать то, конечно, четыре ноги лучше чем две (два буфера лучше чем один) возможностью организации практически непрерывной записи, например, с большой скоростью, в то время как даже на SST26 будут постоянные задержки (буфер то пуст, то полон). Но это не типовые применения. Не знаю даже, где нужно.
[ZX]