Ардуино могла быть в 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
Автор поста оценил этот комментарий

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

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

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

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

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

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

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

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

По поводу AVR - смысл в том, что можно отправлять микроконтроллер в разные режимы энергосбережения во время простоя. Чем быстрее выполняется программа - тем больше простоя, а чем больше простоя тем больше экономии. А на STM32 все еще круче, по мимо режимов энергосбережения возможно отдельно включать и отключать тактирование отдельных модулей(порты, таймеры, ацп, цап, дма, интерфейсы и т.д.), тем самым экономя драгоценные миллиамперы. Примечательно то, что после сброса в STM32 почти все выключено, и чтоб заставить что-то работать, нужно включить много "выключателей", думаю это вызвало не мало проблем у начинающих, и возможно именно поэтому STMicroelectronics выпускают всякую фигню типа CubeMX. Но сам микроконтроллер очень крут, необычайно гибок, у него огромный потенциал, главное понять принципы его работы.

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

экономия на спичках какая то. ну будет прога не спасть 100мс вместо 10мс за 10 секунд простоя. заплатишь в год на 1 рубль больше.


хотя не вижу проблем на ардуино, в стандартном иде писать напрямую в регистры в критичных местах

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

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

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

Мне точно не известно, что именно должен делать датчик утечки, но насколько понимаю, от него ничего сложного вообще не требуется. Вероятно я бы его изготовил на основе PIC12F629 (100 мкА при работе на 1MHz, 1 нA в sleep + 300нА собака). При этом ATMega328 (которая в ардуино работает на 16 MHz) во время работы потребляет до 12 мА (в 120 раз). Но если её запустить в тех-же условиях, что и PIC, то во время работы она будет потреблять 500 мкА (в 5 раз больше), а во время сна до 8 мкА (в 26 раз).

Если он на батарейках - экономия я думаю значительная.

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

Для разового устройства можно и батарейки поменять, но использовать знакомый микроконтроллер. Для серийного - есть специализированные
STM32L0, а ещё экономичнее Texas Instruments

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

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

Я на attiny13 делал беспроводные маячки для сигнализации, на nrf24l01 с возможностью дистанционной перенастройки по широковещательному каналу. Маячков надо было много, и 1$ экономии на каждом уже приятно радовал.

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

Кстати, смешно =)

Вы посмотрите на возможности современных смартфонов!

Можно людей в космос запускать

А люди птичками кидаются...

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

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

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

Не совсем так. Если вы делаете штучный продукт, то затраты на оптимизацию могут убить экономический эффект. Если же выпуск продукции будет массовым (представьте сколько можно сэкономить электроэнергии если выпущено 10000 экземпляров?) то это легко может оправдать затраты на оптимизацию.

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

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

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

Поэтому люди берут xдуину за 150р., датчик за 20р, пищалку и мыльницу вместо корпуса. Собирают и радуются своему творчеству =)

А энергия... А что энергия. Многие до сих пор используют лампы накаливания для освещения и не заморачиваются

DELETED
Автор поста оценил этот комментарий
Экономия электричества это проблема потребителя, производитель больше о цене готового изделия думает.
Автор поста оценил этот комментарий

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

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

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

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

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