Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32.

Провел тест, для сравнения скорости выполнения программы на Arduino, AVR и STM32. Результаты мягко говоря удивили. Тестовая программа написанная в Atmel Studio выполнилась в 25 раз быстрее чем на Arduino, но одном и том-же процессоре.

Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32. Arduino, Avr, Stm32, Stm32f103, Тест скорости, Сравнение, Видео, Длиннопост

Еще больше удивило, что AVR обогнал STM32. И дело тут не в архитектуре процессора, не в задержках вызванных ограниченной скоростью доступа к памяти программы (flash latency). Причина в медленных функциях STDPeriph. Многие действия, которые могли бы выполниться за один такт выполняются в лучшем случае за пять, так как находятся внутри функции. Если бы перед оглашением таких функций стояла директива "inline" размер кода и скорость выполнения были-бы значительно выше. После замены медленных функций на прямое обращение к регистрам скорость STM32 утроилась. В CubeMX дела обстоят еще хуже из-за усложненных обработчиков прерываний, callback функций и т.д.

Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32. Arduino, Avr, Stm32, Stm32f103, Тест скорости, Сравнение, Видео, Длиннопост

Производители выпускают все более мощные процессоры, но львиная часть производительности хоронится в дебрях программных уровней, и это явление наблюдается не только в среде микроконтроллеров, а и в компьютерах, операционных системах, и даже там где Вы это читаете. А между тем, переусложненный код приводит не только к замедлению выполнения программ, но и к повышенному расходу электроэнергии.


Остается только надеяться, что наступит светлое будущее и мы сможем избавится от накопившейся избыточности кода, вызванной желанием все упрощать. Или может компьютеры научатся сами для себя писать программы, как знать.

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий

Ну Arduino хорош для тех кто не совсем программист, но хочет что нибудь наваять для себя. Для обучения детей тоже отлично. Для мега быстрого прототипирования не сложных вещей. Но если хоть немного есть опыта, ни в коем случае брать Arduino не надо. Любой самый дешёвый STM32 на порядок лучше во всех отношениях.

раскрыть ветку (6)
Автор поста оценил этот комментарий

Я вот для своих целей взгляд положил на оранжпи. Привычный линукс, тонны документации по ядру, с недавних пор и GPIO в ядре нативное. Отклик на прерывания ожидаю по GPIO не более долей микросекунд, что примерно в 100 раз больше (вроде зявлено 24 MHz, предел), не надо париться ни с какими RTOS и изучать новые платформы, пусть и простые. + веб морду можно будет там же разместить за одно.

раскрыть ветку (5)
Автор поста оценил этот комментарий

Для домашнего-офисного пользования нормально (у меня валяется, по мимо малины третьей). Если не учитывать что греется как чайник. :) Но для полноценного эмбедета и серийных девайсов конечно не очень. Потребление зверское, механику и климатику скорее всего не пройдёт, цена для серийного изделия слишком высокая, жёстким реал таймом там и не пахнет (linux как бы для этого не подходит).

раскрыть ветку (4)
Автор поста оценил этот комментарий

Согласен по всем пунктам. Там только БП на 3 ампера требуется. Но отсутствие реалтайма компенсируется чудовищной производительностью. Хотя вроде FreeRTOS на ней уже работает. На малине точно работает, но она дороже.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Да, производительность действительно отличная, особо за эти деньги. До какой то степени реалтайм компенсируется производительность. Но по факту может потребоваться писать свой драйвер ядра, а это может быть не проще чем завести всё на stm32. В целом всё как обычно зависит от задач. Но железка действительно хорошая. :)

раскрыть ветку (2)
Автор поста оценил этот комментарий

Подозреваю что драйвер ядра писать не тяжелее, чем программировать голое железо, а в чем-то даже легче, ведь потребуется гораздо меньше заморачиваться с оптимизаций как по скорости, так и по памяти. Да у нас тут 4 ядра по полтора ггц и полгига памяти. Хотя я не писал под ардуино-подобные платформы, лишь читал как это делается. Плюс можно разделить критичную к IO часть и тяжелую логику: первое в ядре и на си (кстати можно и Rust побаловаться), другое - 100500 строк кода хоть на высокоуровневом языке, хоть на той же джаве, или, простите, на пхп и с веб мордой. На ардуинках такое можно будет разделить только физически.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Свои особенности при написании драйверов для ядра. На голом железе иногда проще. Я и то и то писал. У линуховой платформы основное преимущество овер дофига памяти и проца. И много стандартных вещей из коробки. Но если они не нужны, то cortex от TI или STM хороший выбор.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку