Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Тут пробегала мысль о том, что рост быстродействия АВРок сдерживается скоростью чтения программного кода из флеш-памяти. С одной стороны, ядро способно на большее, с другой стороны, АВР без флешки на фиг не нужен.
Вероятно, в недалёком будущем атмельцы (и не только), движимые желанием остаться конкурентоспособными, вынуждены будут поднять тактовую частоту АВРок. Вероятно, сделают чтение флеша не пословным, а поблочным, что приведёт к обусловленным буферизацией задержкам чтения при jmp-ах, call-ах, вызовах обработчиков прерываний, чтения данных из флеш-памяти и т.п. Дело не в том, что эти задержки будут заметно больше 1 такта, а то, что их длительность не будет константой и будет сложно предсказуема.
Простой пример. Блоки флеш-памяти будут выравнены на границу, кратную 2^N байт, а вот некоторый цикл в программе может либо попасть внутрь одного такого блока, либо пересечь границу блокораздела и постоянно "свопиться", увеличивая время выполнения кода. Или при чтении байта из флеш-памяти время доступа будет зависеть от того, из какого адреса был считан предыдущий байт данных, что тоже сложно предсказать. Короче, обычные тонкости кеширования. Возможно, для больших компьютеров это не имеет особенного значения, но эмбеддеры живут в своём мирке :)
Хочу спросить, а насколько лично Вам важно, чтобы время работы кода можно было точно рассчитать ? Ведь не секрет, что многие программы для АВРок (и не только) существенно учитывают растактовку команд, используя её для генерирования маленьких промежутков времени (вроде бы, софтовая реализация USB-интерфейса именно так и делает).
Что бы Вы предпочли: МК с фиксированным временем выполнения каждой инструкции или чуть более быстрый МК, но с непредсказуемой растактовкой ?