AlexBi (17.10.2013 18:32, просмотров: 176) ответил fk0 на Размер страницы при правильной организации не имеет значения, он лишь по меньшей мере вдвое должен быть меньше используемого объёма памяти... при записи по кругу. А без записи по кругу я не знаю как обойтись, я тут вопрос рассмотрел
Функция write() может содержать в себе memmove(), а потом уже работу с данными, т.е. после возвращения из write() исходные данные становятся не нужны. А что бы не висеть в ожидании окончания записи при последующем вызове write(), вторая страница может оказаться очень полезной, хотя соглашусь, что это довольно редкий вариант. И ДМА очень полезно, если его удастся задействовать. Побайтная запись в стиле SST25 с ДМА не дружит совсем. Т.е. с ней придется работать вручную, по прерываниям от SPI или простым полингом. Скорости СПИ в контроллерах профессионального уровня в районе 10-20МГц, на передачу байта надо 0.5-1мкс. На передачу всего, что требуется для запуска записи пары байт в SST25 надо около 5 байт (2.5-5мкс), потом собственно запись (2мкс), параллельно идет ожидание готовности. Столь сложный алгоритм парализует контроллер на многие мкс. Конечно, можно использовать прерывания, что бы прерывать этот поток, но в сравнении с использованием ДМА, такая передача совсем не смотрится. У SST26 уже лучше, есть страница, которую можно заполнять, но буферная страница 256 байт, а стираемая страница 4кб. Не приятный дисбаланс для операции прочитал-изменил-записал, получается. Т.е. без какого-то аналога FS пользоваться такой памятью очень не удобно. И АТ45 совсем не смотрится как тупиковая ветвь, скорее наоборот. Если брать по соотношению стоимость/объем+ресурс возможно АТ45 проиграет, однако по удобству использования, и по затратам ресусров МК на работу с памятью АТ выигрывает.