STM32 F103C8T6

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

Logik пишет:
Удивлен что такой знаток её применяет и еще "открывает америку".

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

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

Свои мега-ценные советы насчет itoa приберегите для менее искушенных собеседников. Вам по секрету скажу, что itoa нет в stdlib от IAR-а для STM8.

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

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

Факт "не может" должен быть четко изложен в документации в понятной для потребителя форме. Там же на самом видном месте утверждается что "может" а это - лажа.

a5021 пишет:

 вера в пользу разгворов с вами на технические темы во мне сильно пошатнулась.

Какой еще технический разговор?! За все время от вас, нет ни строчки кода, ни предложения с информацией ни ссылки на источник. От Вас только пиздеж один многобуквенный. пустышка.

a5021 пишет:

Свои мега-ценные советы насчет itoa приберегите для менее искушенных собеседников. Вам по секрету скажу, что itoa нет в stdlib от IAR-а для STM8.

А вот это уже по существу! Про выбор среды разработки для stm.

Выяснено что  stdlib от IAR-а для STM8 не содержит эффективных средств формирования вывода. В отличии от ардуиновского иде, где  itoa легко инклудится и обеспечивает вывод целых чисел с затратами флеша в сотни байт, что в несколько десятков раз эффективней чем у IAR-а.

 

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

Logik пишет:
Факт "не может" должен быть четко изложен в документации в понятной для потребителя форме.

Именно так он там и изложен. Вашему вниманию предлагается "Reference Manual" (RM0008), открытый на странице 215 (в самом начале описания ADC).

Если бы вы хоть раз открыли мануал, то вы бы тоже это знали. Если вы открывали мануал, но не смогли прочитать, то даже и не знаю, что вам тут посоветовать. Значит вы какой-то особенный потребитель, с документацией не до конца совместимый.

Цитата:
Там же на самом видном месте утверждается что "может" а это - лажа.

Покажете мне это место? Если это вам привиделось в даташите, можете не напрягаться. Я там отдельно читаю про ядро, где явно написано, что его частота может быть до 72 мегагерц и вижу отдельное описание двух АЦП с временем преобразования равным 1 мкс. О том, что максимальная производительность АЦП должна обязательно случаться, когда ядро работает исключительно на максимальной частоте, там ничего не написано. Если вы обладаете редким даром прочтения даташитов между строк, то больше всего похоже, что оный дар во втрой раз подряд раз сыграл с вами довольно злую шутку. Значит, как и в случае с "OUTPUT PIN MODE", вы трактуете написанное в своем собственном оригинальном понимании, неожиданном и в чем-то удивительном.

Цитата:
Какой еще технический разговор?! За все время от вас, нет ни строчки кода, ни предложения с информацией ни ссылки на источник. От Вас только пиздеж один многобуквенный. пустышка.

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

То, что никакие ссылки, никакая информация для вас ценности не представляет и авторитетом не обладает, вы мне продемонстрировали своей реакцией на скрины с куба. CubeMX -- это официальный инструмент от производителя для STM32. Он очень наглядно умеет иллюстрировать всю схему тактирования МК. Я специально для вас делаю вырезку в той части, где черным по белому написано, что шина, на которой сидит GPIO тактируется 72-мя мегагерцами (что вы ранее категорически отрицали) и помните, что вы ответили? Вы ответили, что не знаете никакого куба и пофиг все "предложения с информацией", о каковых предложениях, вы теперь вдруг заявили, что они от меня не поступали. Как хотите, но бредить столь откровенно в публичном месте -- это явный перебор.

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

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

А вот как оно выглядит для мапла:

    val = !val;          /* "set" bits are lower than "reset" bits  */
    dev->regs->BSRR = (1U << pin) << (16 * val);

Итого, единственная логическая операция атмеги заменяется на одну операцию отрицания, две операции сдвига и одну операцию умножения на STM32. Это STM32 такой корявый? Некто mr Logik, не моргнув глазом так бы и заявил. Вот, есть и доказательства выше. Только истина лежит чуть глубже, чем некто Logik может донырнуть: у stm32 манипуляции с пинами представлены атомарными операциями. И если бы stm32 исполнял родной код, то единственной ассемблерной инструкции было бы достаточно, чтобы взвести или сбросить любой пин. Но stm32 вынужден эмулировать атмегу и плюс к избыточному коду, он таскает за каждым пином довольно толстую структуру с данными и указателями, чтобы отображать, что бы происходило с пином, если бы это была атмега. Эту структуру ему приходится обслуживать с каждым действием над пином, чтобы данные были актуальны. И это  тоже расходы выливающиеся в объем кода, на примере выше даже не отображенные, чтобы никого не путать.

Об этом и многом другом, что связано с обеспечением совместимости, некто Logik, большой любитель сравнения кода и думать не желает. Он парень конкретный. Думать ему некогда и не о чем. Все озарения на него сами собой нисходят свыше и в их абсолютной истинности он никогда не сомневается. Смотрит на репорт компайлера и сразу получает результат:  STM32 -- дерьмо, т.к. код для него больше. Все просто и понятно. Думать больше не о чем.

Цитата:
А вот это уже по существу! Про выбор среды разработки для stm. Выяснено что  stdlib от IAR-а для STM8 не содержит эффективных средств формирования вывода. В отличии от ардуиновского иде, где  itoa легко инклудится и обеспечивает вывод целых чисел с затратами флеша в сотни байт, что в несколько десятков раз эффективней чем у IAR-а.

Вы о чем опять бредите? Я вам про IAR и STM8, вы мне в ответ с ухмылочкой, что мне нужно пользваться itoa. Я вам о том, что там нет itoa, вы мне про то, что в ардуиновском иде есть. А нахрена мне это ваше сверхценное "предложение с информацией", если не только ардуины для STM8 не существует в природе, но и компилятора GCC, на котором ардуина ездит? Какую херню вы понесли в прошлый раз, что вам теперь таким горбатым образом приходится выкручиваться?

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

a5021 пишет:
Arhat109-2 пишет:
Ждем, возьмется ли a5021, продемонстрировать иной результат на одной из предложенных задач, в общем-то все равно на какой.
Не возьмется.

Вы ошиблись по меньшей мере ТРИЖДЫ:

1. Я ничем не "грежу", мне было важно уточнить коэффициенты потери памяти того или иного вида, которые неизбежны из-за разницы архитектур, но никакой катастрофы при выборе камня НЕ ПРЕДСТАВЛЯЮТ, ибо их роль становится заметной только при "прочих равных" .. далеко не всё, что можно сделать на одном камне можно точно также решить на другом. И это безотносительно в типу камней, в мире есть не только AVR/ARM;

Ещё раз (в третий), конкретно Вам, A5021: "каждому камню свое применение и свой круг задач". У меня нет каких-либо абстрактных предпочтений, в отличии от вас.

2. Я уже высказал предположение, что библиотеки под СТМ-ку - тяжелее. Ваша отсылка к этому моменту, только ПОДТВЕРЖДАЕТ мои выводы. Ибо при разработке чаще всего народ пользует типовые библиотеки, а не изобретает велосипеды. То есть, сославшись на этот момент, Вы тем самым указали что данный камень - "дерьмо".

3. Сам по себе отказ на надуманных основаниях - есть факт поджтверждения вывода Logik.

P.S.

Я не имею СТМ камней и "пгобовал" только чисто по даташиту, в виде попытки освоить ассемблер с командами условного префиксирования .. стало просто любопытно, поскольку это одно из направлений улучшения системы команд МК, которое предлагалось мною лет так 30 назад. Второе "на сегодня" тоже уже запатентовано ("процессор М8"), но пока ещё не применяется. Третье улучшение обсуждалось в 2014г на сайте обероновцев как недавно обнаружил .. но они так ни к чему и не пришли.

 

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

Arhat109-2 пишет:
Вы ошиблись по меньшей мере ТРИЖДЫ:

Хоть "пятижды". При таком уровне обвинительного материала, меня это не сильно беспокоит.

Цитата:
1. Я ничем не "грежу", мне было важно уточнить коэффициенты потери памяти того или иного вида,

Теперь смотрите, чем вы подкрепляете обвинения в моей, якобы, неправоте. Вы не грезите, вам важно уточнить, но то, что вам важно уточнить, почему-то должен вам предоставить я, ценой собственных усилий по написанию кода, сравнению и представлению убедительных результатов. Я вот не пойму, вы всю жизнь прожили в таком волшебном мире, где окружающие наперегонки бросались исполнять все ваши хотелки, стоило только вам рот открыть? Я автоматически неправ уже только потому, что не согласен следовать этой привычной для вас схеме? Мне-то зачем усираться, чтобы вы смогли сделть правильные выводы? Меня вполне устраивает и текущее положение дел, когда полученный самым кривым образом аргумент "против" STM32 вы тут же начинаете смаковать, а аргументы "за" подвергать сомнению и требовать доказательств. Это ж с вами такая беда, а не со мной. Мне напрягаться нет ровно ни одной причины.

Цитата:
Ещё раз (в третий), конкретно Вам, A5021: "каждому камню свое применение и свой круг задач". У меня нет каких-либо абстрактных предпочтений, в отличии от вас.

Какую фигню вы городите? Я уже пальцы сточил на нескольких форумах, объясняя фанатам разнообразных кланов, что мне нравятся почти все процессоры, которые удалось попробовать. И тут появляетесь вы и обвиняете меня в "абтрактных продпочтениях",  нимало не обращая внимания, что сама формулировка "абстрактные предпочтения" является оксюмороном в чистом виде. Предпочния, да будет вам известно, обычно бывают весьма конкретными. Что такое "абстрактные предпочтения", мне не ведомо.

Цитата:
2. Я уже высказал предположение, что библиотеки под СТМ-ку - тяжелее.

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

Цитата:
Ваша отсылка к этому моменту, только ПОДТВЕРЖДАЕТ мои выводы. Ибо при разработке чаще всего народ пользует типовые библиотеки, а не изобретает велосипеды. То есть, сославшись на этот момент, Вы тем самым указали что данный камень - "дерьмо".

Видите, как ни в чем толком не разобравшись, вы радостно кинулись кричать "дерьмо, дерьмо!" Рассказывайте пожалуйста дальше, про свою непредвзятость. Мне это очень интересно.

Отдельно доставляет, как соглашаясь, с якобы моими словами, вы одновременно выставляете их в пункте №2 доказательств моей неправоты. Я что-то не пойму: либо я не прав и мои слова не могут быть доказательством, либо я прав, но тогда мои слова нельзя использовать в списке со сквозной нумерацией моей неправоты. Вы бы там как-нибдуь уже определились, чем же на самом деле являются мои, якобы, слова, а то получается какая-то совсем уж дичь.

Цитата:
3. Сам по себе отказ на надуманных основаниях - есть факт поджтверждения вывода Logik.

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

gena
Offline
Зарегистрирован: 04.11.2012

  Коллеги (по этому форуму). Вы зря "ломаете копья", хотя читать мне очень интересно. Насчёт скорости АЦП. Вот прочитал в посте #53 что  "Вашему вниманию предлагается "Reference Manual" (RM0008), открытый на странице 215 (в самом начале описания ADC)." и понял, что на сегодня мне ардуины с головой должно хватать. Так много текста, без серьёзной необходимисти, мне не осилить. А это ещё нужно понять. А как же быть школьнику, студенту училища?

ssss
Offline
Зарегистрирован: 01.07.2016

Не спорьте, мальчики! Ваш низкий уровень знаний не позволяет вам спорить на надлежащем уровне. Для успешной работы с СТМ32 нужно полностью абстрагироваться от старых 8-и битных и софтовых решений, что не каждому дано. Поэтому все ваши попытки докопаться до истины похожи на ковыряние в песочнице и являются пустой тратой времени априори.Ардуина всего лишь "прихватила" СТМ32 для пущей важности. Попробуйте себе представить результат работы либ строго заточенных под СТМ32 в обратную на Мегу. Результат будет мегаплачевный - некоторые функции просто отвалятся, остальное будет вида "тормоз и ручник". Игра в пресловутую универсальность никогда до добра не приводила. Воспринимайте просто ардуину как игрушку и пособие для начинающих, и вам сразу полегчает.

ssss
Offline
Зарегистрирован: 01.07.2016

gena пишет:

А это ещё нужно понять. А как же быть школьнику, студенту училища?

Учиться, учиться и ещё раз учиться. (В.И. Ленин)

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

Хм. Оказывается о поддержке stm32 в ардуино заявлено официально и даже буквально в мае презентована плата http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-3rd-party-evaluation-tools/ard-otto-stm32.html?icmp=tt3617_gl_pron_may2016

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

ssss пишет:
Не спорьте, мальчики! Ваш низкий уровень знаний не позволяет вам спорить на надлежащем уровне.

Но вы то ведь можете спорить на надлежащем уровне? Однако вместо этого от вас одни какие-то лозунгоподобные декларации. Вы сказали, что ногодрыг стм-у не нужен. Сказали, как отрезали. Я вроде бы к вам обращался, чтобы прояснить, а как тогда быть, если хочется еще один уарт к уже имеющемся в единственном числе аппаратному? Это точно, что исключительно в силу моего удручающе-низкого уровня знания, мне не стоит расчитывать на ваши снисходительные объяснения по этом поводу или, наоборот, ваши непостижимо глубокие знания заставляют вас тут сначала какую-нибудь херню ляпнуть, а потом старательно отмалчиваться?

Цитата:
Для успешной работы с СТМ32 нужно полностью абстрагироваться от старых 8-и битных и софтовых решений, что не каждому дано.

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

От каких именно софтовых решений нужно срочно всем абстрагироваться?  Не томите.

Цитата:
Воспринимайте просто ардуину как игрушку и пособие для начинающих, и вам сразу полегчает

Вы это тем, кто серийно выпускает ардуины в индустриальном исполнении и тем, кто их потом в устройства промышленной автоматики устанавливает расскажите. Да и вообще, простое гугление по "arduino industrial" может сильно прочистить сильно загаженные догмами мозги. Как вам вот такая хрень,

которую неожиданно обнаружили вот в такой вот машине?

И похоже, что это серийное изделие, а не опытный экземпляр. Я вам больше скажу. Листал тут как-то эмбедерский журнальчик и натолкнулся на интересный опрос. Опрос этот ежегодный и производится довольно широко среди профессиональной аудитории. Уточною особо: не среди любителей, фанатов, студентов и школьников, а исключительно среди профессиональных разработчиков. Вопросов много, начиная от какой софт пользуете для разработки и заканчивая, какую платформу выберете для своего следующего проекта. Есть и вопрос о том, какой тип МК вы обычно выбираете для разрабтываемых устройств. Именно из этого раздела я узнал, что до сих пор довольно много разработчиков используют при проектировании электроники четырехбитные МК. Да, не удивляйтесь, есть и такой класс довольно древних устройств. Восьмибитные, так и вовсе не подают вида, что собираются капитулировать. Сектор 32-разрядных устройство хоть и растет, но дело обещает затянуться еще надолго, пока восьми- и шестнадцатибитки окончательно уйдут со сцены, при условии, что это вообще когда-нибудь произойдет. Еще одним, не меньшим удивлением, было лицезреть, что существует довольно жирный пласт разработчиков на ардуине. Нет, я не ошибся, именно на ардуине, а не на меге или каком другом атмеле. Чего уж они там разрабатывают опрос не уточняет, но то, что их оказалось больше, чем разработчиков на МК от NEC-а (весьма популярны в автомобильной отрасли), Тошибы и прочих японцев вместе взятых, факт наблюдавшийся мной лично.

Я бы вот что вам сказал -- вы безусловно интересный возмутитель ардуиновского болотца (как вам видимо кажется), но вот со своими сказочками, что ардуина годится лишь детишкам в качестве погремушек, вам бы лучше пробавляться в среде каких-нибудь ископаемых олдфагов, мнящих себя асами эмбеда. Там вам будет гарантирована подержка и признание, а вот здесь, не факт.

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

axill пишет:
Хм. Оказывается о поддержке stm32 в ардуино заявлено официально и даже буквально в мае презентована плата

Эх, axill-axill, совсем у вас нет жалости к дряхлеющим мастодонтам эмбеда. Они же все зубы уже съели, объясняя (главным образом друг другу), что ардина это чушь, погремушка, забава для сопляков, а тут их кумир такую подляну им выкатил. Как им жить теперь? Выбор не большой -- или спиться или руки на себя наложить от горя. Нужно было беречь их и тщательно скрывать от них всякие дурные для них вести, а вы тут с таким анонсом.

ssss
Offline
Зарегистрирован: 01.07.2016

Вас бросает как лодку в шторм. Прикольно наблюдать. Вот ваши перлы с другого форума.

Цитата:

3) логгер на ардуине, который пишет все даныне из эфира в журнал на нетбуке; 4) похожее устройство на STM8S, которое засовывает данные в роутер.

Пункт №3 вероятно скоро перестанет использоваться, т.к. перекрывается по функционалу п.4. Говорю вероятно, т.к. приемник на роутере испытывает проблемы с качеством принимаемого сигнала. Логгер на ардуине теряет 0.5-0.8% передаваемых пакетов. У приемника на роутере эта цифра выше на порядок. Оно может и не много, но есть от этого некий моральный дискомфорт. Мне кажется я догадываюсь, что является этому причиной и попробую с ней разобраться.

Интересно получается с кодом. Код, который я несколько раз переписывал для STM32F030 без особых усилий переехал на Атмегу. Для приемника на STM8 код заимствовался в основном с атмеги. Понятно, что инициализация железа везде своя, но все остальное практически без изменений, кусками, кочевало с одного МК на другой. Что-то дописывалось, что-то немного правилось, но общий каркас оставался. Забавно, что кочуя от одного МК к другому, возникали кое-какие исправления и улучшения и вот теперь оно прямо просится в виде своеобразного бэк-порта обратно в STM32. И только код ардуины не дал никакого полезного выхлопа и как был изначально на основе библиотеки maniacbug, так и остался.

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

По поводу ЮАРТ. Есть апнота, есть таймера, что вам мешает, если вы так уверенны в себе и знаете больше других?

А я не даю готовых решений, я заставляю думать! )))))))))

 

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

ssss пишет:

Вас бросает как лодку в шторм. Прикольно наблюдать. Вот ваши перлы с другого форума.

Что не так с этим текстом? Пальцем покажите, в чем прикол. Меня не только не бросает, я могу вторично подписаться под каждым своим словом с этого "другого форума".

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

А в чем рисовка? Я описываю, чем занимаюсь. Показываю, что сделал. Фотки работающих устройств. Выкладываю данные реальных экспериментов. Мне это скрывать прикажете? Какой вы еще сути хотите? Устройство показал? Показал. Результаты его работы описал? Данные привел? Чего еще надо? Вы о чем вообще тут бредите? И что же вы мне на том "другом форуме" ничего не сказали на этот счет? Вроде там не последние люди тусуются. Могли бы и красануться с такими-то разоблачениями. Тут бы вам почет и уважуха. Но вы почему-то с обличениями сюда прибежали. Это зачем, вообще? Я не догоняю величественной грандиозности вашего замысла.

Цитата:
По поводу ЮАРТ. Есть апнота, есть таймера, что вам мешает, если вы так уверенны в себе и знаете больше других?

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

Цитата:
А я не даю готовых решений, я заставляю думать!

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

И раз уж вы приперлись, то прокоментируйте тогда, что вам теперь придется мямлить, когда стм-ы выпустили ардуину, да не на каком-то там завалящем старье, а чуть ни на флагмане STМ32 ? Куда теперь нести те горы бреда, что вы за многие годы наизрыгивали в разннобразные форумы о ничтожности ардуины? Я просто сгораю от нетерпения услышать от вас самые удивительные объяснения.

ssss
Offline
Зарегистрирован: 01.07.2016

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

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

ssss пишет:
Начну с того, что мне ваш Даннинг - Крюгер не интересен, это ваши серьёзные проблемы.
Проблемы? Я не припомню каких-то особых проблем в своей жизни за последнее время. А вот про этого вашего крюгера заинтересовало, т.к. раньше не слышал. И ведь интересно пишут. Прямо в точности угадываются черты некоторых персонажей. Немного, правда, смущает, что вы про этого крюгера первым заговорили. Как-то даже подозрительно.

Цитата:
А то что СТМ выпустили плату под ардуину... ну и что с этого?

О, как запели! А с того, что теперь срать на ардуину для вас будет, как срать под себя вас не смущает? Хотя, действительно, что в этом такого.

Цитата:
Кода от СТМа я не увидел, что в принципе и правильно, а код от ардуины можно выбросить на свалку заранее.

Какого кода вы не увидели? Вы не насмотрелись в HAL-е еще что-ли этого вашего изысканного кода от STM ?  Или кода снайпетов от них же, где они в кошмарном противоречии с референсом, ракообразно инитят периферию? Я ж этого вашего корешка тыкал носом во все это безобразие и не услышал ни от него, ни от вас хоть какого-нибудь блеяния в защиту кода STM- ов.

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

Цитата:
Ну и от чего у вас теперь шаблон рвать будет?

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

ssss
Offline
Зарегистрирован: 01.07.2016

Да, уже порвало со смеху... под пиво. Ещё слова у вас есть?

Logik
Offline
Зарегистрирован: 05.08.2014

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

a5021 пишет:

Logik пишет:
Факт "не может" должен быть четко изложен в документации в понятной для потребителя форме.

Именно так он там и изложен. Вашему вниманию предлагается "Reference Manual" (RM0008), открытый на странице 215 (в самом начале описания ADC).

Если бы вы хоть раз открыли мануал, то вы бы тоже это знали. Если вы открывали мануал, но не смогли прочитать, то даже и не знаю, что вам тут посоветовать. Значит вы какой-то особенный потребитель, с документацией не до конца совместимый.

Цитата:
Там же на самом видном месте утверждается что "может" а это - лажа.

Покажете мне это место?

Пожалуста. Самая первая страница.

Будем спорить какая дока приорететней? Остальные заявленые характеристики при 72МГц действительны? Похоже что да, хотя уже уверености нет. Что еще попадает под ваш девиз?

" воспользваться плодами этих скоростей никогда не сможете"

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

a5021 пишет:

 Простой пример -- функция digitalWrite(). Родная ардуиновская функция в содержательной, так сказать, части имеет следующее:

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

А вот как оно выглядит для мапла:

    val = !val;          /* "set" bits are lower than "reset" bits  */
    dev->regs->BSRR = (1U << pin) << (16 * val);

.....И если бы stm32 исполнял родной код, то единственной ассемблерной инструкции было бы достаточно, чтобы взвести или сбросить любой пин.

А у нас сишный код бывает родным и не родным? наверно двоюродным. Но тем не менее поздравляю, вы близки к открытию очередной америки. Как скомпилируется код (оба кода)  в одну, две или более целиком зависит от того что такое bit, pin, val - переменные или константы. Для завершения открытия почитайте про препроцессор и константные операции.

 

a5021 пишет:
 Но stm32 вынужден эмулировать атмегу

)))) просто отпапд! Так и запишем stm32  эмулятор атмеги. По вашему если в библиотеках некоторого языка у двух платформ есть одинаковые функции то одна эмулирует другую )))

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

Какая загадочная структура, без имени. Попробуем понять этот бред.

Из библиотек известно.

void digitalWrite(uint8 pin, uint8 val) {
    if (pin >= BOARD_NR_GPIO_PINS) {
        return;
    }

    gpio_write_bit(PIN_MAP[pin].gpio_device, PIN_MAP[pin].gpio_bit, val);
}

static inline void gpio_write_bit(gpio_dev *dev, uint8 pin, uint8 val) {
    val = !val;          /* "set" bits are lower than "reset" bits  */
    dev->regs->BSRR = (1U << pin) << (16 * val);
}

Очевидн других претендентов кроме как PIN_MAP[pin].gpio_device не видно.

/**
 * @brief Maps each Maple pin to a corresponding stm32_pin_info.
 * @see stm32_pin_info
 */
extern const stm32_pin_info PIN_MAP[];

/* Makes the PIN_MAP rows more human-readable. */
#define PMAP_ROW(gpio_dev, gpio_bit, timer_dev, timer_ch, adc_dev, adc_ch) \
    { gpio_dev, timer_dev, adc_dev, gpio_bit, timer_ch, adc_ch }

extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {

    /* Top header */

    PMAP_ROW(&gpioa,   3, &timer2,  4, &adc1,    3), /* D0/PA3 */
    PMAP_ROW(&gpioa,   2, &timer2,  3, &adc1,    2), /* D1/PA2 */
    PMAP_ROW(&gpioa,   0, &timer2,  1, &adc1,    0), /* D2/PA0 */
    PMAP_ROW(&gpioa,   1, &timer2,  2, &adc1,    1), /* D3/PA1 */
    PMAP_ROW(&gpiob,   5,   NULL,  0, NULL, ADCx), /* D4/PB5 */

Константы. Опять одни константы, что вобщем логично - странно чтоб карта пинов менялась во время  работы программы.

a5021 пишет:
Эту структуру ему приходится обслуживать с каждым действием над пином, чтобы данные были актуальны. И это  тоже расходы выливающиеся в объем кода, на примере выше даже не отображенные, чтобы никого не путать. 

Дочитав до этого думаю и сами поняли какой бред писали. После выбора по номеру пина дальше только константная арифметика, ну это то что Вы вот-вот откроете ;) Соответственно почти ничего лишнего, по номеру пина выбирается указатель на нужный регистр через который и работаем. В общем авторам либы - респект. Красиво. Про "почти ничего лишнего" - вся проблема в том, что pin у ардуино переменная. Была бы константа - ничего бы лишнего не было.  И никто не мешает работать с пинами напрямую через PIN_MAP используя константу для указания пина.

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

 

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

Logik пишет:
Я ж предупреждал, слишком много Вашего бреда я неосилю, потому смотрю только картинк, код и коментарии к оным.

Но не осилили и это. Извините, но я не вижу смысла дальше продолжать разговор. Когда человек не видит обведенное красным, а на выражение val = !val; говорит, что компилятор создаст код в зависимости переменная это или константа, я понимаю, что все было напрасно.

ssss пишет:
Да, уже порвало со смеху... под пиво. Ещё слова у вас есть?

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

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

 а на выражение val = !val; говорит, что компилятор создаст код в зависимости переменная это или константа, я понимаю, что все было напрасно.

Хооо!! Дак a5021  оказывается С вообще не знает 8))) 

А как дышал! Скока букв набирал ))))

Ща... примерчик! Структурку оставим пока в покое, заменив просто на регистр вывода, лиш бы куда, будет только интересное: val = !val; и вызов с константой и переменной.

#define uint8 unsigned char


static inline void gpio_write_bit(volatile uint8_t* p, uint8 pin, uint8 val) {
    val = !val;          /* "set" bits are lower than "reset" bits  */
    *p = (1U << pin) << (16 * val);
}

byte v=1;
  
void setup() {
  // put your setup code here, to run once:
  gpio_write_bit(&PORTD, 1, 0);// все параметры константы
//  gpio_write_bit(&PORTD, 1, v);
}

void loop() {}

Собираем как есть, с константами ))))

Как жеж так a5021? Почему оно собралось с val = !val; для константы? )))))

Замечаем размерчик 1490.

Теперь сборка для переменной, вызов с константами коментим.

Код подрос на 42 байта. С чего бы это a5021?

оказывается a5021 полуучка, наверно С по местному краткому курсу учил. И этот безграмотный тут столько мозги парил.. трындец...

Может еще дизассемблер показать.... Хотя пусть a5021 повыкручивается, дальше в чем проколется.

Но в одном прав

a5021 пишет:

 ... я понимаю, что все было напрасно.

Да камрад, все было напрасно в конце сильно облажался ))))

Учи С, потом продолжим.

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

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

Logik
Offline
Зарегистрирован: 05.08.2014

Здесь спорить не о чем - приведен код, скомпилирован и сравнены два варианта. Любой легко может убедится что val=!val; для константы компилируется компактней чем для переменной.

А Вам - открыть глаз и смотреть. Строка 5 примера . Стоит именно val=!val; именно

a5021 пишет:
 val ... стоит слева в выражении присваивания. 

и при этом отлично компилится и именно как константное выражение что видно по размеру кода.

И для человека знающего C в этом факте нет ничего нового. Потому что inline.

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

a5021 пишет:
 val в приведенном мной примере не могла быть константой. Она стоит слева в выражении присваивания.  

Могла, и есть. Константы вобщето обязательно присваивают, и при этом они стоят слева от присваивания )))). Другое дело что специфика inline позволяет компилятору самому определять константность параметров и генерить соответствующий код зависимый от константности. Но это фраза не для Вас.  Вам, до этого расти и расти, и начинать с начала - с констант и переменных.

Учите С, не занимайтесь отстаиванием своего невежества, от этого оно только крепнет.

 

 

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

Я конечно могу быть полностью дуб-дубом в чем угодно (и/или во всем одновременно), но читать-то я все-таки умею. Читаю же я следующее:

Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.

Если на этом фоне некто Logic мне говорит, что выражение вида val = !val, находящееся внутри функции, выполняющееся на самой глубине вложенных вызовов, совершенно типично для действий именно с константами, то я понимаю, что к жаркой погоде, установившейся в эти дни на улице, легкомысленно относится никак нельзя.

Константа, которая может меняться и принимать отличное значение при каждом вызове функции -- это такой слабоизученный вид современных констант, о свойствах которых известно немного. Исследователи предполагают, что о свойствах таких констант можно приблизительно судить на основе размера двоичного кода, производимого компилятором. Если код маленький, то очевидно, что он содержит главным образом константы вида "А". В случае же, если код большой -- это является безусловным признаком концентрации там в значительных количествах констант вида "Б". Чем эти виды констант отличаются друг от друга никто точно не знает, но исследователи находят это в высшей степени прикольным.

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

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

Я конечно могу быть полностью дуб-дубом в чем угодно 

Да.

Учи inline функции!!! Их код включается в место вызова и существует его экземляров столько, сколько раз включали. И оптимизируется этот код каждый раз по месту с учетом текущего контекста. И разумеется если есть возможность соптимизировать контстантное выражение то так и будет.

Неужели сложней выучить раз, чем позорится столько? Или Вы мазохист? ))))

А чем клоуничать тут - закинули бы скетч себе в ИДЕ, может к прозрению пододвинулись бы.

Калаш
Offline
Зарегистрирован: 20.05.2016

Logik, а приведите пожалуйста, пример простого кода а-ля blink, чтобы "Любой легко может убедится что val=!val; для константы компилируется компактней чем для переменной"

Logik
Offline
Зарегистрирован: 05.08.2014

на stm или 328р?  Для "любого"  наверно таки  328р.

Эххх, молодежжж....... А хоть и 3 раза моргнем. Там правда val=!val; во общем то по логике нафиг надо, но по условию эксперимента. Держите.

#define uint8 unsigned char

static inline void gpio(volatile uint8_t* p, uint8 pin, uint8 val) 
{    val = !val;          /* "set" bits are lower than "reset" bits  */
    *p =  val<<pin;
}

void setup() {
  DDRB=0xff;
}


word t;
byte stat;
void loop() 
{
  word m=millis();
  
  if(m-t>200)
  {
   t=m;
   switch(stat++)
   {
    case 0:
    case 2:
    case 4:
     gpio(&PORTB, 5, 0);break; 
    case 1:
    case 3:
    case 5:
    gpio(&PORTB, 5, 1);break;
    case 15: stat=0;
   }
  }
}

Дизассемблер интересного. Видно как вызов инлайн функции свернулся в две команды загрузка регистра и вывод в порт. Значение 0х20 - как раз и есть результат расчета константного выражения. Но плохо, что выводит в весь порт а не на один пин.

000000be <setup>:
  be:	8f ef       	ldi	r24, 0xFF	; 255
  c0:	84 b9       	out	0x04, r24	; 4
  c2:	08 95       	ret

000000c4 <loop>:
  c4:	0e 94 d8 00 	call	0x1b0	; 0x1b0 <millis>
  c8:	9b 01       	movw	r18, r22
  ca:	ac 01       	movw	r20, r24
  cc:	80 91 10 01 	lds	r24, 0x0110
  d0:	90 91 11 01 	lds	r25, 0x0111
  d4:	b9 01       	movw	r22, r18
  d6:	68 1b       	sub	r22, r24
  d8:	79 0b       	sbc	r23, r25
  da:	69 3c       	cpi	r22, 0xC9	; 201
  dc:	71 05       	cpc	r23, r1
  de:	f8 f0       	brcs	.+62     	; 0x11e <loop+0x5a>
  e0:	30 93 11 01 	sts	0x0111, r19
  e4:	20 93 10 01 	sts	0x0110, r18
  e8:	80 91 12 01 	lds	r24, 0x0112
  ec:	8f 5f       	subi	r24, 0xFF	; 255
  ee:	80 93 12 01 	sts	0x0112, r24
  f2:	81 50       	subi	r24, 0x01	; 1
  f4:	83 30       	cpi	r24, 0x03	; 3
  f6:	79 f0       	breq	.+30     	; 0x116 <loop+0x52>
  f8:	84 30       	cpi	r24, 0x04	; 4
  fa:	18 f4       	brcc	.+6      	; 0x102 <loop+0x3e>
  fc:	81 30       	cpi	r24, 0x01	; 1
  fe:	41 f4       	brne	.+16     	; 0x110 <loop+0x4c>
 100:	0a c0       	rjmp	.+20     	; 0x116 <loop+0x52>
 102:	85 30       	cpi	r24, 0x05	; 5
 104:	41 f0       	breq	.+16     	; 0x116 <loop+0x52>
 106:	85 30       	cpi	r24, 0x05	; 5
 108:	18 f0       	brcs	.+6      	; 0x110 <loop+0x4c>
 10a:	8f 30       	cpi	r24, 0x0F	; 15
 10c:	41 f4       	brne	.+16     	; 0x11e <loop+0x5a>
 10e:	05 c0       	rjmp	.+10     	; 0x11a <loop+0x56>
 110:	80 e2       	ldi	r24, 0x20	; 32
 112:	85 b9       	out	0x05, r24	; 5
 114:	08 95       	ret
 116:	15 b8       	out	0x05, r1	; 5
 118:	08 95       	ret
 11a:	10 92 12 01 	sts	0x0112, r1
 11e:	08 95       	ret

Идем дальше. 


#define uint8 unsigned char

static inline void gpio(volatile uint8_t* p, uint8 pin, uint8 val) 
{    val = !val;          /* "set" bits are lower than "reset" bits  */
   if(val) *p|=1<<pin; else *p&=~(1<<pin);
}

void setup() {
  DDRB=0xff;
}


word t;
byte stat;
void loop() 
{
  word m=millis();
  
  if(m-t>200)
  {
   t=m;
   switch(stat++)
   {
    case 0:
    case 2:
    case 4:
     gpio(&PORTB, 5, 0);break; 
    case 1:
    case 3:
    case 5:
    gpio(&PORTB, 5, 1);break;
    case 15: stat=0;
   }
  }
}

Усложняем строку в инлайне, теперь она с if.

Снова на дизассемблер.

0c4 <loop>:
  c4:	0e 94 d7 00 	call	0x1ae	; 0x1ae <millis>
  c8:	9b 01       	movw	r18, r22
  ca:	ac 01       	movw	r20, r24
  cc:	80 91 10 01 	lds	r24, 0x0110
  d0:	90 91 11 01 	lds	r25, 0x0111
  d4:	b9 01       	movw	r22, r18
  d6:	68 1b       	sub	r22, r24
  d8:	79 0b       	sbc	r23, r25
  da:	69 3c       	cpi	r22, 0xC9	; 201
  dc:	71 05       	cpc	r23, r1
  de:	f0 f0       	brcs	.+60     	; 0x11c <loop+0x58>
  e0:	30 93 11 01 	sts	0x0111, r19
  e4:	20 93 10 01 	sts	0x0110, r18
  e8:	80 91 12 01 	lds	r24, 0x0112
  ec:	8f 5f       	subi	r24, 0xFF	; 255
  ee:	80 93 12 01 	sts	0x0112, r24
  f2:	81 50       	subi	r24, 0x01	; 1
  f4:	83 30       	cpi	r24, 0x03	; 3
  f6:	71 f0       	breq	.+28     	; 0x114 <loop+0x50>
  f8:	84 30       	cpi	r24, 0x04	; 4
  fa:	18 f4       	brcc	.+6      	; 0x102 <loop+0x3e>
  fc:	81 30       	cpi	r24, 0x01	; 1
  fe:	41 f4       	brne	.+16     	; 0x110 <loop+0x4c>
 100:	09 c0       	rjmp	.+18     	; 0x114 <loop+0x50>
 102:	85 30       	cpi	r24, 0x05	; 5
 104:	39 f0       	breq	.+14     	; 0x114 <loop+0x50>
 106:	85 30       	cpi	r24, 0x05	; 5
 108:	18 f0       	brcs	.+6      	; 0x110 <loop+0x4c>
 10a:	8f 30       	cpi	r24, 0x0F	; 15
 10c:	39 f4       	brne	.+14     	; 0x11c <loop+0x58>
 10e:	04 c0       	rjmp	.+8      	; 0x118 <loop+0x54>
 110:	2d 9a       	sbi	0x05, 5	; 5
 112:	08 95       	ret
 114:	2d 98       	cbi	0x05, 5	; 5
 116:	08 95       	ret
 118:	10 92 12 01 	sts	0x0112, r1
 11c:	08 95       	ret

Нирвана!!!

Работа с пином только одной командой на действие sbi или cbi (стр. 33 и 35). Компилятор разжевал все и заменил вызов функции с 3-я параметрами и саму функцию одной ассемблерной командой. Константные выражения на высоте. 

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

Если кто-то еще читает эту ветку, то я бы посоветовал внимательно следить за руками этого "знатока" Си. Мало того, что он так незаметно попытался спрыгнуть с ARM GCC, так и пример приводит совсем из другой оперы.

Что бы тут разннобразные знатоки не плели про препроцессоры, препроцессор тут особо ни при чем и будет функция инлайнится или не будет, зависит главным образом от опций оптимизации. Если компайлер запускается с опцией -O2 и ниже, можно к каждой функции приписать дерективу inline, но от этого не заинлайнится ни одна из них.

С опцией -O3 будут инлайниться и функции, которые не отмечены директивой inline, если компилятор сочтет, что их лучше заинлайнить.

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

Ардуино IDE по умолчанию вызывает GCC с опцией -Os -- оптимизация по размеру. Это означает, что инлайнить или нет, компилятор выбирает исходя из того, как это отразится на объеме получаемого кода. При небольшом числе вызовов функции, она скорее всего будет инлайнится. При большом, компилятор будет смотреть, что компактнее.

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

Можно много гадать, как соптимизирует компилятор то или иное, но лучше один раз посмотреть. Для этого мне пришлось поставить stm32arduino, который мне вообщем-то не нужен. В примере нашего маститого экспериментатора я заменил полудурошные синтетические gpio() на полноценные digitalWrite() и посмотрел, какой код компилятор варит для переключения единственного пина. Одна команда SBI или CBI, говорите? В волшебных снах наверное так и бывает, но для stm32ардуино оно разворачивается вот в такую хрень:

    gpio_write_bit(PIN_MAP[pin].gpio_device, PIN_MAP[pin].gpio_bit, val);
 8003130:	4b08      	ldr	r3, [pc, #32]	; (8003154 <_Z12digitalWritehh+0x28>)
 8003132:	0100      	lsls	r0, r0, #4
 8003134:	181a      	adds	r2, r3, r0
 8003136:	7b12      	ldrb	r2, [r2, #12]
 8003138:	581b      	ldr	r3, [r3, r0]
 800313a:	2001      	movs	r0, #1
 800313c:	fa00 f202 	lsl.w	r2, r0, r2
 * @param dev GPIO device whose pin to set.
 * @param pin Pin on to set or reset
 * @param val If true, set the pin.  If false, reset the pin.
 */
static inline void gpio_write_bit(gpio_dev *dev, uint8 pin, uint8 val) {
    val = !val;          /* "set" bits are lower than "reset" bits  */
 8003140:	f1d1 0101 	rsbs	r1, r1, #1
 8003144:	bf38      	it	cc
 8003146:	2100      	movcc	r1, #0
    dev->regs->BSRR = (1U << pin) << (16 * val);
 8003148:	0109      	lsls	r1, r1, #4
 800314a:	fa02 f101 	lsl.w	r1, r2, r1
 800314e:	681b      	ldr	r3, [r3, #0]
 8003150:	6119      	str	r1, [r3, #16]
 8003152:	4770      	bx	lr
 8003154:	08004eb8 	stmdaeq	r0, {r3, r4, r5, r7, r9, sl, fp, lr}

В данном случай компайлер действительно инлайнит gpio_write_bit(), но счастья никому это принести не может.

Узнаете "удивительно-константный" val=!val ? В ваших радостных грезах он константный, а в реальном arm-овском коде это операция реверсивного вычитания с переменной val в регистре r1. И последующие операции сдвига все на месте. А предшествовали этому семь инструкций трансляции номеров пинов атмеги в номера пинов stm32.

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

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

 заменил полудурошные синтетические gpio() на полноценные digitalWrite() и посмотрел

Гниль в черепе своем на мозги замени! Если вместо inline функции gpio()  (как бы она не называлась) использовать не инлайновую  digitalWrite() то разумеется компилятор не сможет соптимизировать константное выражение.

Вывод - успехов у a5021 в изучении С нет, брысь дальше учить.

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

С первого раза вы по своему обыкновению не смогли прочитать ничего. Пытайтесь дальше. gpio_write_bit() инлайнится точно в соответствии с вашими предсказаниями, но счастливее вы от этого никогда не станете. Шах вам и мат, гроссмейстер.

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

С первого раза вы по своему обыкновению не смогли прочитать ничего. Пытайтесь дальше. gpio_write_bit() инлайнится точно в соответствии с вашими предсказаниями, но счастливее вы от этого никогда не станете. Шах вам и мат, гроссмейстер.

Я уже рыдаю.

Было вызов gpio которая инлайн, а параметры константы оптимизирует класно.

Сделал вызов digitalWrite с параметрами константами, но она не инлайновая. Смотри сюда, слова inline в её обявлении нет, ну нет понимаеш вот проверь нет -

void digitalWrite(uint8 pin, uint8 val) ...

static inline void gpio_write_bit(gpio_dev *dev, uint8 pin, uint8 val)

А у gpio_write_bit есть! второе слово второй строки.

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

Ну низя ж так тупить!! Это с програмированием несовместимо. 

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

Вышеприведенный листинг выдран из реального дрыгания пином на stm32arduino. Это не ваши отвлеченные примеры для атмеги. Так как в том листинге, реальный stm32arduino переключает реальный пин. Ваши сферические gpio тут никому не интересны существуют только в ваших, ничего не объясняющих, экспериментах. Всякий прикладной код, который будет написан в среде Arduino IDE будет дрыгать пином так, как приведено в листинге.

Logik
Offline
Зарегистрирован: 05.08.2014

a5021 пишет:

Вышеприведенный листинг выдран из реального дрыгания пином на stm32arduino. Это не ваши отвлеченные примеры для атмеги. Так как в том листинге, реальный stm32arduino переключает реальный пин.

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

a5021 пишет:

 Ваши сферические gpio тут никому не интересны существуют только в ваших, ничего не объясняющих, экспериментах. 

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

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

Logik пишет:

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

Я вообще-то ваш пример откомпилировал. Если "незнающий" -- это вы, то нельзя исключать, что так все и было.

Цитата:

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

А че так то? Раньше вы меня не просили проходит мимо, а наоборот, с удовольствием размазывали, как вам казалось, по асфальту. Что, с десятого раза до вас все-таки начало доходить, в какую щекотливую ситуацию вы попали? Попали-попали, Logik. И теперь все те отвратительные качества, которые вы мне тут старательно приписывали, автоматически станут украшать вашу малосимпатичную персону.

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

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

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

прав буду я, а не вы.

Когда такое было? Да ещё с вашими незнаниями. ))))))

========

Не знаю, что вас так удивляет? Либы первоначально заточенные под Мегу не могут выдать адекватный код на СТМ32 изначально. А с ардуино огородом и подавно. Так что пользуйтесь как есть, если другое не по силам.

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

ssss пишет:
Когда такое было? Да ещё с вашими незнаниями.

Будем вспоминать, как вы втроем-вчетвером огребали от "незнаний", а весь форум улюлюкал? Я расказать могу. У меня хорошая память и ссылки на ваш коллективный конфуз.

Цитата:
Не знаю, что вас так удивляет? Либы первоначально заточенные под Мегу не могут выдать адекватный код на СТМ32 изначально.

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

Цитата:
А с ардуино огородом и подавно.

Ардуино-огород там знатный. Я сегодня покопал немного и прифигел. Инитится практически вся периферия STM32F103, безотносительно будет из нее что-то использоваться или нет. Абсолютно пустой скетч компилируется в 12к с хвостиком. Это все инициализация. Инитится контроллер прерываний, систик, RTC и всякая прочах хрень, которая из ардуины вообще не доступна. Отрабатывают различные процедуры, навроде, калибровки АЦП, даже если само АЦП никак не задействовано. ARM-агедон, гороче.

Какие там объемы кода сравнивал наш блистательный программист на си, не ведает никто.

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

A5021, а что вас там "так удивило"? Точно также и в самих дуньках Wiring (Ардуино ИДЕ) инитит "всё что попадается под руку" заранее. Оно ещё и при вызовах digitalWrite() и т.п. ПРОВЕРЯЕТ а не изменилась ли настройка пина и "каждый раз" .. и таблички перекодировки номера пина в порт и бит присутствуют ровно тем же самым способом .. только вот занимает оно 1500 байт, а не 12к .. как понимаю из-за большей периферии у СТМ-ок.

P.S. последние версии таки научились не линковать лишний код, но тоже .. далеко не весь.

Ваш восторг вокруг СТМ32 связан видимо с программированием на Асм или С с библиотеками, сильно приближенными к "асм коду" .. но, точно также можно писать и для дунек, а не гонять ИДЕ и получить ту же самую "1 команду на ногодрыг".

И именно поэтому, я и запросил именно вас накатать "тестовый код" в виде плавного изменения яркостей пары светодиодов с управлением одним из них через АЦП с потенциометром. Задачка одинаково проста как для Атмела, так и для СТМ и может показать отличия как при использовании "типовых библиотек" (ИДЕ) так и при "правильном подходе" (АСМ/С). Жаль что вы отказались. Буковок в вышеизложенном сраче, написано существенно больше чем размер тестовой программки. Вы предпочитаете холиварить, вместо того чтобы выложить тест, наглядно показывающий преимущества и недостатки того И иного камня (ибо не бывает недостатков без достоинств). Увы.

Logik'у: сильно некузяво взрослому человеку писать то, что вы пишете, даже если вы полностью уверены что знаете больше и имеете больший опыт. Не стоит .. тут таких и без вас хватает.

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

Будем вспоминать, как вы втроем-вчетвером огребали от "незнаний", а весь форум улюлюкал? Я расказать могу. У меня хорошая память и ссылки на ваш коллективный конфуз.

Вас тупо троллили и смеялись над вами с издевкой, а вы дёргались как параличный, в своих незнаниях. А форум молчал, там некому, по сути, и слова умного вставить. Но вы, как всегда, пытаетесь всё представить по другому, в выгодном для вас свете, что вызывает только отвращение.

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

Ваш восторг вокруг СТМ32 связан видимо с программированием на Асм или С с библиотеками, сильно приближенными к "асм коду" .. но, точно также можно писать и для дунек, а не гонять ИДЕ и получить ту же самую "1 команду на ногодрыг".

Это не его восторг, это у него с чужих слов. И можете не сомневаться.

Цитата:

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

У а5021 это не отнять, к сожалению, такой он есть. )))))))

===========

Я не вижу особых недостатков СТМ32. Всё более-менее чинно и благородно. Если сравнивать Мегу - то и рядом не валялась. Если вы видите аховые недостатки, то озвучьте. И желательно по ядру отдельно, по периферии отдельно.

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

Я не могу видеть и тем более "аховых" недостатков, а равно как и достоинств .. за неимением камня. Не способен судить о камне, если я его не попробовал и все мои замечания (по большей требовательности к памяти всех видов и соответственно, эффективному снижению частоты работы) носят исключительно чисто системный характер, связанный с переходом с 8/16 бит на 32- разрядную архитектуру. Не думаю, что разработчики такие тормоза, что не в курсях и не компенсировали эти системные проблемы как увеличением объемов памяти, так и повышением тактовой частоты.

И, как тут уже было верно сказано, сначала выбирается камень по требованиям задачи, и для микроконтроллеров это в первую очередь набор периферии и её способность решать данный класс задач в целом, и только потом надо смотреть насколько большие/меньшие требования к памяти и частоте надо выдвигать из-за той или иной архитектуры МК.

То есть, мои замечания носят "третий порядок малости" в вопросах выборка камня и не представляют из себя никакой "базы для холиваров".

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

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

P.S. Все что мне видно, это применение STM32 в качестве МК в Лего Майндшторм .. и по моим ощущениям он явно проигрывает камню ATmega2560 при прочих равных.

(на соревнования по Лего нас, с мегой не берут, а на тренировочных заездах и сравнении размеров кода и скоростей его исполнения, имеем регулярный выигрыш)

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

Я не могу видеть и тем более "аховых" недостатков, а равно как и достоинств .. за неимением камня. Не способен судить о камне, если я его не попробовал и все мои замечания (по большей требовательности к памяти всех видов и соответственно, эффективному снижению частоты работы) носят исключительно чисто системный характер, связанный с переходом с 8/16 бит на 32- разрядную архитектуру. Не думаю, что разработчики такие тормоза, что не в курсях и не компенсировали эти системные проблемы как увеличением объемов памяти, так и повышением тактовой частоты.

Увеличение объёма памяти и повышение тактовой есть сегодняшнее направление улучшения МК. О каком радикальном увеличении памяти можно говорить, если у СТМ32 есть камни с 16К?

Цитата:

И, как тут уже было верно сказано, сначала выбирается камень по требованиям задачи, и для микроконтроллеров это в первую очередь набор периферии и её способность решать данный класс задач в целом, и только потом надо смотреть насколько большие/меньшие требования к памяти и частоте надо выдвигать из-за той или иной архитектуры МК.

Это заблуждение. СТМ32Ф0хх и позиционировались, изначально, как заменители восьмибиток. И уж поверьте, они это делают великолепно, на 5++.

Цитата:

То есть, мои замечания носят "третий порядок малости" в вопросах выборка камня и не представляют из себя никакой "базы для холиваров".

Надеюсь. )))))))

Цитата:

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

Надуманно. Никакого катастрофического увеличения размеров кода там нет. И сами эти ваши коэффициенты это ни о чём. Поэтому вас никто и не понимает.

Цитата:

Все что мне видно, это применение STM32 в качестве МК в Лего Майндшторм .. и по моим ощущениям он явно проигрывает камню ATmega2560 при прочих равных.

Ничего он не проигрывает, ни в чём. Просто создатели ардуины, ИМХО, сознательно предпочитают Мегу, по старой привычке.

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

а чего тут понимать-то? Сделать одну и ту же задачу на двух разных камнях в одном уровне исполнения и выложить результат .. делов-то. :)

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

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

а чего тут понимать-то? Сделать одну и ту же задачу на двух разных камнях в одном уровне исполнения и выложить результат .. делов-то. :)

А вы у а5021 спросите, как над ним посмеялись по поводу размера кода на динамической индикации. )))))))

СТМ32 сильны железом, многие вещи можно делать хардварно. А что есть хардварно? Инит периферии и загрузка нужных значений в нужну периферию или область памяти. Всё! Откуда там много кода?

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

:) Так то же самое можно сказать и про AVR при правильном пользовании имеющейся периферией! Вот слово-в-слово. :)

ssss
Offline
Зарегистрирован: 01.07.2016

Нельзя! У АВР нет периферии, вообще, от слова совсем. Особенно у меги. А зачатки того что есть отличаются особым убожеством.

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

? Какой периферии нет у мег? :)

ssss
Offline
Зарегистрирован: 01.07.2016

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

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

? ни чё не понял, какой-то детский лепет ..

SPI он "по оперделению 8 бит" .. http://ru.wikipedia.org/wiki/Serial_Peripheral_Interface вам в помощь, разжевано. Или детальнее чем он вас не устраивает?

Таймеров 6шт у меги и разные .. приведите пример, где не хватает 6 таймеров и в чем конкретно состоит их "убогость"? ШИМ - более чем, по 2-4 управляющих выхода с каждого таймера в зависимости от камня ..

порты не 8-и битные, а практически битовые .. и это есть огромное благо для ногодрыгов. Управление периферией - побитное ваще-то и практически везде. Группы бит - как раз и есть 8-и битный порт. Или опять же, приведите конкретный пример управления группой бит.

"устаревшее ядро" .. ваще жесть. Ядро АРМ устарело за несколько десятков лет до своего появления .. и что теперь?

А по сути, есть 2 недостатка в периферии:

1. DMA. Оно иногда нужно для потокового обмена .. но это достаточно специфичный класс задач (в первую очередь видео), не для мег, ибо они заточены на управление железяками, а не видео-обмен.

2. CAN и пр. "специальные" интерфейсы. И опять же - не заточено под них.

Всё остальное - периферия есть и она УДОБНЕЙ в программировании чем у STM с их 32-х битными группами пинов. Что тут даже уже было подтверждено НЕ ОДНАЖДЫ в вышеприведенном сраче: настройка периферии - сложнее (12к против 1.5к) :)

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

полистал гугль про SPI в STM32 и как-то неожиданно, народ пользует программный вместо аппаратного .. это почто так?

Ну и внезапно, у СТМ АЦП работать в дифференциальном режиме, что пгавда ни умеет?!? .. жесть.

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

? ни чё не понял, какой-то детский лепет ..

Это ваш детский лепет. )))))) Даже у новых 8-бит ПИКов железа поболее будет и поинтереснее. ))))))

Цитата:

Всё остальное - периферия есть и она УДОБНЕЙ в программировании чем у STM с их 32-х битными группами пинов. Что тут даже уже было подтверждено НЕ ОДНАЖДЫ в вышеприведенном сраче: настройка периферии - сложнее (12к против 1.5к) :)

Это точно не холивар?  Ну тогда просто смешно с ваших доводов. ))))))

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

В целом, полистал краткие "СТМ32 начало работы" по разной периферии, как мой итог: камень с достаточно своеобразным подходом к реализации функций периферии, возможно и полезным в ряде случаев применения, но очень "необычно". Код явно более затратен и именно эта причина не позволяет любителям просто выложить сравнительный пример, демонстрирующий все преимущества. Отсюда и такое возбуждение вопросом.

При этом имеет целый ряд "периферии", отсутствующей у "мег": can, dma, dac.. то есть в первую очередь ориентирован на решение не столько задач управления (ногодрыги, таймеры и  АЦП) сколько на решение задач потоковой обработки видео и звука в первую очередь (потоковый АЦП), где "меги" не применимы или мало применимы.

То есть "каждому овощу - своё место" и это и есть главная причина того что ни один вариант так и не вытеснил своего "противника" .. впрочем, как и предполагалось. :)