STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351109#p4351109"]это с чего вдруг HAL_GPIO_TogglePin - "атомарный"? У ней внутри та же неонка портянка с чтением ODR, XOR и записью в ODR.[/uquote]
Раньше так в HAL было, уже несколько лет как тоже переделали через BSRR, у тебя видимо хедеры старые.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Reflector, а, ты имеешь в виду, что она не пишет в ODR? Ну, все равно это ведь не атомарность!
Помню, то ли в пиках, то ли еще где были реально атомарные XOR на биты. Можно было бы и в STM32 такое завести, типа, пишешь GPIOA->XDR = 1<<10, и у тебя XORится 10-й битик…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351114#p4351114"]Reflector, а, ты имеешь в виду, что она не пишет в ODR? Ну, все равно это ведь не атомарность![/uquote]
Потому я "атомарность" и взял в кавычки, можно рассматривать ее как псевдо-атомарность, т.е. с точки зрения результата разницы никакой, если конечно к одинаковым пинам из разных потоков не обращаться.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ писал(а):Не покроет. Патамушта исключит 90% возможностей контроллера, сделав его применение целесообразным только для самого начинающего любителя.
я бы не согласился: вы на 100% используете свой персональный компьютер? уверен, что повседневные ваши задачи нагружают его 4 или более ядер едва ли на 10%, и это с учетом достаточно объемной графики самой ОС. ваши узкоспециальные требования к латентности, джиттеру и т.п. критериям "быстродействия" еще менее распространимы на основной парк МК, чем мои дилетантские... компьютер, для которого "джиттер" в обработке событий ну никак не меньше 20 мс, успешно справляется с обработкой видео-аудиопотоков, в реальном времени находя на кадрах людей и/или животных и т.п.
поэтому я предполагаю, что МК, уступающий по характеристикам ПК 10-летней давности совсем чуть-чуть, уж точно сможет "наплевать" на некоторые уступки быстродействия в угоду скорости и простоте разработки ПО...
КРАМ писал(а):что ногодрыг для АРМов - это для критически быстрых задач очень плохое решение.
согласен, что подключать к ARM двустрочный ЖКИ с поддержкой работы при помощи ногодрыга - так себе затея, но вряд ли критически важным тут будет быстродействие. а для нормального ЖКИ придуманы и нормальные интерфейсы, и, соответственно, "нормальные" ARMы, у которых интерфейс реализован аппаратным способом. только это опять рассуждения в пользу бедных (или богатых, если КРАМУ так приятнее) - именно 90% (оценочное значение) задач совсем не пострадают от задержек в 10 или даже 20 мкс, что по меркам даже скромного 24-мегагерцового ARM кажется огромным интервалом...
КРАМ писал(а):В основном ногодрыг - это Set/Reset.
дкмаю, и тут не более 8 тактов разницы будет...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

КРАМ писал(а):Ну наконец то, я получил ответ. Вы причину НЕ ЗНАЕТЕ.
А для вас это новость?!
Или, может, у вас есть какая-то достоверная, нотариально заверенная информация из недр ST, почему они делают то или иное?
КРАМ писал(а):что вы самоуверенно заявили о костыльности, ни разу не понимая почему вендор выбрал такое решение.
Зачем вы врете? Я назвал костыльное решение костыльным, потому что вполне представляю как оно могло быть реализовано и почему реализовано именно так, а не иначе.
В отличие от вас, я не утверждал, что знаю все и достоверно. И строю из себя специалиста-по-всему. Про тот же ST-HAL раз пять сказал, что не знаю его и знать не хочу.
КРАМ писал(а):1. Спросили НЕ МЕНЯ, а неопределенный круг лиц.
Раз вы вызвались отвечать, причем строго в контексте вопроса, значит посчитали вопрос адресованным к себе.
Обратите внимание, в отличие от вас, я сразу сказал, что в ST-HAL не разбираюсь, и даже не пытался отвечать в контексте вопроса. Потому что ARV мог ошибочно счесть такое мнение авторитетным.
КРАМ писал(а):2. Ни о каком "максимально правильно" речи не шло, ибо это не имеет никакого значения. Проблема ОДНОРАЗОВАЯ.
Чушь! Человека интересует где посмотреть как в ST-HAL называются колбэки для прерываний. А в общем случае это вопрос "как в ST-HAL называется вообще все что угодно". То есть по сути - "где находится документация".
ARV писал(а):про ST-шников не скажу, а в чем неудачность ардуины-то? миллионы поклонников вряд ли согласятся с вами...
А те единицы, что осилили заглянуть в код, согласятся. На Хабре, например, сравнивали скорость простейшей мигалки диодом: по сравнению с нормальным кодом медленнее в 30 раз, кажется.
Не уверен какой у вас опыт программирования на AVR, но попробуйте набросать аналог digitalWrite. Который будет принимать сквозной номер ножки, а не пару PORT, BIT.
Да и по моему опыту (а читать код сторонних ардуинских библиотек приходилось не раз: для некоторых железяк одного даташита недостаточно, нужен хоть какой-то образцовый код), разработчикам либо приходится мириться с тамошним стилем, либо поддерживать несколько платформ самостоятельно. Один код для программного SPI, другой для аппаратного, третий для какого-то конкретного контроллера и т.д.
Иначе говоря, для прототипирования - проверить живая ли периферия, как ее можно соединить, какие грабли - сойдет. Поиграться, пожалуй, тоже. Но для серьезного применения - нет. Если хочется хотя бы приблизиться к возможной производительности контроллера, тоже.
ARV писал(а):мне представляется, что надо уйти от концепции низкоуровневой аппаратуры на таких "больших и мощных" МК, как ARM
Так для "больших и мощных ARM" так и делают: в каких-нибудь малинках ставят полноценную ОС, и весь доступ к железу через нее.
А в микроконтроллерах слишком много потеряете на абстракциях.
Хотя есть всякие несознательные разработчики (вроде ESP таким отличается), которые вообще не предоставляют возможности низкоуровневого доступа к железу. Вот вам набор бинарников, вот вам интерпретатор Lua, говнокодьте.
С другой стороны, ваша идея очень полезна. При написании подобного слоя абстракции вы гораздо лучше изучите возможности камня (а если подойдете к делу ответственно, то и не одного). Иначе говоря, отличная учебная задача.
ARV писал(а):Ведь принципиально необходимости во всяких отдельных GPIO_Init-ах или TIM_Init-ах нужды нет - все настройки автоматически известны
Тут вопрос в том, используется ли данная периферия вообще или отключена ради экономии энергии. А если используется, то в каком режиме? Тот же таймер может использоваться для счета времени, счета импульсов, регулировки ШИМ, в том числе многофазным, ввод какого-нибудь энкодера, тактовый сигнал для АЦП и много для чего еще. Причем разнообразие настолько велико, что пересечение между разными камнями оказывается слишком маленьким.
И второй вопрос, насколько это позволит язык. Условно говоря, можно написать препроцессор, который бы анализировал код или конфиг чтобы понять какие настройки задавать периферии и как ее настраивать. Но его ведь еще написать надо, а потом поддерживать.
ARV писал(а):Add_Adc_Samples_Handler(BufferedSamplesMode, BUF_SZ, SampleSpeed, MyPort, MyPin, MyHandler) <...> для максимальной производительности, вероятно, будет DMA и статически выделенный буфер
А если нужна экономичность, непрерывное преобразование, автоматическое отслеживание порогов, измерения между измерениями (инжектированные каналы)?
Впрочем, не подумайте будто я вас отговариваю. Как и с идеей драйверов: попробуйте реализовать то, что описали, а потом попользоваться. Даже если первый блин окажется неудачным, получите бесценный опыт.
Eddy_Em писал(а):Никогда! Ну никогда из попытки абстрагироваться от железа ничего хорошего не выходило.
Это неправда. На компьютере вы ведь не руками в регистры пишете. Да и на контроллерах не задумываетесь о стеке, распределении памяти и смещениях структур. Абстракции вещь необходимая, иначе просто утонете в объеме кода. Но, разумеется, не "абстракция ради абстракции", на надо впадать в фанатизм как в той же Ардуине.
КРАМ писал(а):Чистый битовый ногодрыг, например, гораздо читабельней посредством SPL-функции, а по факту там оверхед только за счет call/return.
Что вы понимаете под "чистым битовым ногодрыгом"? Что-то вроде такого?

Код: Выделить всё

#define LED A,5,1,GPIO_PP50
GPIO_config( LED );
GPO_ON( LED );
GPO_OFF( LED );
Eddy_Em писал(а):Жаль только, что нет возможности, как у некоторых других МК, атомарно инвертировать биты порта.
Что-то не припомню случаев когда бы это реально мешало. У меня инвертирование используется только в мигалках диодами, где производительность не критична абсолютно. А при работе с периферией всегда выставление заданного уровня.
Dimon456 писал(а):GPIOC->ODR ^= (GPIO_PIN_8); // 7 тактов(количество тактов) 4328 байт(размер прошивки)
Если не сложно, сравните с таким вариантом:

Код: Выделить всё

if(GPIOC->ODR & (1<<8))GPIOC->BRR = (1<<8); else GPIOC->BSRR = (1<<8);
Судя по анализу дизассемблера, всего на одну инструкцию длиннее. Но ARM это ARM, что у него там с конвейером будет я сказать не могу.
Eddy_Em писал(а):Помню, то ли в пиках, то ли еще где были реально атомарные XOR на биты
В некоторых AVR запись в PINx инвертировала ножку.
ARV писал(а):я бы не согласился: вы на 100% используете свой персональный компьютер?
К компьютеру требования немного другие. Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.
ARV писал(а):ваши узкоспециальные требования к латентности, джиттеру и т.п. критериям "быстродействия" еще менее распространимы на основной парк МК, чем мои дилетантские...
Не путайте свои узкоспециализированные и наши типичные.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

К компьютеру требования немного другие. Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.
Ну, почему же? Скажем, жене я купил безвентиляторный мини-компик на i5, жрет не так уж и много. Я для него на трех 18650 сделал "бесперебойник", так на этих трех аккумах компик вполне себе в течение 15 минут может проработать (только нафиг это надо без монитора?)! Домашняя торрентокачалка у меня вообще на одноплатнике, там "бесперебойник" на четырех 18650 с двумя step-down (5 и 12В для питания жесткого диска, одноплатника и роутера). Так у нас как-то было дело, свет отключили на 6 часов, и все это время компик вполне себе работал, wifi в доме был (разве что, если бы я с планшета решил кино по DLNA посмотреть, скорей всего, на 6 часов таки не хватило бы).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351132#p4351132"]Если не сложно, сравните с таким вариантом:

Код: Выделить всё

if(GPIOC->ODR & (1<<8))GPIOC->BRR = (1<<8); else GPIOC->BSRR = (1<<8);
[/uquote]Это не имеет особого смысла. Уж очень много неопределённостей:
1. Разные компиляторы
2. Разные настройки оптимизации
3. Разное окружение в коде (возможно переиспользование адресов и констант от других команд)
4. Разные системы команд (Cortex-M0 и Cortex-M4 не одно и то же).
5. Разная архитектура контроллера (шины, кэши, предвыборки, предсказания...)
6. Не у всех STM32 есть BRR. (Там где нет, его можно сделать).
Друг Кота
Аватара пользователя
Сообщения: 25503
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=4351122#p4351122"]
КРАМ писал(а):Не покроет. Патамушта исключит 90% возможностей контроллера, сделав его применение целесообразным только для самого начинающего любителя.
я бы не согласился: вы на 100% используете свой персональный компьютер? уверен, что повседневные ваши задачи нагружают его 4 или более ядер едва ли на 10%..[/uquote]Патамушта персональный компьютер в бытовом применении простаивает на 99%.
А микроконтроллер во встраиваемых решениях в большинстве типовых задач загружен, если и не на 100%, то на 50 - точно. То есть запас по суперлупу - while(1) - в 50% выглядит как типичный. Иначе нужно понижать частоту тактирования ядра, дабы уменьшить потребление. Но так же очень много проектов, где МК используется почти без запаса по производительности. Тут нужно понимать, что запас оценивается не по среднему времени, а по критическому. А среднее может быть как равно критическому, так и быть на порядок меньше.
Пример. Есть у меня проект с SDR (софтовый приемник) на частоте около 8 МГц. окно приема имеет скважность около 100. То есть 10 мкс при интервале между окнами 1 мс. Но 900 мкс контроллер обрабатывает сигнал с предельной скоростью в 75 МГц, а в момент захвата сигнала приходится повышать тактовую до 150 МГц. Иначе не втянуть поток с конвейерного АЦП с помощью ДМА. И таких задач очень много. К ним же относятся задачи векторного управления асинхронными двигателями, например...

Добавлено after 3 minutes 24 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351132#p4351132"]А для вас это новость?!
Или, может, у вас есть какая-то достоверная, нотариально заверенная информация[/uquote]
Меня этот пустопорожний флуд уже утомил. Если вам что то непонятно - перечитайте наше общение. А читать ваше "сам дурак" у меня нет никакого интереса.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):Потому что ARV мог ошибочно счесть такое мнение авторитетным.
к несчастью, КРАМ доказал мне, что его мнение авторитетным можно считать только в том случае, если он льёт дерьмо на оппонента - вот тут его авторитет мало кто может превзойти, профессионализм высочайший! иной раз с первого прочтения и не поймешь, как он ловко обосрал - исключительно корректно, вежливо и тонко (хотя чаще наоборот).
COKPOWEHEU писал(а):где находится документация
да, нормальная дока не помешала бы, т.к. комментарии не на все возникающие вопросы отвечают. только не doxygen-дока, конечно!
COKPOWEHEU писал(а):по сравнению с нормальным кодом медленнее в 30 раз, кажется.
и что? я уже не раз спрашивал - вы такты засаливаете на зиму, или у вас есть канал сбыта сэкономленных тактов? если миллионы ардуинщиков не чувствуют потери в этих 30 разах, значит, инструмент их удовлетворяет? кто-то картины пишет беличьей кисточной, а кто-то собственной жопой, и еще вопрос, кто дороже те картины продаёт...
COKPOWEHEU писал(а):Не уверен какой у вас опыт программирования на AVR, но попробуйте набросать аналог digitalWrite. Который будет принимать сквозной номер ножки, а не пару PORT, BIT.
да как сказать, какой опыт... сам я его оцениваю, как большой, но читая "советы гуру" вижу, что его вообще нет. честно говоря, я не сталкивался с необходимостью все пины представлять в виде одного списка, но, пожалуй, сделал бы так:

Код: Выделить всё

typedef struct{
  volatile uint8_t *port;
  uint8_t mask;
} pin_t;

#define pp(p,m) {.port = &p, .mask=_BV(m)}
const __flash pin_t pins[] = {pp(PORTB,0), pp(PORTB,1}, pp(PORTB,2), /* ... и т.д. */}

void digitalWrite(uint8_t pin, bool val){
  if(pin >= (sizeof(pins)/sizeof(pin_t)) return; // без этого можно обойтись, пожалуй
  if(val)
    *pins[pin].port |= pins[pin].mask;
  else
    *pins[pin].port &= ~pins[pin].mask;
}
подобный подход я использовал, когда чарлиплексинг реализовывал "универсальным" способом, чтобы от номера светодиода перейти к соответствующим регистрам настройки.

плохо?
COKPOWEHEU писал(а):Но для серьезного применения - нет.
скажем так: балансирующий на шаре робот - это достаточно сложный проект? или левитирующий магнит (не подвес)? или квадрокоптер, летающий по GPS? все это было сделано на ардуинах сто лет назад...
COKPOWEHEU писал(а):Даже если первый блин окажется неудачным, получите бесценный опыт.
опыт-то точно будет бесценным... я тут на новый год съел острый орешек (13 миллионов сковилей) - тоже по-своему бесценный опыт... но вам не посоветую его приобретать, вы за что со мной так? я всего лишь помечтал о том, какой HAL я хотел бы иметь под руками... а делать его - это удовольствие для разработчиков из ST, я не посягаю.
COKPOWEHEU писал(а):Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.
да ладно! даже в диспетчере задач винды отдельный столбик энергопотребления есть! :)
COKPOWEHEU писал(а):Не путайте свои узкоспециализированные и наши типичные
типичные для вас или типичные для миллионов остальных? что есть типичное? что бы вы там не делали по работе, рискну предположить, что в количественном отношении эта продукция будет много меньше, чем, например, количество разновидностей кофеварок... и уж ПО для кофеварки написать смогу и я, и даже на ардуине :)))

Добавлено after 15 minutes 50 seconds:
кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=4351162#p4351162"]кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?[/uquote]
Сonstexpr появляется только для объявления констант, в этом плане будет совместимость с плюсами, т.к. const в С неполноценный. Но нельзя будет пометить функцию constexpr и заставить ее выполняться на этапе компиляции, по крайней мере пока. Используйте С++ и будет много всяких бонусов уже сейчас :)
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Eddy_Em писал(а):Ну, почему же? Скажем, жене я купил безвентиляторный мини-компик на i5, жрет не так уж и много. Я для него на трех 18650 сделал "бесперебойник", так на этих трех аккумах компик вполне себе в течение 15 минут может проработать
Что-то у вас неудачно получилось. Обычный ноут (с экраном, разумеется) от шести 18650 живет несколько часов.
VladislavS писал(а):Это не имеет особого смысла. Уж очень много неопределённостей:
Так я и прошу человека на его настройках.
VladislavS писал(а):6. Не у всех STM32 есть BRR. (Там где нет, его можно сделать).
Там есть старшие 16 бит BSRR.
КРАМ писал(а):Меня этот пустопорожний флуд уже утомил.
То есть вы наконец-то прекратите кидаться голословными обвинениями? Ох не верится что-то...
ARV писал(а):и что? я уже не раз спрашивал - вы такты засаливаете на зиму, или у вас есть канал сбыта сэкономленных тактов?
Скажем так, мне доводилось упираться в потолок производительности STM'ок, в том числе и в теоретический, когда уже никакими оптимизациями заметного прироста не получить.
ARV писал(а):если миллионы ардуинщиков не чувствуют потери в этих 30 разах, значит, инструмент их удовлетворяет?
Конечно. Если использовать ардуинку в качестве простой мигалки или контроллера сервомотора - почему нет. И если вы тоже хотите освоить контроллеры в стиле "схемотехника для домохозяек", вам тоже может такого хватить.
ARV писал(а):кто-то картины пишет беличьей кисточной, а кто-то собственной жопой, и еще вопрос, кто дороже те картины продаёт...
Отучаемся считать деньги в чужом кармане.
ARV писал(а):сделал бы так:
<...>
плохо?
Не знаю. Я предлагал эксперимент просто чтобы вы сами сравнили производительность ардуиновского подхода, когда ножка кодируется одним числом, с прямой записью в регистры.
Навскидку, ваш вариант те же 20-30 тактов займет. Для динамической индикации, если других важных задач нет, сойдет. Если ножки расположены абы как (мало ли как удобнее бывает трассировку делать), тоже может не найтись альтернативы.
ARV писал(а):*pins[pin].port |= pins[pin].mask;
Так, наверное, чуть красивее будет:

Код: Выделить всё

pins[pin]->port |= pins[pin]->mask;
Помимо прочего, такая запись похожа на то, что в stm используется: GPIOC->ODR |= (1<<8);
ARV писал(а):да ладно! даже в диспетчере задач винды отдельный столбик энергопотребления есть!
Что-то сомневаюсь, что тамошним данным можно доверять. Не припомню в схеме блока питания наличия датчиков с соответствующим интерфейсом.
ARV писал(а):и уж ПО для кофеварки написать смогу и я, и даже на ардуине
Разработать железо тоже? И чтобы достаточно надежно и интуитивно оказалось? Я вот не возьмусь...
А вообще, кто бы внушил разработчикам бытовой техники, что если уж они встраивают часы, так хоть какое-то резервное питание предусмотреть стоит. А то чуть мигнул свет, выставляй время двумя кнопками.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):мне доводилось упираться в потолок производительности STM'ок
и вы называете эту ситуацию типичной, т.е. распространяющейся на большинство пользователей стмок? по-моему, слегка опрометчиво...
COKPOWEHEU писал(а):Если использовать ардуинку в качестве простой мигалки или контроллера сервомотора - почему нет.
вы про роботов и коптеров не ответили, а смысл-то был в этом! балансирующий робот или коптер с GPS-ом - это уже сложнее мигалки, или еще не тот уровень, чтобы сравнивать ардуину и "голый" МК с "регистровым доступом"?
COKPOWEHEU писал(а):Не припомню в схеме блока питания наличия датчиков с соответствующим интерфейсом.
ну так и вы в МК энергию экономите не по сигналам датчика, а по учету процессорного времени - сколько спит, сколько нет и на какой частоте. винда так же делает, ибо ось может процессы усыплять, и ядрами проца вращать, как хочет. и отображать это в виде процентов энергопотребления тоже - не хуже, чем в МК.
COKPOWEHEU писал(а):Разработать железо тоже? И чтобы достаточно надежно и интуитивно оказалось?
а какое отношение железо имеет к программной поддержке?
COKPOWEHEU писал(а):если уж они встраивают часы, так хоть какое-то резервное питание предусмотреть стоит
проблема глубже: разработчики бытовой техники просто не понимают, на что можно потратить ресурсы встроенного МК... вот и делают часы... в сущности, это отчасти и объясняет, почему сколько мощности в МК не вставь, всегда найдется разработчик, упёршийся в ограничение ресурсов :))) не часы, так 3D-меню для микроволновки нарисует...

Добавлено after 2 minutes 25 seconds:
Reflector писал(а):Но нельзя будет пометить функцию constexpr
грустно.
хотя нет - и так сойдет! :)))
СпойлерИзображение
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Что-то у вас неудачно получилось. Обычный ноут (с экраном, разумеется) от шести 18650 живет несколько часов.
Не бывает такого. У меня обычный ноут с 17'' экраном. Когда еще аккум (кстати, 6х18650) был жив, он максимум выдерживал (без особых нагрузок) 15 минут. Сейчас, спустя несколько лет, от силы 2 минуты держится, чтобы от розетки до розетки добежать.

Добавлено after 5 minutes 3 seconds:
ARV, а я знаю, что ну никак не получится сделать на абдурине (по крайней мере, на основе восьмибитных аврок): независимое управление восемью шаговыми двигателями (с трапециевидным рампом на каждый).
Вот, кстати, я подобную железяку на основе STM32F303 собираюсь делать (там как раз есть 9 таймеров с CC-выходами, будет 8 моторов + 4 ШИМ выхода на всякие управлялки Пельтье/грелки и т.п.), там есть флоаты. И можно таки будет попробовать уже рамп сделать синусоидальным. Хотя, с другой стороны, если не париться и синус реализовать таблицей uint8_t, то можно это и на STM32F072 запилить.
fronts.jpg
(233.6 КБ) 46 скачиваний
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="ARV",url="/forum/viewtopic.php?p=4351183#p4351183"]и вы называете эту ситуацию типичной, т.е. распространяющейся на большинство пользователей стмок?[/uquote]
Нет, конечно. Тем более когда вся "задача" заключалась в рендере трехмерки. Но это иллюстрация, что не стоит переоценивать производительность контроллеров и надеяться на авось.
ARV писал(а):вы про роботов и коптеров не ответили
Наверное, просто не заметил. Ого, а я много умудрялся не заметить...
ARV писал(а):скажем так: балансирующий на шаре робот - это достаточно сложный проект? или левитирующий магнит (не подвес)? или квадрокоптер, летающий по GPS? все это было сделано на ардуинах сто лет назад...
Вроде как робот на шаре это классическое упражнение на фильтры и обратные связи. Алгоритм там не запредельно сложный и требовательный к скорости. Полет по GPS это по сути чтение строковых данных с модуля, примитивный парсинг (хотя тут можно поизвращаться с потоковой обработкой). Но ни то, ни другое я не делал, поэтому только в общих чертах могу рассуждать.
ARV писал(а):опыт-то точно будет бесценным... вы за что со мной так?
Если вы считаете опыт изобретения подобных велосипедов бесполезным, ради чего же вы занимаетесь контроллерами?
ARV писал(а):кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?
Нет. Какой бы constexpr ни был, если номер пина не известен на этапе компиляции, компилятор его подставить не сможет. А если известен, то иногда и обычного оптимизатора хватает.
ARV писал(а):чтобы сравнивать ардуину и "голый" МК с "регистровым доступом"?
Вы же сами говорили, что те, кто не пользуются библиотеками от Ардуины / ST, сами изобретают какой-никакой аналог по своему вкусу. Иначе говоря, когда базовый набор библиотек написан, дальше идет все то же складывание кубиков. Всей разницы будут ли эти кубики чугунными и громадными, или пластилиновыми чтобы можно было утрамбовать в любую форму. Ну и знания, полученные в процессе лепки, само собой.
ARV писал(а):ну так и вы в МК энергию экономите не по сигналам датчика, а по учету процессорного времени - сколько спит, сколько нет и на какой частоте. винда так же делает, ибо ось может процессы усыплять, и ядрами проца вращать, как хочет. и отображать это в виде процентов энергопотребления тоже - не хуже, чем в МК.
Совсем не так. Винда не знает и не может узнать какие программы критически важны, а какие можно безопасно отключить. Да и возможности обычных х86 процессоров по экономии энергии не так уж велики. Скажем, я не уверен, могут ли они плавно снижать частоту до единиц герц, или уходить в сон с микроамперным потреблением.
Просто это другая область, не надо смешивать.
ARV писал(а):а какое отношение железо имеет к программной поддержке?
В смысле? Нельзя же писать код, когда неизвестно что куда подключено и какие у этого подключенного характеристики.
Eddy_Em писал(а):Не бывает такого. У меня обычный ноут с 17'' экраном. Когда еще аккум (кстати, 6х18650) был жив, он максимум выдерживал (без особых нагрузок) 15 минут.
Батарейка почти у всех собирается из 6 ячеек 18650. У меня сейчас ноут с 15 или 16" экраном, час или два в режиме просмотра ютуба держит. Собственно, когда мне надо что-то поделать в другой комнате, и хочется чтобы что-то болтало на фоне, обычно зарядку с собой не беру.
Eddy_Em писал(а):ARV, а я знаю, что ну никак не получится сделать на абдурине (по крайней мере, на основе восьмибитных аврок)
Тоже мне задача. Работа с графическим дисплеем с мало-мальски приемлемой частотой. Тут даже stm32f100 не хватает, хотя в отличие от AVR там DMA есть.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):ради чего же вы занимаетесь контроллерами?
вот я сам себе задаю этот вопрос... давным-давно я пытался сделать что-то полезное... а сейчас даже и не знаю... от скуки, пожалуй.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

мы через 2 млрд. лет столкнемся с другой галактикой, так что, всё, что сейчас делается - от скуки, если, конечно, оно не направлено на предотвращения этого столкновения или расселения подальше.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Тоже мне задача.
Однако, не везде есть хотя бы 8 таймеров с ШИМ…
А вот было бы 16, можно было б и обратную связь по энкодерам забульбенить, как на этой железяке (на STM32F072, кстати).
Ах, да: у меня ж там одновременно CAN и USB используется, умеют ли аврки так?
Но по вычислительным мощам — да, в основном МК в своем суперлупе тупо ожидает появления флагов… Двигатели ведь — штука достаточно медленная. Это если фигачить деление на 512, то мощей МК не хватит, а с делением на 16 или 32 никаких проблем нет.
Жаль, что у тринамиков нет SPI'шных полностью автономных драйверов ШД, чтобы ты им дал команду "фигачь до концевика 0", он и пофигачил, все рампы выдерживая. Или "фигач на 100 шагов" - поехал.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Eddy_Em писал(а):ARV, а я знаю, что ну никак не получится сделать на абдурине
Eddy_Em, для начала изучи врага в лицо, а уже потом делай громкие заявления. :)))
В списке МК, поддерживаемых Arduino, значится, например, STM32F746, так что твои хотелки для 8 шаговиков тупым ногодрыгом она потянет.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Вы не поверите
Спойлер

Код: Выделить всё

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);

Код: Выделить всё

/**
  * @brief  Toggles the specified GPIO pin
  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
  * @param  GPIO_Pin: Specifies the pins to be toggled.
  * @retval None
  */
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  GPIOx->ODR ^= GPIO_Pin;
}
Я по этому ODR и использовал, заранее посмотрел.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4351251#p4351251"]Вы не поверите[/uquote]Где же вы это старьё берёте?
Спойлер

Код: Выделить всё

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
  uint32_t odr;

  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  /* get current Output Data Register value */
  odr = GPIOx->ODR;

  /* Set selected pins that were at low level, and reset ones that were high */
  GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
}
Ответить

Вернуться в «ARM»