Отвлеченный вопрос. Почему AVR? Почему например не STM?

axill
Offline
Зарегистрирован: 05.09.2011

Когда решил выбрать себе микроконтроллеры для хобби выбор пал на ардуино как наиболее популярную платформу. Но сейчас уже глуюже понимая тему не могу понять - STM при примерно той же стоимости на порядок круче и по производительности и по памяти любого рода и по кол-ву портов и по кол-ву фишек (всяких там таймров и т.д.) на борту. Но при этом у популрной ардуины кондовые AVR. Почему?

Тот же аналог ардуины Leaf Maple с контроллером STM при примерно той же стоимости просто как супер компьютер рядом с десктопом. Но Leaf maple очень мало распространен. Искренне не понимаю )

leshak
Offline
Зарегистрирован: 29.09.2011

 А слова "исторически сложилось" ни на что не наталкивают? Как обстояли дела с STM при первых ардуинах? Были так же доступны? Были в DIP корпусах? Можно было запрогармить с помощью LPT и нескольких резисторов? Было ли такое количество сообщества/документации/примеров?  Да возможно банально - авторы ардуины имели AVR опыт, но не STM. Сделали на том что "знали хорошо". "Чайникам" понравилось, а для STM-ма о чайниках, тогда, никто не позаботился. Вот они и проиграли эту нишу. Кто первый успел занять. Теперь многие производители пытаются ее занять (поняли что это важно), но одно дело "занять пустую", другое "вытолкнуть кого-то". Когда уже есть куча либ, примеров, форумов.

Да и "космический корабль" многим и не нужен. Даже AVR-ровских фичи для 90-80% ардуино-проектов излишни. А "все лишние", даже если оно не используется - пугает новичков.

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

axill
Offline
Зарегистрирован: 05.09.2011

leshak пишет:

 А слова "исторически сложилось" ни на что не наталкивают?

Эту формулировку помню со школы, когда спросил учителя по физике - почему рисуют, что ток течет от плюса к минусу, хотя на самом деле ток это поток отрицательно заряженных электронов от минуса к плюсу :) Ответ был - "исторически сложилось" :)

Мои предположения полностью совпадают с вашими объяснениями. Я человек запасливый, запасься камнями теперь думаю, не зря ли )) Но с другой стороны так много всяких штук действительно не требуют больше того, что умеют делать avr-ы

step962
Offline
Зарегистрирован: 23.05.2011

leshak пишет:

Были в DIP корпусах?

 Не было и нет.

Цитата:

Можно было запрогармить с помощью LPT и нескольких резисторов?

Элементарно - с помощью USB-шнурка (загрузчик зашит на заводе, его ни стереть, ни испортить нельзя).

Цитата:

Было ли такое количество сообщества/документации/примеров?

Обширного сообщества не было и нет.

------------------------

Микроконтроллеры с ядром ARM (в т.ч. STM32), несомненно имеют значительно больше встроенных возможностей. Обратная сторона этого богатства - сложность настройки конкретного устройства на конкретный режим. То, что у AVR требует установки нескольких битов в паре регистров, в ARM выливается в настройку нескольких компонентов микроконтроллера с заданием нескольких битов в трех-пяти-десяти регистрах. Как результат - вместо пары строк кода требуется почти страница.

step962
Offline
Зарегистрирован: 23.05.2011

axill пишет:

- почему рисуют, что ток течет от плюса к минусу, хотя на самом деле ток это поток отрицательно заряженных электронов от минуса к плюсу :) Ответ был - "исторически сложилось" :)

Кстати, а не задумывались вы о том, в каком направлении "течет ток" в жидкостях и газах? В плазме той же?

axill
Offline
Зарегистрирован: 05.09.2011

step962 пишет:

Кстати, а не задумывались вы о том, в каком направлении "течет ток" в жидкостях и газах? В плазме той же?

В школе этого не проходили )) понятное дело, что физическое перемещение, связанное с течением тока, определяется тем, за счет каких частиц происходит передача заряда.

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

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Мне STM очень нравится как таковой... Мапл этот даже в столе лежит... руки не доходят. STM действительно на голову выше и при этом почти никому не нужен из-за... не буду повторяться. Ардуино используется не как процессор, а как удобный лайфрей, а здесь главное - библиотеки. У Мапла их кот наплакал. Есть еще на PIC32 - там та же песня - нет библиотек.

Immortal
Offline
Зарегистрирован: 28.12.2013

Может за эти пару лет кто то уже собрал самодельную отладочную плату на STM32? Примеров самодельных плат хватает: [1], [2], [3]

Также хватает и уже готовых к употреблению китайских плат, но мне все же нравится разводить отладочные платы самому, под свои нужды, а потом можно даже заказать их изготовление китайцам. Получается довольно дешево (Примерно 14,42USD за 10 плат размером не больше 5х5см. Это включая доставку)

Китайские ардуины и просто AVRки россыпью постоянно дешевеют на aliexpress. Вероятно и STM32 дешевеет такими же темпами, я просто за ними не слежу. Уже сейчас можно купить 10-50шт контроллеров очень дешево. Средние цены такие:

$0.47 / шт. STM32F030F4P6 48 MHz Cortex-M0 core, 64 KB flash, 8 KB RAM. Схема NUCLEO-F030R8 20pin TSSOP

$1.19 / шт. STM32F103C8T6 72 MHz Cortex-M3 core, 128 KB flash, 20 KB RAM Схема NUCLEO-F103RB. На нем еще Maple Mini собран. Схема в пдф есть тут maplemini.pdf

Как видно, На схеме нет ничего сложного, 8MHz кварц 2 кондера по 18пик возле него, обычкая рц цепочка на ресет, фильтры по питанию, стабилизатор, ЮСБ порт. Остальную часть схемы можно оптимизировать, чтобы было поменьше компонентов на самодельной плате.

$3.79 / шт. STM32F407VE 168 MHz ARM Cortex-M4F core, 1024 KB flash, 192 KB RAM, 4 KB battery-backed RAM in LQFP100. Схема discovery board

Цены на AVR-ки для сравнения:

$0.45 / шт. ATMEGA8A-AU TQFP32

$1.09 / шт. ATMEGA328P-AU TQFP32

$0.76 / шт. ATMEGA16A-AU TQFP-44

$0.75 / шт. ATMEGA128A-AU TQFP64

$3.42 / шт ATMEGA2560-16AU TQFP100

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну 328 мегу покупать нет смысла, когда распаянную pro mini с обвесом можно взять за теже деньги

Immortal
Offline
Зарегистрирован: 28.12.2013

jeka_tm, да, именно так я и написал в другой теме Интересное на aliexpress и eBay.

Тут привел цену просто для сравнения. Если бы китайцы были умнее, они бы клепали не клоны про мини, а ардуинки своей собственной разработки на ATMEGA128A-AU.

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

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Immortal пишет:

STM32F030F4P6, 48 MHz Cortex-M0 core, 64 KB flash, 8 KB RAM

STM32F103C8T6, 72 MHz Cortex-M3 core, 128 KB flash, 20 KB RAM

STM32F407VE, 168 MHz ARM Cortex-M4F core, 1024 KB flash, 192 KB RAM

STM32F030F4 - 16 KB flash, 4 KB RAM

STM32F103C8 - 64 KB flash, 20 KB RAM

STM32F407VE - 512 KB flash, 192 KB RAM

Andrey-S
Offline
Зарегистрирован: 02.01.2015

А STM программится уже другими циферко-буковками или многое схоже с дуинкой?

Гриша
Offline
Зарегистрирован: 27.04.2014

Отвлеченный вопрос. Почему AVR? Почему например не STM?

приводить примеры не буду, но сколько форумы читаю, примерно раз в полгода появляется тодобная тема :) а ответы не меняются... "исторически... даташиты... библиотеки.... "

кто первый встал - того и тапки

Immortal
Offline
Зарегистрирован: 28.12.2013

А STM программится уже другими циферко-буковками или многое схоже с дуинкой?

Многое похоже. Синтаксис там обычный C++, ничего сложного нет. Линейка плат Nucleo от ST поддерживает подключения к «Arduino» и «ST Morpho» разъемам, которые позволяют легко расширять функциональные возможности платформы. Разъемы обеспечивают подключение к периферийным устройствам и шилдов от широко распространенной экосистемы Arduino, позволяя разработчикам удобно и легко добавлять специальные функции и масштабировать свой проект.

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

У них есть онлайн компилятор mbed. Онлайн библиотеки имеют абстракционный уровень позволяющий взять готовый код для Arduino и скомпилировать его на STM32. Но mbed сделан только под платы discovery. Надо покупать хотябы одну discovery ради программатора, а дальше делать свои клоны discovery, макетка-friendly. Такой форм-фактор плат ИМХО самый удобный для быстрого прототипирования. Да и в готовом устройстве оно потом нормально смотрится.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Andrey-S пишет:

А STM программится уже другими циферко-буковками или многое схоже с дуинкой?

В основе Ардуино лежит микроконтроллер AVR Atmega. Микроконтроллеры AVR Atmega, ATtiny  и микроконтроллеры STM8, STM32 пргограммируются на Си.

Но конктерно для платы Ардуино придумали специальную среду разработки Arduino IDE. В ней используется облегченный/упрощенный язык Wiring, который основан на том же Си. Поэтому новичкам легче будет осваивать Ардуино. Плюс по AVR/Arduino больше инфы, чем по STM. На STM легче переходить после других МК (AVR, PIC) с некоторым багажом знаний. STM32 аппаратно сложнее - сложная система тактирования, больше регистров, больше периферии.

STM8 - 8-битные МК, по ним вообще мало инфы.
STM32 - 32-битные МК с ядром ARM, по ним инфы больше и они популярней.

Immortal
Offline
Зарегистрирован: 28.12.2013

Но конктерно для платы Ардуино придумали специальную среду разработки Arduino IDE

Есть дополнение Arduino_STM32 с которым Maple mini и другие STM32 платы поддерживаются в самой обычной Arduino IDE.

Но да, начинать надо с Ардуино переходя на STM32 только там где нужен более быстрый контроллер.

 

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Вообщем, мне это в скором времени точно не грозит... Но для общего развития знать надо!

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Мне таймеры в STM32 понравились - у них 16-битный предделитель, можно выставить любой в диапазоне 0 - 65535. Хоть 11347 какой-нибудь... Это не 8/64/256/1024 как в AVR...

И ещё, зацените систему тактирования -http://i.stack.imgur.com/CNhiO.png
Если вдруг заглючит внешний кварц - может автоматически переключиться на встроенный в МК осциллятор, не давая камню полностью упасть.

MacSim
Offline
Зарегистрирован: 28.11.2012

1 Не знаю как сейчас, но были проблемы с ПО для STM.

т.е ПО было, но в основном платное.

2 с авр проще разобраться с 0-ля. само по для стм поставить и настроить чего стоить не говоря уже о том, чтобы проект собрать.

по для авр поставил и можешь шить.

3 кол-во товарищей готовых подсказать по авр больше. те кто работает с стм не будут отвечать на вопросы школьной программы.

сами на свой вопрос и отвечаете. ваш выбор пал на авр, так и у других.

зы авр тоже разные бывают.

Immortal
Offline
Зарегистрирован: 28.12.2013

Менять AVR на STM8 это шило на мыло. И неважно что STM8 дешевле, готовые устройства на них оказываются дороже в сборке. Существенный минус STM мелкий шаг ног, что сразу повышает класс плат до 4го и резко увеличивает требования к монтажникам и процент брака.

 

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Immortal, мне одному показалось, что вы не просто так пишете, а уже пиарите конкретную линейку процессоров, в каком-то виде являющуюся конкурентной Ардуине? :)

Давайте попробую ответить на ваш вопрос со своей колокольни. Да, замечу что интересоваться (теоретически) современным положением дел и крайне поверхностно я начал около года назад, а приобрел впервые "для дома и хобби" Мегу2560 только к середине мая. Но, при этом лет, ой, уже более 25 (1985-1991) занимался разного рода "спектрумами", "специалистами", "океанами-240".. и даже ваял что-то свое на К1802-К1804 и К589, имея небольшой опыт работы на "бортовых вычислителях".

И так почему Ардуино и AVR, а не STM?

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

Из AVR, посмотрев и почитав даташиты, пришел к выводу, что оптимальным выбором будет Мега2560, несмотря на то, что есть xmega и шустрее и функциональней. Но на 3.3в.. Сейчас полно шилдов и плат, которые терпят 2.8-5.5в и типа им "все равно" .. но, видимо "исторически сложилось" в частности у меня. 5-вольтовую технику как-то проще и ближе воспринимаю.

Посмотрев STM, тоже присмотрелся к F4, на котором есть Discovery .. очень понравилось .. а потом начал тупо сравнивать.

Теперь, следите за пальцами:

AVR - это 8/16 битный.

а) Стало быть "для хранения слова" в среднем 1.5 байта. Имеем 8кбайт .. или 6к "данных". Не густо.

б) Каждая команда - 2 байта, есть и по 4 .. имеем 128К команд или несколько меньше. Уже лучше.

в) Частота работы 16Мгц, одна команда = 1 такт. На самом деле не совсем так, но похоже. Имеем 16Мипс. Совсем неплохо даже (286 были хуже!)

г) И последнее, как сами пишете, для управления требуется 1-4 команды (это уже по моему опыту) .. имеем управленческую частоту около 0.5-1Мгц.

STM32. На тот момент (я позже по этому поводу тоже пройдусь) мне было доступно описание Cortex-M3 c 20к оперативы.. и 128 флеша, на 72Мгц.

а) 32 бита. Соответственно количество байт оперативы надо делить на 3-4 .. имеем теже 5-6 к элементарных данных .. ну может 8. Не принципиально больше.

б) Команды - длиннее и тем же подсчетом получаем меньший объем памяти команд.. примерно 50-60К "всего" как ни странно.

в) Частота работы - "круть" 72 Мгц .. и даже аппаратное умножение "за такт". Но, читая описания не раз натыкался на "единая 32-х битная шина данных" .. как достоинство. То есть, таки 2 такта - шина мультиплексированная. Все равно 36Мгц - очень здорово. И вот тут вспоминаешь работу длинными целыми: зачисть старшую половинку  .. чиселки очень часто нужны куда как меньше байт, ну пару.. управлять яркостью далее байта - практически бессмысленно, динамический диапазон ламп не позволяет. Впрочем как и крутить ШИМ мотору. То бишь эту скорость надо смело делить ещё пополам .. 18Мгц. Уже и не так кучеряво.

г) Ну и как сами тут уже отметили: сложность управления кодом. То, что нормально должно делаться в одну команду, на AVR занимает в пределах 10-и, часто 3-4 .. на STM потребует страничку кода, по вашим же замечаниям. Они достаточно верны.

.. как итог, "взвесив все за и против" .. выбрал Мегу2560.

Ну и напоследок: "сообщество", "поддержка", "литература", "средства разработки, отладки", "периферия" - всё это ДАЛЕКО НЕ ПУСТОЙ ЗВУК.

Вот не нашел я год назад ничего про ARM-4 или как там его .. ваще не нашел. Ни Дискавери никак .. а вот найди тогда, может быть тут и не писал, а общался в тех сообществах. Это то, что хотел отметить напоследок: банальный недостаток информации и низкая маркетинговая политика владельцев STM32.

Всё вышеизложенное - есть мое ИМХО и тот процесс, которым я шел выбирая себе микроконтроллер и плату для хобби. "на поиграться".

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

MacSim пишет:

1 Не знаю как сейчас, но были проблемы с ПО для STM.

т.е ПО было, но в основном платное.

CooCox бесплатный, AC6 System Workbench бесплатный. Keil для STM32F0/STM32L0 тоже бесплатный, для остальных - до 32КБ кода бесплатно, плюс отличный симулятор/отладчик.

MacSim пишет:

2 с авр проще разобраться с 0-ля. само по для стм поставить и настроить чего стоить не говоря уже о том, чтобы проект собрать. по для авр поставил и можешь шить.

Поставить ПО для STM ничего сложного там нет. Вот собрать и настроить проект - да, тяжело по-началу разобраться что и куда.

MacSim пишет:

3 кол-во товарищей готовых подсказать по авр больше. те кто работает с стм не будут отвечать на вопросы школьной программы.

Так то да, комьюнити по AVR больше, инфы тоже больше. Но и на STM не мало. На многих форумах есть разделы по ARM/STM. Есть доки от производителя.

По мне, так действительно ARM/STM легче осваивать после AVR. Когда уже есть какие-то знания, умение работать с регистрами и переферией на низком уровне. Есть конечно для STM и высокоуровневые либы SPL/HAL, даже визуальный конфигуратор CubeMX. В общем, было бы желание. Не так страшен зверь, как его малюют.

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:

.. как итог, "взвесив все за и против" .. выбрал Мегу2560.

Очень грубое и необъективное сравнение. Если кратко, то stm32 аппаратно рвет все меги вместе взятые изящно и не напрягаясь. Как вы там такты считаете и шину мультиплексируете мне вообще не понятно, т.к. у стм имеется кеш предвыборки с предсказанием переходов с одной стороны, а набор команд для работы отдельно с 8-бит, 16-бит и 32-бит, с другой. Учитывая данное обстоятельство, правило, что одна команда выполняется за один такт в большинстве случаев справедливо для стм32. Галимый числодробитель на стм8 быстрее, чем на меге при равенстве тактовых частот за счет более продвинутой внутренней архитектуры первого. Если же касаться периферии, то там вообще полная тоска для меги. Мало того, что стм32 убивает мегу в этом плане количественно, качественно это вообще другая планета. Различия и качественное превосходство настолько велики, что я просто теряюсь с чего начать процесс иллюстрации.

Говорит ли все вышенаписанное о том, что дни меги сочтены и будущее ее безрадостно? Ничуть. За мегу я соврешненно не печалюсь в этом плане. Мега проще в использовании, достаточно эффективна и в зависимости от задачи, часто выбор именно меги в качестве центрального процесора оказывается более предпочтительным.

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

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

a5021 пишет:

Если же касаться периферии, то там вообще полная тоска для меги. Мало того, что стм32 убивает мегу в этом плане количественно, качественно это вообще другая планета. Различия и качественное превосходство настолько велики, что я просто теряюсь с чего начать процесс иллюстрации.

Первое из переферии, что меня удивило в STM32 после AVR - это количество и функциональность таймеров.

a5021
Offline
Зарегистрирован: 07.07.2013

Как-то в качестве зарядки для хвоста я написал код для работы с 1-wire при помощи единственного канала захвата/сравнения 16-битного таймера стм. Это оказалось совсем не сложно. На меге я совершенно не представляю, как бы это можно было сделать.

А поочередная оцифровка двумя независимыми АЦП одного сигнала со скоростью один миллион семплов в секунду каждый с "оттаскиванием" полученных данных посредством DMA? Да тут сравнивать нечего.

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

A5021, я не спорю. Сравнение конечно же "не корректное" и понятно что STM32 порвет атМегу во всех отношениях .. свой итог, я отписал внизу:

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

Да, найди я тогда детальные описания и платку с Дискавери .. вполне возможно, что тут меня бы и не было. Но .. уже поздно. Для моих задач обучения ребенка, методом "щупанья битиков и байтиков" Мега вполне достойна и менять "шило на мыло", может и буду но "ой как не скоро" (а может подрастет сам поменяет).

Immortal
Offline
Зарегистрирован: 28.12.2013

Я вот как то вообще не следил за ценами на готовые платы с STM32 и прошлепал несколько интересных пледложений:

$2.12 / шт. Stm32 STM32F030F4P6 - отличная замена Pro Mini! Это же чудо стоит по 55 центов за голый контроллер

$2.99 / шт Stm32f103c8t6 ARM STM32 Forarduino

Китайский ST-Link можно купить за $2.65 на Aliexpress, например. (у меня уже был в наличии)

Я решил скинуть на барахолке свои запасы новеньких Pro Mini и полностью перейти на STM32. Совсем с авр я уходить не собираюсь - буду пользоваться только своими самодельными ардуино-совместымыми платами на ATMEGA128A и ATMEGA8A, но с готовыми ардуино платами завязываю.

Сравнение платы на STM32 за $2.99 с ардуино Uno и Pro Mini:

 

ATMEGA328

STM32F103C8T6

Выигрыш, раз

Flash, кБ

32

64

2

ОЗУ, кБ

2

20

10

Максимальная частота, МГц

20

72

3.6

Скорость АЦП, kSPS

15

2*1000 (можно разогнать)

133

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Задам тут вопросы, заинтересовавшие меня в связи с холиваром AVR vs ARM в соседней ветке, дабы не флудить там. Просто в целях "образования". Как понимаю, в тактировании разница велика (168 против 16) и тут как-бы сроить не с чем, но тем не менее:

1. Ногодрыг на STM32. Как понимаю, там приведена предельная частота ногодрыга для STM на 168Мгц.

а) как будет падать эта частота если перейти к зацикливанию пары команд?

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

2. Где найти подробное изложение и можно ли STM32 программировать на том же C/C++ типовыми средствами в Линукс? Так, к примеру, для AVR есть avr-gcc, avr-dude ... сделал себе в том же Eclipse (есть и готовые) проектик, прописал в нем чего и зачем вызывать при "построении, запуске" .. а то просто make-файлик .. и ву-а-ля, сиди и работай. А тут так можно? Есть готовые решения?

Ну и замечания по разрядности.

а5021, к сожадению, но переход с 8 на 32 в среднем повышает требования к памяти в 2-3 раза, как бы вы не "выравнивались". Поясню на том же ногодрыге: нормально это 1 бит, но в 8-и разрядниках обработка хранится в .. байте. Ибо так проще. То же самое и тут: будет храниться в слове. Ну и как частный случай классический millis(), delay(), delayMicroseconds() - они как ни странно 32-битные. Оно завсегда надо именно таковые? Как часто надо выдерживать пайзу в микросекундах (или миллисекундах - однофигственно) в длинных целых, то есть больше 65000?

Простой перевод на uint16_t в AVR экономит по .. 6 байт на вызов. А на uint8_t? :)

Это к вопросу роста требуемой памяти. Да, можно выравниванием значительно снизить рост размеров, но вызов с использованием длинных параметров - не спрячешь никуда, без "переписывания" велосипеда. А на 32-битной архитектуре .. вроде как и непонятно "зачем". Так что 2-3 оправданный коэффициент и подтверждается массой имеющегося кода "общего" назначения, практически кругом. Вспомните переходы из 86 в 286, в 386 .. и "есстественный" рост размера ПО и требований к памяти. (Для справки, физтехдос укладывался в .. 4 килобайта .. скока там "ядро" виндовс на сегодня?) :)

Да, там же задавался вопрос про размер блинк. Блинк на Мега2560 занимает .. 490 байт, из которых 270 байт - таблица векторов прерываний (их значительно больше чем в мелких) .. около 220 байт и стартовый код с затычками. Не думаю, что на мелких процах без учета таблицы векторов прерываний он существенно меньше. Все же сколько занимает полноценный блинк на STM32?

Ну и соответственно: где можно найти помощь для начинающих на STM? что-то типа таких ресурсов как этот или амперка под Ардуино и AVR..

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

По stm32 сейчас очень много развелось ресурсов и форумов, только успевай гуглить ;) А по поводу среды - вот, скажем http://robocraft.ru/blog/ARM/653.html - там как раз есть, как эклипс настроить. В качестве компилятора - тот же gcc.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

P.S. Да кое-какие ответы на озвученные вопросы выше уже нашел сам.

a5021
Offline
Зарегистрирован: 07.07.2013

А что-то с РИСКами нынче как-то подзавязали. Во всяком случае, тезис, что лучше выполнить кучу простых команд, чем одну сложную, нынче немного потерял былой лоск. За один цикл теперь выполняется сложная команда и какой тут выигрышь может быть от РИСКа не очень понятно.

Насчет размеров блинка ответить затрудняюсь, т.к. вообще никогда не следил за размером сваренного компилятором кода. Чтобы забить 32к флеша на стм32 это должен быть довольно большой проект, а с учетом, что с библиотеками не густо, то писать пришлось бы вручную. Я к такому геройству пока не готов и там, где нужно рулить с МК кучей разнообразого железа и дергать интернет, пользуюсь ардуиной. Это проще и быстрее.

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

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

По поводу масштабного ногодрыга на стм32 могу заметить, что если подписать под это дело DMA, то может получиться довольно шустрый пляс. Если зациклить вывод из памяти на порт GPIO, то это может работать даже без участия процессора. Единственное, если мне не изменяет память, адреса регистров GPIO идут не подряд и вывод сразу в несколько портов таким образом не получится.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я уже нашел отличия в ногодрыгах. :) Если AVR позволяет 1/3 от тактовой для одного пина и линейное снижение для нескольких пинов (1/5 для 2-х, 1/7..) то для STM32 зацикленный ногодрыг начинается от 1/6..1/8, что впрочем не умаляет его большей скорости за счет повышения тактовой частоты.

А вот с размером скетчей и потребляемой памятью под переменные, народ в форумах с вами не согласен. Пока вижу тот самый коэффициентик в 2.5 устойчиво. Ссылок не привожу, ибо их много и в общем-то ничего сверхудивительного тут не наблюдается. "Так и должно быть", ибо так было всегда: чем шире разрядность проца, тем больше надо под код и данные, но тем быстрее оно и пашет (если железо позволяет, тут в частности скорость чтения флеша - критический параметр и никакой конвеер не спасает, только уширение шины команд по отношению к длине команды - Thumbs, или как правильно пишется? ). :)

32кб памяти под флеш - это достаточно несложный проект для управления девайсами. Даже без каких-либо серъезных просчетов данных. А при компиляторах, сующих все и вся из либы в код - так и "2 пальца об асфальт". Уж извините, но мегу2560 я брал в первую очередь именно по этому показателю, и не очень уверен смогу ли впихнуться в этот объем в конечном варианте. :)

Да и по DMA .. оно конечно хорошо, когда оно есть. Но ему требуется достойный объем оперативы для хоть сколько-то полезного применения. Те объемы что есть что в АВР, что в СТМ - это "курам на смех". ДМА тут делать реально нечего и оно незачем по большому счету. Только в очень старших моделях с относительно большим (делим на 2.5!) объемом SRAM.

.. ну а рисками .. да получилось как и всегда - "копроэкономика побеждает разум" и "новое - это хрошо забытое старое". Оч. хорошо помню холивары 20-и летней давности .. Самый "рисковый риск" .. PDP-11. :)

Отсюда, мои результаты по поиску оптимального набора команд: оптиум для "общего назначения" (вычисления) это регистроориентированный доступ в память в виде взвешенной смеси из 1-3 адресных команд со стековым набором. Удлинение кода операции на 2 бита легко компенсируется сокращением количества команд в 95% случаев. Ну и по "адресации операндов" в памяти: крайне полезна 2-х регистровая адресация операнда через косвенный адрес со смещением и сложение с базовым регистром адреса. Аналогично и с командами передачи управлений .. легко реализуется табличное программирование (конечные автоматы или ООП), практически 1 оператор = 1 команда. Только вот для покрытия 80% попаданий в смещение вполне достаточно .. 12 бит адресной константы. Самое смешное, что 90% кодов операций тоже можно упихать в .. 12 бит. Как итого: 12/24/36/48-битные коды команд наиболее полно используют память программ, если она отделена от данных (гарвард), это при 16-и РОНах.

Это в АРМ - как-то "учтено"? В АВР - уже вижу что "точно нет" (т.е. "код НЕ оптимален"), в ПИКах и не было никогда. Не разобрался ещё, поэтому не стану так безоговорочно утверждать "оптимизированный набор команд" .. его пока нет в природе. Ни для вычислительных применений, ни для управления чем-либо. Только частные случаи для частного применения в конкретных вариантах исполнения. :)

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну с ногодрыгом там как то заморочено. брал ардуину и подключал дисплей nokia 1616. и также к stm32 дискавери. clk на ардуине выходило почти 1мгц, а на stm никак больше 150кгц (плюс минус) не получалось. очень долго мучались. потом как то победили, но все равно ардуина 16мгц и stm 48 мгц приблизительно одинаково дергали, что честно сказать сильно удивило

axill
Offline
Зарегистрирован: 05.09.2011

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

для работы с Нокия 1616 на stm настраивают 9ти битный SPI, примеры в сети есть

а на avr SPI бывает только 8ми битный

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:

Я уже нашел отличия в ногодрыгах. :) Если AVR позволяет 1/3 от тактовой для одного пина и линейное снижение для нескольких пинов (1/5 для 2-х, 1/7..) то для STM32 зацикленный ногодрыг начинается от 1/6..1/8, что впрочем не умаляет его большей скорости за счет повышения тактовой частоты.

Вот тяжело, честное слово, с вами разговаривать. Я уже и на слова производителя сослался и картинку проверки энтузиастами прилепил, ан нет, прямо из ниоткуда выпрыгивает "1/6 и баста!" Давайте тогда рассказывайте, как у вас получилось 1/6 и заодно объясните, как на картинке вышло 1/2.

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

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

Цитата:
"Так и должно быть", ибо так было всегда: чем шире разрядность проца, тем больше надо под код

У меня стойкое ощущение, что какие-то собственные специфические представления натягиваются на "картину мира". Нет и быть не может здесь "перерасхода" ОЗУ под переменные.

Цитата:
32кб памяти под флеш - это достаточно несложный проект для управления девайсами.

То у вас дос в 4к на все случаи жизни, то 32к мало. Надо бы выбрать что-то одно.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

A5021, вот хорошая ссылка на начало работы с STM32F04: http://geektimes.ru/post/254722/

void main()
{
  //Enable port D clocking
  *(unsigned long*)(0x40023830) |= 0x8;
  
  //little delay for GPIOD get ready
  volatile unsigned long i=0;
  i++; i++; i++;
  i=0;
  
  //Set PD13 as General purpose output 
  *(unsigned long*)(0x40020C00) = (*(unsigned long*)(0x40020C00)& (~0x0C000000)) | (0x04000000);
  
  while(1)
  {
    //Turn LED ON
    *(unsigned long*)(0x40020C14) |= 0x2000;
    //Delay
    for( i=0; i<1000000 ;++i );
    //Turn LED OFF
    *(unsigned long*)(0x40020C14) &= ~0x2000;
    //Delay
    for( i=0; i<1000000 ;++i );
  }
}

А теперь посчитайте длинну констант и их количество. Да, не забудьте что операции "|=" и "&=" занимают тут по 4(ЧЕТЫРЕ) такта шины.

То же самое для Ардуины:

main()
{
    // pinModeOut(pinLed); -- ставим 13 ногу на выход
    *(volatile uint8_t *)(0x24) |= (uint8_t)128;

    while(1)
    {
         // pinOutHigh(pinLed); -- включаем светодиод
        *(volatile uint8_t *)(0x25) |= (uint8_t)128;

        time_delay16(1000);

        // pinOutLow(pinLed); -- выключаем светодиод
        *(volatile uint8_t *)(0x25) &= (uint8_t)127;

        time_delay16(1000);
    }
}

И заметьте, что тут команды выполняются 1 такт, а не 4. Итого, имеем

в STM32: 2x32+2x16 = 10 байт на константы всего в двух командах

в AVR: 4x8 = 4 байта на константы в тех же ДВУХ командах.

Разница в ДВА С ПОЛОВИНОЙ РАЗА. Надоели. :)

P.S. И время исполнения этих команд в AVR = 3(три такта), из которых 2 команды и переход на начало цикла, а в STM32 имеем 9 тактов, и то только если переход на начло цикла тоже за 1 такт, а не дольше. И каждый следующий "светодиод" внутри цикла будет добавлять в общем случае (а не когда это "рядом") .. + 8 тактов на брата. Вместо +2 такта в Ардуино.

В целом, как и писал ТАК БЫЛО и ТАК БУДЕТ. Хотите "ширшее" обрабатывать данные (миллис в 32 бита), да больше и шустрее передавать по шине - ИЗВОЛЬТЕ ПЛАТИТЬ. Да, да .. памятью и количеством времени. И спасает только большая частота тактирования.

Поэтому и писал уже в самом начале: "каждому овощу - свою кухню и кулинарию". Но, в задачах управления периферией - это не айс. Совсем не айс. А вот то, что в STM32 как большей разрядности большие числа считаются ТАКЖЕ БЫСТРО как и в ардуино маленькие - это да. Это и есть специфика его применения. "его кухня".

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

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

Лично меня не парят числа 1/6 или еще сколько там, мне STM32 хватает и RAM и флеша. Сейчас как раз собираюсь юзать STM32F050F4P6 (F031), там RAM 4К и для DMA мне этого вполне хватит, и совершенно без извращений (оптимизации).
Ногодрыг, как уже правильно сказали, в STM32 как правило не нужен, есть куча периферии, которая позволяет не пользоваться извращениями (ногодрыгом).

 

a5021
Offline
Зарегистрирован: 07.07.2013

То, что вы привели в качестве примера, является ишемическим бредом из серии, как с помощью ракообразия ракообразно написать ракообразный пример самым ракообразным образом. На кой хрен писать по указателям, если можно одной единственной командой поднимать/снимать нужный бит в регистре порта? Без всех этих шизофренических констант и операций read-modify-write. Еще раз медленно по буквам: для ногодрыга есть специальный регистр, который предназначен для атомарных операций по манипуляции состоянием выходов. В случае, если для того же самого существуют еще тысячи способов, то надо так и говорить, что это другие способы, а не единственно-возможные. Еще раз поглядите на запощенную мной картинку и убедитеть, что ногодрыг возможен на скоростях 1/2 F_CPU без перерасхода чего-либо.

kisoft пишет:
Ногодрыг, как уже правильно сказали, в STM32 как правило не нужен, есть куча периферии, которая позволяет не пользоваться извращениями (ногодрыгом).

Я категорически против утверждения, что ногодрыг на стм32 является извращением. Как всякий метод он предназначен для разумного использования, а не использования всегда. Если на МК с одним последовательным портом вам потребуется второй, то как вы не обзывайте это извращением, а придется его делать с помощью ногодрыга. Более того, мне известен подход, когда для удобства и упрощения разводки платы отказываются от использования аппаратных фич и делают какой-нибудь железный интерфейс с помощью ногодрыга на "удобных" пинах.

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

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не вопрос, делайте как хотите

a5021
Offline
Зарегистрирован: 07.07.2013

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

a5021 пишет:

То, что вы привели в качестве примера, является ишемическим бредом ... На кой хрен писать по указателям, если можно одной единственной командой поднимать/снимать нужный бит в регистре порта? ...

Всё, сдаюсь. Только приведите пожалуйста код этой команды, для пояснения, что не надо писать по адресу. Интересно. Мне вот показалось из описания по ссылке (ходили?) что регистры как раз находятся по адресам памяти и то что там в примере написано (запись по адресу) как раз то же самое что и в вашем примере .. нет?

Покажите в чем разница в кодах операций? :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

a5021 пишет:

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


Возможно мне проще, если нужны два usart, я возьму соответствующий камень, у которого не меньше двух. У меня это все хобби, потому на цену особо не смотрю.
IMHO, если не хватило портов, значит это проблема проектировщика, да, знаю, что Заказчик может завернуть такую задачу, что материшься, но сделаешь. На работе софт пишем под Заказчика, потому знаю не понаслышке.
Безусловно, что могут возникнуть задачи, где придётся дрыгать чем угодно. Скорей всего меня зацепило сравнение авр и стм по ногодрыгу в другой теме, только и всего. Догмы и т.п.? Возможно, только я все равно сначала изучаю, а потом делаю.
Я начинал с К580, но когда после Леонардо увидел кортекс, пусть он и не без минусов, но я с него зафанател.
Уфф, что то меня понесло :)

axill
Offline
Зарегистрирован: 05.09.2011

a5021 пишет:

Если на МК с одним последовательным портом вам потребуется второй

в семейке STM32 такой МК найти сложно ) надо специально искать, в отличии от AVR где два и более USART редкость

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:

как раз то же самое что и в вашем примере .. нет?

То же, да не то. Вот во что, примерно, развернется код с картинки, что я постил:

...
0x00000280 : str   r2, [r3, #0]
0x00000282 : str   r1, [r3, #0]
0x00000284 : str   r2, [r3, #0]
0x00000286 : str   r1, [r3, #0]
0x00000288 : str   r2, [r3, #0]
...

axill пишет:
в семейке STM32 такой МК найти сложно ) надо специально искать, в отличии от AVR где два и более USART редкость

Советую начать "специально искать" в серии F0. Там их чуть не половина от всех.

axill
Offline
Зарегистрирован: 05.09.2011

a5021 пишет:

Советую начать "специально искать" в серии F0. Там их чуть не половина от всех.

докладываю. В семейке F0 68 МК:

6 USART - 11 МК

4+ USART - 26 МК

2+ USART - 50 МК

1 USART - 18 МК

18 от 68 это половина?

a5021
Offline
Зарегистрирован: 07.07.2013

BGA (и прочие малопаябельные) корпуса вы посчитали для пущей убедительности?

axill
Offline
Зарегистрирован: 05.09.2011

Вы про stm? У stm есть параметрический поиск. Так что да, это все семейство F0

a5021
Offline
Зарегистрирован: 07.07.2013

Я в курсе про параметрический поиск. Если в  нем откинуть  всякую экзотику, то и выйдет "больше половины". Фигли мне эти 68, если часть из них не купить, а часть не запаять. Замечание про "специально искать" было ни о чем.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

А-а-а... ну, батенька .. подтасовками я не интересуюсь. Мало того что ваш код линеен, то бишь это не ногодрын, так вы ещё его и специально готовили дабы до пары байт ужать .. то есть "шаг влево, шаг вправо - расстрел на месте". А ещё и вынесли в необсуждаемое место (подготовку) всё, что и дает тот самый коэффициент 2.5 .. ну знаете ли .. видел как маркетологи натягивают трусы на глобус, но чтобы разрабы этим же занимались. Да после такого, я на него ваще смотреть не стану .. разводилово.

 

axill
Offline
Зарегистрирован: 05.09.2011

a5021 пишет:

Я в курсе про параметрический поиск. Если в  нем откинуть  всякую экзотику, то и выйдет "больше половины". Фигли мне эти 68, если часть из них не купить, а часть не запаять. Замечание про "специально искать" было ни о чем.

если в курсе поиска то почему бы не привести конкретные цифры? Я убрал все корпуса кроме lqfp и tsop и вышло 42 МК из 55 имеют 2 и более USART. Это соотношение ещё круче - для всей серии 26% имеют один USART, а для паябельных МК только 16% имеют один USART

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну и уж если холиварить то сравнивать надо сравнимые вещи, а именно 5в технику с 5в, а 3.3 с аналогичной. А там у АВРов есть замечательная xMega ... http://www.atmel.com/products/microcontrollers/avr/xmega_technical_detai... тут вам и 12-разпядный АЦП обнаруживается и 4-х канальный DMA и объединяемые счетчики 8-16-32 и интерфейсов туева кучка .. и даже криптографический блок и расчет CRC. Разве что частота 32 Мгц.

Насколько понимаю, 5в СТМ-ок в природе не бывает .. или ошибаюсь?