Раньше так в HAL было, уже несколько лет как тоже переделали через BSRR, у тебя видимо хедеры старые.
STM32 новичку в ARM что к чему
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351109#p4351109"]это с чего вдруг HAL_GPIO_TogglePin - "атомарный"? У ней внутри та же неонка портянка с чтением ODR, XOR и записью в ODR.[/uquote]
Раньше так в HAL было, уже несколько лет как тоже переделали через BSRR, у тебя видимо хедеры старые.
Раньше так в HAL было, уже несколько лет как тоже переделали через BSRR, у тебя видимо хедеры старые.
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Reflector, а, ты имеешь в виду, что она не пишет в ODR? Ну, все равно это ведь не атомарность!
Помню, то ли в пиках, то ли еще где были реально атомарные XOR на биты. Можно было бы и в STM32 такое завести, типа, пишешь GPIOA->XDR = 1<<10, и у тебя XORится 10-й битик…
Помню, то ли в пиках, то ли еще где были реально атомарные XOR на биты. Можно было бы и в STM32 такое завести, типа, пишешь GPIOA->XDR = 1<<10, и у тебя XORится 10-й битик…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351114#p4351114"]Reflector, а, ты имеешь в виду, что она не пишет в ODR? Ну, все равно это ведь не атомарность![/uquote]
Потому я "атомарность" и взял в кавычки, можно рассматривать ее как псевдо-атомарность, т.е. с точки зрения результата разницы никакой, если конечно к одинаковым пинам из разных потоков не обращаться.
Потому я "атомарность" и взял в кавычки, можно рассматривать ее как псевдо-атомарность, т.е. с точки зрения результата разницы никакой, если конечно к одинаковым пинам из разных потоков не обращаться.
я бы не согласился: вы на 100% используете свой персональный компьютер? уверен, что повседневные ваши задачи нагружают его 4 или более ядер едва ли на 10%, и это с учетом достаточно объемной графики самой ОС. ваши узкоспециальные требования к латентности, джиттеру и т.п. критериям "быстродействия" еще менее распространимы на основной парк МК, чем мои дилетантские... компьютер, для которого "джиттер" в обработке событий ну никак не меньше 20 мс, успешно справляется с обработкой видео-аудиопотоков, в реальном времени находя на кадрах людей и/или животных и т.п.КРАМ писал(а):Не покроет. Патамушта исключит 90% возможностей контроллера, сделав его применение целесообразным только для самого начинающего любителя.
поэтому я предполагаю, что МК, уступающий по характеристикам ПК 10-летней давности совсем чуть-чуть, уж точно сможет "наплевать" на некоторые уступки быстродействия в угоду скорости и простоте разработки ПО...
согласен, что подключать к ARM двустрочный ЖКИ с поддержкой работы при помощи ногодрыга - так себе затея, но вряд ли критически важным тут будет быстродействие. а для нормального ЖКИ придуманы и нормальные интерфейсы, и, соответственно, "нормальные" ARMы, у которых интерфейс реализован аппаратным способом. только это опять рассуждения в пользу бедных (или богатых, если КРАМУ так приятнее) - именно 90% (оценочное значение) задач совсем не пострадают от задержек в 10 или даже 20 мкс, что по меркам даже скромного 24-мегагерцового ARM кажется огромным интервалом...КРАМ писал(а):что ногодрыг для АРМов - это для критически быстрых задач очень плохое решение.
дкмаю, и тут не более 8 тактов разницы будет...КРАМ писал(а):В основном ногодрыг - это Set/Reset.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
А для вас это новость?!КРАМ писал(а):Ну наконец то, я получил ответ. Вы причину НЕ ЗНАЕТЕ.
Или, может, у вас есть какая-то достоверная, нотариально заверенная информация из недр ST, почему они делают то или иное?
Зачем вы врете? Я назвал костыльное решение костыльным, потому что вполне представляю как оно могло быть реализовано и почему реализовано именно так, а не иначе.КРАМ писал(а):что вы самоуверенно заявили о костыльности, ни разу не понимая почему вендор выбрал такое решение.
В отличие от вас, я не утверждал, что знаю все и достоверно. И строю из себя специалиста-по-всему. Про тот же ST-HAL раз пять сказал, что не знаю его и знать не хочу.
Раз вы вызвались отвечать, причем строго в контексте вопроса, значит посчитали вопрос адресованным к себе.КРАМ писал(а):1. Спросили НЕ МЕНЯ, а неопределенный круг лиц.
Обратите внимание, в отличие от вас, я сразу сказал, что в ST-HAL не разбираюсь, и даже не пытался отвечать в контексте вопроса. Потому что ARV мог ошибочно счесть такое мнение авторитетным.
Чушь! Человека интересует где посмотреть как в ST-HAL называются колбэки для прерываний. А в общем случае это вопрос "как в ST-HAL называется вообще все что угодно". То есть по сути - "где находится документация".КРАМ писал(а):2. Ни о каком "максимально правильно" речи не шло, ибо это не имеет никакого значения. Проблема ОДНОРАЗОВАЯ.
А те единицы, что осилили заглянуть в код, согласятся. На Хабре, например, сравнивали скорость простейшей мигалки диодом: по сравнению с нормальным кодом медленнее в 30 раз, кажется.ARV писал(а):про ST-шников не скажу, а в чем неудачность ардуины-то? миллионы поклонников вряд ли согласятся с вами...
Не уверен какой у вас опыт программирования на AVR, но попробуйте набросать аналог digitalWrite. Который будет принимать сквозной номер ножки, а не пару PORT, BIT.
Да и по моему опыту (а читать код сторонних ардуинских библиотек приходилось не раз: для некоторых железяк одного даташита недостаточно, нужен хоть какой-то образцовый код), разработчикам либо приходится мириться с тамошним стилем, либо поддерживать несколько платформ самостоятельно. Один код для программного SPI, другой для аппаратного, третий для какого-то конкретного контроллера и т.д.
Иначе говоря, для прототипирования - проверить живая ли периферия, как ее можно соединить, какие грабли - сойдет. Поиграться, пожалуй, тоже. Но для серьезного применения - нет. Если хочется хотя бы приблизиться к возможной производительности контроллера, тоже.
Так для "больших и мощных ARM" так и делают: в каких-нибудь малинках ставят полноценную ОС, и весь доступ к железу через нее.ARV писал(а):мне представляется, что надо уйти от концепции низкоуровневой аппаратуры на таких "больших и мощных" МК, как 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);В некоторых AVR запись в PINx инвертировала ножку.Eddy_Em писал(а):Помню, то ли в пиках, то ли еще где были реально атомарные XOR на биты
К компьютеру требования немного другие. Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.ARV писал(а):я бы не согласился: вы на 100% используете свой персональный компьютер?
Не путайте свои узкоспециализированные и наши типичные.ARV писал(а):ваши узкоспециальные требования к латентности, джиттеру и т.п. критериям "быстродействия" еще менее распространимы на основной парк МК, чем мои дилетантские...
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Ну, почему же? Скажем, жене я купил безвентиляторный мини-компик на i5, жрет не так уж и много. Я для него на трех 18650 сделал "бесперебойник", так на этих трех аккумах компик вполне себе в течение 15 минут может проработать (только нафиг это надо без монитора?)! Домашняя торрентокачалка у меня вообще на одноплатнике, там "бесперебойник" на четырех 18650 с двумя step-down (5 и 12В для питания жесткого диска, одноплатника и роутера). Так у нас как-то было дело, свет отключили на 6 часов, и все это время компик вполне себе работал, wifi в доме был (разве что, если бы я с планшета решил кино по DLNA посмотреть, скорей всего, на 6 часов таки не хватило бы).К компьютеру требования немного другие. Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351132#p4351132"]Если не сложно, сравните с таким вариантом:
[/uquote]Это не имеет особого смысла. Уж очень много неопределённостей:
1. Разные компиляторы
2. Разные настройки оптимизации
3. Разное окружение в коде (возможно переиспользование адресов и констант от других команд)
4. Разные системы команд (Cortex-M0 и Cortex-M4 не одно и то же).
5. Разная архитектура контроллера (шины, кэши, предвыборки, предсказания...)
6. Не у всех STM32 есть BRR. (Там где нет, его можно сделать).
Код: Выделить всё
if(GPIOC->ODR & (1<<8))GPIOC->BRR = (1<<8); else GPIOC->BSRR = (1<<8);1. Разные компиляторы
2. Разные настройки оптимизации
3. Разное окружение в коде (возможно переиспользование адресов и констант от других команд)
4. Разные системы команд (Cortex-M0 и Cortex-M4 не одно и то же).
5. Разная архитектура контроллера (шины, кэши, предвыборки, предсказания...)
6. Не у всех STM32 есть BRR. (Там где нет, его можно сделать).
[uquote="ARV",url="/forum/viewtopic.php?p=4351122#p4351122"]
А микроконтроллер во встраиваемых решениях в большинстве типовых задач загружен, если и не на 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]
Меня этот пустопорожний флуд уже утомил. Если вам что то непонятно - перечитайте наше общение. А читать ваше "сам дурак" у меня нет никакого интереса.
я бы не согласился: вы на 100% используете свой персональный компьютер? уверен, что повседневные ваши задачи нагружают его 4 или более ядер едва ли на 10%..[/uquote]Патамушта персональный компьютер в бытовом применении простаивает на 99%.КРАМ писал(а):Не покроет. Патамушта исключит 90% возможностей контроллера, сделав его применение целесообразным только для самого начинающего любителя.
А микроконтроллер во встраиваемых решениях в большинстве типовых задач загружен, если и не на 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]
Меня этот пустопорожний флуд уже утомил. Если вам что то непонятно - перечитайте наше общение. А читать ваше "сам дурак" у меня нет никакого интереса.
к несчастью, КРАМ доказал мне, что его мнение авторитетным можно считать только в том случае, если он льёт дерьмо на оппонента - вот тут его авторитет мало кто может превзойти, профессионализм высочайший! иной раз с первого прочтения и не поймешь, как он ловко обосрал - исключительно корректно, вежливо и тонко (хотя чаще наоборот).COKPOWEHEU писал(а):Потому что ARV мог ошибочно счесть такое мнение авторитетным.
да, нормальная дока не помешала бы, т.к. комментарии не на все возникающие вопросы отвечают. только не doxygen-дока, конечно!COKPOWEHEU писал(а):где находится документация
и что? я уже не раз спрашивал - вы такты засаливаете на зиму, или у вас есть канал сбыта сэкономленных тактов? если миллионы ардуинщиков не чувствуют потери в этих 30 разах, значит, инструмент их удовлетворяет? кто-то картины пишет беличьей кисточной, а кто-то собственной жопой, и еще вопрос, кто дороже те картины продаёт...COKPOWEHEU писал(а):по сравнению с нормальным кодом медленнее в 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;
}плохо?
скажем так: балансирующий на шаре робот - это достаточно сложный проект? или левитирующий магнит (не подвес)? или квадрокоптер, летающий по GPS? все это было сделано на ардуинах сто лет назад...COKPOWEHEU писал(а):Но для серьезного применения - нет.
опыт-то точно будет бесценным... я тут на новый год съел острый орешек (13 миллионов сковилей) - тоже по-своему бесценный опыт... но вам не посоветую его приобретать, вы за что со мной так? я всего лишь помечтал о том, какой HAL я хотел бы иметь под руками... а делать его - это удовольствие для разработчиков из ST, я не посягаю.COKPOWEHEU писал(а):Даже если первый блин окажется неудачным, получите бесценный опыт.
да ладно! даже в диспетчере задач винды отдельный столбик энергопотребления есть!COKPOWEHEU писал(а):Скажем, там никто особенно не заботится ни о компактности, ни о потреблении.
типичные для вас или типичные для миллионов остальных? что есть типичное? что бы вы там не делали по работе, рискну предположить, что в количественном отношении эта продукция будет много меньше, чем, например, количество разновидностей кофеварок... и уж ПО для кофеварки написать смогу и я, и даже на ардуинеCOKPOWEHEU писал(а):Не путайте свои узкоспециализированные и наши типичные
Добавлено after 15 minutes 50 seconds:
кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="ARV",url="/forum/viewtopic.php?p=4351162#p4351162"]кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?[/uquote]
Сonstexpr появляется только для объявления констант, в этом плане будет совместимость с плюсами, т.к. const в С неполноценный. Но нельзя будет пометить функцию constexpr и заставить ее выполняться на этапе компиляции, по крайней мере пока. Используйте С++ и будет много всяких бонусов уже сейчас
Сonstexpr появляется только для объявления констант, в этом плане будет совместимость с плюсами, т.к. const в С неполноценный. Но нельзя будет пометить функцию constexpr и заставить ее выполняться на этапе компиляции, по крайней мере пока. Используйте С++ и будет много всяких бонусов уже сейчас
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Что-то у вас неудачно получилось. Обычный ноут (с экраном, разумеется) от шести 18650 живет несколько часов.Eddy_Em писал(а):Ну, почему же? Скажем, жене я купил безвентиляторный мини-компик на i5, жрет не так уж и много. Я для него на трех 18650 сделал "бесперебойник", так на этих трех аккумах компик вполне себе в течение 15 минут может проработать
Так я и прошу человека на его настройках.VladislavS писал(а):Это не имеет особого смысла. Уж очень много неопределённостей:
Там есть старшие 16 бит BSRR.VladislavS писал(а):6. Не у всех STM32 есть BRR. (Там где нет, его можно сделать).
То есть вы наконец-то прекратите кидаться голословными обвинениями? Ох не верится что-то...КРАМ писал(а):Меня этот пустопорожний флуд уже утомил.
Скажем так, мне доводилось упираться в потолок производительности STM'ок, в том числе и в теоретический, когда уже никакими оптимизациями заметного прироста не получить.ARV писал(а):и что? я уже не раз спрашивал - вы такты засаливаете на зиму, или у вас есть канал сбыта сэкономленных тактов?
Конечно. Если использовать ардуинку в качестве простой мигалки или контроллера сервомотора - почему нет. И если вы тоже хотите освоить контроллеры в стиле "схемотехника для домохозяек", вам тоже может такого хватить.ARV писал(а):если миллионы ардуинщиков не чувствуют потери в этих 30 разах, значит, инструмент их удовлетворяет?
Отучаемся считать деньги в чужом кармане.ARV писал(а):кто-то картины пишет беличьей кисточной, а кто-то собственной жопой, и еще вопрос, кто дороже те картины продаёт...
Не знаю. Я предлагал эксперимент просто чтобы вы сами сравнили производительность ардуиновского подхода, когда ножка кодируется одним числом, с прямой записью в регистры.ARV писал(а):сделал бы так:
<...>
плохо?
Навскидку, ваш вариант те же 20-30 тактов займет. Для динамической индикации, если других важных задач нет, сойдет. Если ножки расположены абы как (мало ли как удобнее бывает трассировку делать), тоже может не найтись альтернативы.
Так, наверное, чуть красивее будет:ARV писал(а):*pins[pin].port |= pins[pin].mask;
Код: Выделить всё
pins[pin]->port |= pins[pin]->mask;Что-то сомневаюсь, что тамошним данным можно доверять. Не припомню в схеме блока питания наличия датчиков с соответствующим интерфейсом.ARV писал(а):да ладно! даже в диспетчере задач винды отдельный столбик энергопотребления есть!
Разработать железо тоже? И чтобы достаточно надежно и интуитивно оказалось? Я вот не возьмусь...ARV писал(а):и уж ПО для кофеварки написать смогу и я, и даже на ардуине
А вообще, кто бы внушил разработчикам бытовой техники, что если уж они встраивают часы, так хоть какое-то резервное питание предусмотреть стоит. А то чуть мигнул свет, выставляй время двумя кнопками.
и вы называете эту ситуацию типичной, т.е. распространяющейся на большинство пользователей стмок? по-моему, слегка опрометчиво...COKPOWEHEU писал(а):мне доводилось упираться в потолок производительности STM'ок
вы про роботов и коптеров не ответили, а смысл-то был в этом! балансирующий робот или коптер с GPS-ом - это уже сложнее мигалки, или еще не тот уровень, чтобы сравнивать ардуину и "голый" МК с "регистровым доступом"?COKPOWEHEU писал(а):Если использовать ардуинку в качестве простой мигалки или контроллера сервомотора - почему нет.
ну так и вы в МК энергию экономите не по сигналам датчика, а по учету процессорного времени - сколько спит, сколько нет и на какой частоте. винда так же делает, ибо ось может процессы усыплять, и ядрами проца вращать, как хочет. и отображать это в виде процентов энергопотребления тоже - не хуже, чем в МК.COKPOWEHEU писал(а):Не припомню в схеме блока питания наличия датчиков с соответствующим интерфейсом.
а какое отношение железо имеет к программной поддержке?COKPOWEHEU писал(а):Разработать железо тоже? И чтобы достаточно надежно и интуитивно оказалось?
проблема глубже: разработчики бытовой техники просто не понимают, на что можно потратить ресурсы встроенного МК... вот и делают часы... в сущности, это отчасти и объясняет, почему сколько мощности в МК не вставь, всегда найдется разработчик, упёршийся в ограничение ресурсовCOKPOWEHEU писал(а):если уж они встраивают часы, так хоть какое-то резервное питание предусмотреть стоит
Добавлено after 2 minutes 25 seconds:
грустно.Reflector писал(а):Но нельзя будет пометить функцию constexpr
хотя нет - и так сойдет!
Спойлер

если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Не бывает такого. У меня обычный ноут с 17'' экраном. Когда еще аккум (кстати, 6х18650) был жив, он максимум выдерживал (без особых нагрузок) 15 минут. Сейчас, спустя несколько лет, от силы 2 минуты держится, чтобы от розетки до розетки добежать.Что-то у вас неудачно получилось. Обычный ноут (с экраном, разумеется) от шести 18650 живет несколько часов.
Добавлено after 5 minutes 3 seconds:
ARV, а я знаю, что ну никак не получится сделать на абдурине (по крайней мере, на основе восьмибитных аврок): независимое управление восемью шаговыми двигателями (с трапециевидным рампом на каждый).
Вот, кстати, я подобную железяку на основе STM32F303 собираюсь делать (там как раз есть 9 таймеров с CC-выходами, будет 8 моторов + 4 ШИМ выхода на всякие управлялки Пельтье/грелки и т.п.), там есть флоаты. И можно таки будет попробовать уже рамп сделать синусоидальным. Хотя, с другой стороны, если не париться и синус реализовать таблицей uint8_t, то можно это и на STM32F072 запилить.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
[uquote="ARV",url="/forum/viewtopic.php?p=4351183#p4351183"]и вы называете эту ситуацию типичной, т.е. распространяющейся на большинство пользователей стмок?[/uquote]
Нет, конечно. Тем более когда вся "задача" заключалась в рендере трехмерки. Но это иллюстрация, что не стоит переоценивать производительность контроллеров и надеяться на авось.
Просто это другая область, не надо смешивать.
Нет, конечно. Тем более когда вся "задача" заключалась в рендере трехмерки. Но это иллюстрация, что не стоит переоценивать производительность контроллеров и надеяться на авось.
Наверное, просто не заметил. Ого, а я много умудрялся не заметить...ARV писал(а):вы про роботов и коптеров не ответили
Вроде как робот на шаре это классическое упражнение на фильтры и обратные связи. Алгоритм там не запредельно сложный и требовательный к скорости. Полет по GPS это по сути чтение строковых данных с модуля, примитивный парсинг (хотя тут можно поизвращаться с потоковой обработкой). Но ни то, ни другое я не делал, поэтому только в общих чертах могу рассуждать.ARV писал(а):скажем так: балансирующий на шаре робот - это достаточно сложный проект? или левитирующий магнит (не подвес)? или квадрокоптер, летающий по GPS? все это было сделано на ардуинах сто лет назад...
Если вы считаете опыт изобретения подобных велосипедов бесполезным, ради чего же вы занимаетесь контроллерами?ARV писал(а):опыт-то точно будет бесценным... вы за что со мной так?
Нет. Какой бы constexpr ни был, если номер пина не известен на этапе компиляции, компилятор его подставить не сможет. А если известен, то иногда и обычного оптимизатора хватает.ARV писал(а):кстати, я верно понял, что в новейших стандартах Си появляется constexpr и, значит, вышеприведенный мной пример с массивом структур, будучи соответственно объявлен и использован, компилятором будет выброшен, а те несколько задействованных пинов будут использованы наиоптимальнейшим образом без оверхеда?
Вы же сами говорили, что те, кто не пользуются библиотеками от Ардуины / ST, сами изобретают какой-никакой аналог по своему вкусу. Иначе говоря, когда базовый набор библиотек написан, дальше идет все то же складывание кубиков. Всей разницы будут ли эти кубики чугунными и громадными, или пластилиновыми чтобы можно было утрамбовать в любую форму. Ну и знания, полученные в процессе лепки, само собой.ARV писал(а):чтобы сравнивать ардуину и "голый" МК с "регистровым доступом"?
Совсем не так. Винда не знает и не может узнать какие программы критически важны, а какие можно безопасно отключить. Да и возможности обычных х86 процессоров по экономии энергии не так уж велики. Скажем, я не уверен, могут ли они плавно снижать частоту до единиц герц, или уходить в сон с микроамперным потреблением.ARV писал(а):ну так и вы в МК энергию экономите не по сигналам датчика, а по учету процессорного времени - сколько спит, сколько нет и на какой частоте. винда так же делает, ибо ось может процессы усыплять, и ядрами проца вращать, как хочет. и отображать это в виде процентов энергопотребления тоже - не хуже, чем в МК.
Просто это другая область, не надо смешивать.
В смысле? Нельзя же писать код, когда неизвестно что куда подключено и какие у этого подключенного характеристики.ARV писал(а):а какое отношение железо имеет к программной поддержке?
Батарейка почти у всех собирается из 6 ячеек 18650. У меня сейчас ноут с 15 или 16" экраном, час или два в режиме просмотра ютуба держит. Собственно, когда мне надо что-то поделать в другой комнате, и хочется чтобы что-то болтало на фоне, обычно зарядку с собой не беру.Eddy_Em писал(а):Не бывает такого. У меня обычный ноут с 17'' экраном. Когда еще аккум (кстати, 6х18650) был жив, он максимум выдерживал (без особых нагрузок) 15 минут.
Тоже мне задача. Работа с графическим дисплеем с мало-мальски приемлемой частотой. Тут даже stm32f100 не хватает, хотя в отличие от AVR там DMA есть.Eddy_Em писал(а):ARV, а я знаю, что ну никак не получится сделать на абдурине (по крайней мере, на основе восьмибитных аврок)
вот я сам себе задаю этот вопрос... давным-давно я пытался сделать что-то полезное... а сейчас даже и не знаю... от скуки, пожалуй.COKPOWEHEU писал(а):ради чего же вы занимаетесь контроллерами?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 12867
- Зарегистрирован: Сб дек 18, 2021 19:25:32
мы через 2 млрд. лет столкнемся с другой галактикой, так что, всё, что сейчас делается - от скуки, если, конечно, оно не направлено на предотвращения этого столкновения или расселения подальше.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Однако, не везде есть хотя бы 8 таймеров с ШИМ…Тоже мне задача.
А вот было бы 16, можно было б и обратную связь по энкодерам забульбенить, как на этой железяке (на STM32F072, кстати).
Ах, да: у меня ж там одновременно CAN и USB используется, умеют ли аврки так?
Но по вычислительным мощам — да, в основном МК в своем суперлупе тупо ожидает появления флагов… Двигатели ведь — штука достаточно медленная. Это если фигачить деление на 512, то мощей МК не хватит, а с делением на 16 или 32 никаких проблем нет.
Жаль, что у тринамиков нет SPI'шных полностью автономных драйверов ШД, чтобы ты им дал команду "фигачь до концевика 0", он и пофигачил, все рампы выдерживая. Или "фигач на 100 шагов" - поехал.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1337
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
Eddy_Em, для начала изучи врага в лицо, а уже потом делай громкие заявления.Eddy_Em писал(а):ARV, а я знаю, что ну никак не получится сделать на абдурине
В списке МК, поддерживаемых Arduino, значится, например, STM32F746, так что твои хотелки для 8 шаговиков тупым ногодрыгом она потянет.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Вы не поверитеЯ по этому ODR и использовал, заранее посмотрел.
Спойлер
Код: Выделить всё
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;
}- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[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);
}


