45

Ардуино могла быть в 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
Не, ну а что поделать. Хочешь легко - ардуино. Хочешь просто - АВР. Хочешь посложнее - кубэмикс. А если припирает производительность - топчи регистры вручную, изучая тысячестраничный рефмануал.
раскрыть ветку 6
0

Согласен, слабаки уходят в ESP-шники, в хард борды. А тут в реальности - приезжаешь к заказчику, а у него апельсинка начальная

раскрыть ветку 5
0

Что за апельсинка?

раскрыть ветку 3
0

Апельсинку не осилил, валяется где-то... Как для чего-то автономного кушает много, а для чего-то полноценного тормозит жестко(((

+3

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

раскрыть ветку 4
0

Тут и ванговать не надо - одноплатники 2.0 и выше должны устроить свое маленькое "бордельеро"))

0

Неужели Малина еще тормознутее? Хотя с учетом того, что там ОС - все может быть(((

раскрыть ветку 2
0

Малину не имел, но например Orange Pi One со скрипом, но тянет графическую оболочку lxde. Даже видосики на ютубе проигрываются почти без лагов(если не 1080)

0
На малине ты ногодрыг выше нескольких килогерц не получишь (при использовании sysfs), и до двух мегагерц при прямом обращении к регистрам в wiringpi.
+2

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

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

раскрыть ветку 2
+1

Больше всего мне в HAL не понравилась работа с UART...

"-Ox(man gcc) сам инлайнит когда надо" - как интересно, будет время надо будет покопаться с этим компилятором. Хотя я предпочитаю сам прописывать, то, что считаю нужным, а не догадываться, что компилятор оптимизировал, а что нет.

Да, CubeMX для ножек согласен, крутая штука, не надо сидеть с карандашом и перебирать конфигурации, как то его лучше подключить, где ремапить, где нет... У меня пару раз случалось, что-то посадил на ножку (не в STM), а в процессе разработки выясняется, что она нужна для какой-то периферии, с Cube в этом смысле очень удобно. Разработчики HAL и Cube почитали бы это - плеваться начали, что мы их детище только ради ножек используем)))

раскрыть ветку 1
+1
не, ну куб не только ради ножек конечно:)

подобрать кристалл, ещё там удобненько схема тактирования рисуется

а на счёт : "я предпочитаю сам прописывать, то, что считаю нужным, а не догадываться, что компилятор оптимизировал, а что нет.", я не особо мастер в теме, но как понимаю, что там для МК задаются какие то базовые вещи в Makefile типа:


LDFLAGS += --specs=nano.specs --specs=nosys.specs --specs=rdimon.specs

CLAGS = -Wfatal-errors -Wall -ffunction-sections -Wl,--gc-sections -flto -fno-asynchronous-unwind-tables -Wl,--strip-all -mthumb -mcpu=cortex-m0 -IInclude -D STM32F030x6 -Os


Ну и тут как видно "-Os" (s - оптимизация по размеру) не до жиру :)

+2

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

+4

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

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

+1

Arduino это разве не открытая платформа на базе чипа AVR?)

раскрыть ветку 2
0

Все так! Поэтому и удивляет, почему все так грустно...

раскрыть ветку 1
+1
Что удивляет? Вы кишки digitalWrite() видели? Поиск по таблице и косвенный доступ к регистрам. Его оптимизировать до cbi, sbi не получится.
+1

Прочитав, ожидал в конце поста увидеть пруф. ТС, такое уже не раз попадалось на голландских и итальянских форумах.

раскрыть ветку 1
-1

Пруф в видео. Программы, тесты.

+1

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

раскрыть ветку 6
0

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

раскрыть ветку 5
0

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

раскрыть ветку 4
+1

Зачем человеку скорость, если он, например, запилил систему контроля протечки труб, которая просто раз в секунду считывает показания с датчиков?

раскрыть ветку 16
+1

А электроэнергия у него тоже бесплатная? Или лишние деньги на более дорогой микроконтроллер есть?

раскрыть ветку 13
+3

А вот очень интересно такое сравнение.

Если не трудно, то запилите тест энергопотребления одной и той же программы на предмет энергопотребления.

Мне кажется что платформа будет иметь значение, а вот то на чем написана - нет.

раскрыть ветку 5
+1
И на сколько же больше денег «сожрет» ардуина? Особенно если отминусовать от этого затраты на оптимизацию кода (как человекочасы, так и электричество на большом брате). Как бы ваша «экономия» в минус не ушла.
одно из самых глупых и вредных занятий в разработке - это оптимизация ради оптимизации.
раскрыть ветку 6
0

смотря что течёт по трубам. ладно если вода, а если бензин? пока нет требований, то и способ реализации неясен

раскрыть ветку 1
0

Само собой. Я про среднестатистических начинающих инженеров

А так, классика, конечно: "без ТЗ и результат ХЗ"

0

Ну и пульсирующий траффик...

Похожие посты
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: