любой код - это команды для управления железом. Т е без железа - это бла бла бла.
Код на СИ будет преобразован в код на ASM и его эффективность зависит от компилятора.
Ваш пример не корректный.
Например , FatFS+AVR (какой чип конкретно? какая максимальная у него скорость SPI конкретно?) какая скорость FatFS для этого чипа поиска свободного сектора конкретно
Какой алгоритм загрузки данных в буфер конкретно?
Когда Вы все это учтете, то это и будет конкретный реальный пример.
Но Вы можете этого не делать, а полагать, что все зависит лишь от того, что Вы убрали макросы и комментарии из приведенных Вами аналогов.
Вы же сами написали, " а выделять отдельно по 4кб для USB и fat глупо, особенно если в чипе всего 20 килобайт оперативы". А теперь рассказываете про выделение кеш. Что не так?
Кроме того, Вы не учитываете, что для записи надо кроме данных передать команду и адрес. Это 32 такта. Если пишите 1 байт, то время записи составит 40 тактов SPI и только в том случае если используете DMA. Иначе будет еще больше.
Т е в Вашем расчете быстродействия надо считать время записи 1-го байта не 8w, а 40t, а скорость записи страницы как 2080t, где t- такт SPI.
Если Вы из внешнего источника программируете флеш через USB, то скорость USB-2.0 это примерно 7 Мбайт/сек.
Если у Вас SPI работает на 10 МГц и используется DMA, то скорость записи по 1 байту составит 0.25 Mбайт/сек, а скорость записи по страницам составит не более 1.2 Мбайт/сек.
Т е скорость записи во флеш в 6-30 раз меньше, чем скорость поступления данных. В этом случае можно работать налету , что не требует ни кеш, ни большого буфера.
В любом случае, ограничение скорости записи при программировании флеш связано с низкой скорость физической записи. Ваш драйвер не решает эту проблему.
"Пример: хотим мы записать 10 страниц с помощью этого алгоритма и будем записывать их не сразу, а по одной, не важно подряд или в хаотичном порядке. В итоге мы 10 раз сотрём и перезапишем сектор. Неслабо, да? "
где Вы такой пример взяли? Никто никогда так не делал. Вы же сами написали типовой алгоритм. Читаем сектор в буфер, изменяем в буфере 10 страниц, стираем сектор 1, а не 10 раз, и пишем сектор. Это и есть типовой алгоритм.
Аналогично Ваш пример быстродейcтвия. Именно 2x - это и будет классика и без кеша, так как Вы изначально выделяете буфер размером с сектор.
Впечатление такое, что Вы игнорируете даташит и рекомендации разработчиков микросхем, а сразу строите свой велосипед и радуетесь, что "гениально" придумали два не квадратных колеса.
Если из кучи кирпичей выбрать кирпичи с одной трещиной, то демонстрируя только их в качестве примера, можно очень убедительно логически доказать, что такие кирпичи наиболее часто встречаются в природе.
Автор любой статьи аналогично подбирает примеры так, чтобы они подтверждали его умозаключения. В итоге любая статья, в которой "просто о сложном" всегда логична и почти гениальна.
Непонятно лишь одно, почему автор свои рассуждения о своей жизни считает более правильными , чем полученные им в детстве стереотипы родителей.
Может проблема в том, что он, как и его родители, учит на своем опыте.
Но народная мудрость гласит: "Учат на чужом опыте, а вот учатся всегда на своем"
Как говорил Штирлиц -"Запоминается всегда последняя фраза"
В данной статье это : "подписывайтесь" - очевидно в ней и есть смысл статьи.
...для червяка-позвоночника...
Попробуйте просто отправить эти письма в спам и не читать их.
фобии для пиара.
Вы серьезно?
Будете пересказывать книжки тем, кому лень их читать?
любой код - это команды для управления железом. Т е без железа - это бла бла бла.
Код на СИ будет преобразован в код на ASM и его эффективность зависит от компилятора.
Ваш пример не корректный.
Например , FatFS+AVR (какой чип конкретно? какая максимальная у него скорость SPI конкретно?) какая скорость FatFS для этого чипа поиска свободного сектора конкретно
Какой алгоритм загрузки данных в буфер конкретно?
Когда Вы все это учтете, то это и будет конкретный реальный пример.
Но Вы можете этого не делать, а полагать, что все зависит лишь от того, что Вы убрали макросы и комментарии из приведенных Вами аналогов.
---------------
Например, посмотрите это про железо SPI AVR :
https://www.microchip.com/content/dam/mchp/documents/MCU08/ApplicationNotes/ApplicationNotes/TB3215-Getting-Started-with-SPI-DS90003215.pdf
Посыл спорный. Дайте хотя бы один реальный пример.
Повторю, то что сказал ранее. Все зависит от конкретного железа.
Допускаю, что Вы сделали решение для Вашего варианта железа, но это не кросс платформенное решение и не универсальное.
Но в статье Вы нет конкретики, а есть претензия на универсальность.
Непонятны Ваши рассуждения.
То Вы говорите про запись по USB, то про fatfs.
если программируем с компа SoC то никакой fatfs не используется.
Но даже в этом случае скорость записи существенно меньше, чем скорость передачи данных.
Если Вы используете fatfs, то у Вас скорее всего управление файловой системой будет существенно медленнее, чем передача данных.
Чтобы обсуждать предметно, напишите для какого конкретно решения в железе Вы написали свой драйвер. Иначе это беседа о гипотетическом решении.
Тогда мой довод ранее о том, что писать можно налету работает. Я сам так пишу при программировании SoC.
О каких лишних записях Вы говорите?
"Время на пересылку 260 байт (1 команда + 3 адрес + 256 данные) при ваших 10 МГц будет 26 мкс, что 4,5% (в лучшем случае) от всех временных затрат. "
Вы ошибаетесь. 10 MГц - это тактовая частота SPI.
SPI - это последовательный интерфейс т. е. это сдвиговый регистр.
260 байт - это 2080 бит.
Для передачи 2080 бит по SPI надо 2080 тактов.
В итоге не 26 мкс, а 208 мкс. т е в 8 раз больше.
Вы же сами написали, " а выделять отдельно по 4кб для USB и fat глупо, особенно если в чипе всего 20 килобайт оперативы". А теперь рассказываете про выделение кеш. Что не так?
Кроме того, Вы не учитываете, что для записи надо кроме данных передать команду и адрес. Это 32 такта. Если пишите 1 байт, то время записи составит 40 тактов SPI и только в том случае если используете DMA. Иначе будет еще больше.
Т е в Вашем расчете быстродействия надо считать время записи 1-го байта не 8w, а 40t, а скорость записи страницы как 2080t, где t- такт SPI.
Если Вы из внешнего источника программируете флеш через USB, то скорость USB-2.0 это примерно 7 Мбайт/сек.
Если у Вас SPI работает на 10 МГц и используется DMA, то скорость записи по 1 байту составит 0.25 Mбайт/сек, а скорость записи по страницам составит не более 1.2 Мбайт/сек.
Т е скорость записи во флеш в 6-30 раз меньше, чем скорость поступления данных. В этом случае можно работать налету , что не требует ни кеш, ни большого буфера.
В любом случае, ограничение скорости записи при программировании флеш связано с низкой скорость физической записи. Ваш драйвер не решает эту проблему.
В этом случае глупо выделять кеш.
А еще, если у Вас UART, то в этом случае буфер 256 байт . В этом случае пишем по 256 байт.
В итоге, Ваш универсальный драйвер для гипотетического универсального микроконтроллера. В реальности все делается для конкретного железа.
----------------
Если Вы по USB будете писать во флеш, то у вас не предусмотрена синхронизация. В итоге будете писать по 256 байт и медленно.
"Пример: хотим мы записать 10 страниц с помощью этого алгоритма и будем записывать их не сразу, а по одной, не важно подряд или в хаотичном порядке. В итоге мы 10 раз сотрём и перезапишем сектор. Неслабо, да? "
где Вы такой пример взяли? Никто никогда так не делал. Вы же сами написали типовой алгоритм. Читаем сектор в буфер, изменяем в буфере 10 страниц, стираем сектор 1, а не 10 раз, и пишем сектор. Это и есть типовой алгоритм.
Аналогично Ваш пример быстродейcтвия. Именно 2x - это и будет классика и без кеша, так как Вы изначально выделяете буфер размером с сектор.
Впечатление такое, что Вы игнорируете даташит и рекомендации разработчиков микросхем, а сразу строите свой велосипед и радуетесь, что "гениально" придумали два не квадратных колеса.
Если из кучи кирпичей выбрать кирпичи с одной трещиной, то демонстрируя только их в качестве примера, можно очень убедительно логически доказать, что такие кирпичи наиболее часто встречаются в природе.
Автор любой статьи аналогично подбирает примеры так, чтобы они подтверждали его умозаключения. В итоге любая статья, в которой "просто о сложном" всегда логична и почти гениальна.
Непонятно лишь одно, почему автор свои рассуждения о своей жизни считает более правильными , чем полученные им в детстве стереотипы родителей.
Может проблема в том, что он, как и его родители, учит на своем опыте.
Но народная мудрость гласит: "Учат на чужом опыте, а вот учатся всегда на своем"
Как говорил Штирлиц -"Запоминается всегда последняя фраза"
В данной статье это : "подписывайтесь" - очевидно в ней и есть смысл статьи.
Обычно новая идея проходит три стадии восприятия обществом.
1)Не может быть никогда.
2)В этом что-то есть.
3)Это очевидно.
А сколько в Германии стоит сокет для этого процессора? И во сколько Вам обойдется плата и монтаж на нее сокета либо процессора?
Затем встанет вопрос о софте и IDE
В итоге проще взять SoC за 10 баксов, который по BLE может годами работать от батарейки, чем что-то городить на этом барахле.
ссылка битая.
Мечтать не вредно, но бесполезно. Этот процессор на eBay стоит в 34 раза дороже.
https://www.ebay.com/itm/255997867360
Есть еще два варианта, "почему фрилансер не берёт предоплаты":
Оба варианта -берется решать "на авось"
1) Он никогда не решал подобную задачу ;
2) Тех задание настолько поверхностно, что он сомневается в реальности решения этой задачи и не может оценить реально ее трудоемкость.
Идеология за... меняет некоторым мозг. И им всюду видятся враги.
А Фау делали в Германии. Там был нацизм, а фашизм был в Италии и там Фау не делали.