Ардуино могла быть в 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, Тест скорости, Сравнение, Видео, Длиннопост

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


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

7
DELETED
Автор поста оценил этот комментарий
Не, ну а что поделать. Хочешь легко - ардуино. Хочешь просто - АВР. Хочешь посложнее - кубэмикс. А если припирает производительность - топчи регистры вручную, изучая тысячестраничный рефмануал.
раскрыть ветку
3
Автор поста оценил этот комментарий

Используй DMA в STM, будет летать. Критические места пиши на ассемблере.

3
Автор поста оценил этот комментарий

Ну блин, вы бы еще с малиной сравнили. Там еще x100500 будет

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

коллега код после куба разбирал, там дофигища оверхэда и мертвых кусков, зато под всё сразу и для быстрого старта сойдёт, да я в нём и сам функции/ножки подбирают, а потом пишу в регистры руками

компилятор с -Ox(man gcc) сам инлайнит когда надо

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

Любители седанов, одумайтесь!

Внедорожники куда круче проходят по грязи, а танкам и на овраги насрать