перейдет, если тип указателя задан, именно вами, не мной, вами uint32_t *bsrr;?
А подумать? Имея RM на контроллер, листинг этого фрагмента кода и понимание того что он должен делать просто невозможно не понять что это. После ваших хамских выпадов отвечать на него не хочу.
Да, вы правы, на F103 действительно BRR идёт сразу за BSRR. Я посмотрел RM от другого контроллера. Можете исправить на *(p->bsrr+1). На скорость это не повлияет.
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
как и все остальное начиная со второй странице, по теме ровно 0.
Лично я на каждой странице вижу код на C/C++ с выхлопом на ассме и хотя в первую очередь он нужен для сравнения самих С и С++ между собой, но то же самое пришлось бы делать сравнивая их эффективность с ассмом.
А теперь вставь этот код в прерывание, допустим, где содержимое регистров за тебя никто раньше не загрузил. А примени в другой единице трансляции, а... Да много ли ещё чего бывает. Компилятор не устаёт.
В принципе пойнт, но не game changer. И к тому же меня в основном инетерсуют F1 и L1. Как баланс между обкоцаностью и оверинженерией, у них BRR есть. Чего это я им не должен пользоваться?
Цитата:
Я же показал что будет. Указываем список пинов и погнали. Причем, пины могут быть из разных портов в любой последовательности. Всё сгруппируется как надо. Это могут быть не только set или reset, а write, read, toggle.
Это здорово, но мне трудно понять насколько (не)эффективным будет та или иная конструкция на плюсах. И судя по тому как там Reflector с Oxford дебатировал, это не уникально для одного меня. А тут убедить компилер на эффективный код даже для группы пинов - как 2 байта переслать. Почти.
Более того - попался мне DMA. И понравился. В чем прикол? ТЕ ЖЕ САМЫЕ константы (и/или методы их получения) - ОК. Для примерно того же. С некоторыми оговорками, но даже с ними видится много интересных практических применений, типа "заталкивания пакета в дисплей" или "PWM на много каналов". Полностью хардварно. А с теми абстракциями придется стиль мышления извернуть на 180 градусов. Ну вот нет у DMA понятия - набор пинов. А битовая маска - какая разница, проц в BSRR загонит или DMA? Вообще, DMA по размеру кода в победители напрашивается. Лучший код - отсутствие оного.
Цитата:
Я даже не буду просить повторить нижеследующий пример. Берём две группы пинов на разных портах. Читаем одну группу как байт, инвертируем и записываем во вторую группу.
Когда кто-то так делает, оптимальность их точно не волновала.
Цитата:
Сколько вы это будете руками ковырять... Компилятор делает за долю секунды.
Да нисколько. Постараюсь чтобы оно оптимально раскидывалось и оформлю парой констант. Зачем создавать себе проблемы на ровном месте?
Цитата:
Только без BRR. В F4 или H7, например. Мэинстрим, как ни крути, приходится учитывать.
Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
Добавлено: Пн дек 28, 2020 14:20:01
Нашел транзистор. Понюхал.
Зарегистрирован: Вс сен 06, 2020 16:06:10 Сообщений: 156
Рейтинг сообщения:0
Цитата:
Если вас устраивает проигрыш в скорости на порядок, то и ну его на.
У меня никакого проигрыша в скорости на порядок совершенно точно не будет. Откуда и с фига ли?
Цитата:
Когда научите DMA код выполнять - приходите.
Двухъядерник возьмите, получите желаемое! Только это половину смысла уроет: DMA без проблем запихнет килобайт в BSRR - без единого байта инструкций по шинам вообще. А если это процессорное ядро, даже второе - уже не то. Вот как раз потому что кроме потока данных по шинам еще поток команд будет. Без него видите ли процессор вообще работать не может.
Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
Добавлено: Вт дек 29, 2020 06:36:51
Нашел транзистор. Понюхал.
Зарегистрирован: Вс сен 06, 2020 16:06:10 Сообщений: 156
Рейтинг сообщения:0
Чего не понятно? Берете что-нибудь 2-ядерное, второго можете использовать как "DMA выполняющий код". Ну там кинуть ему пакет - закопируй от сих до сих! Или что там. Так, кстати, иногда делают. Правда все-же не как замену DMA, скорее управление питанием, offload быстрых дергов с основного и проч. И это имеет больше смысла если там своя отдельная подсистема памяти и шины, а то по той же шине еще чей-то поток команд и данных уже как-то менее интересно и там желание "чтоб еще и код выполнять умел" становится багом - поток команд шину грузит.
Цитата:
Этот килобайт конечно же из воздуха материализуется? А в 3 разных BSRR распихает?
Из флеша или RAM, естественно. В три - не распихает, фокус с своими ограничениями. Однако и с одним BSRR можно здорово поприкалываться, предоставив DMA ворочать лапки и ... занявшись чем-нибудь другим. Параллельно с этим вообще. Оно как бы не всегда катит, но так можно - например полностью аппаратный PWM шириной в порт сделать. Или сколько там хотелось. А формировка констант заполнения этого ничем не будет принципиально отличаться от других операций с BSRR. А высокие абстракции это круто, но на это уже совсем не похоже. И если чего-то такого захочется - заведем две разных абстракции для одного и того же?
iddqd, вы так лихо ворвались со своим DMA в тему управления списками пинов, да ещё заочно объявив себя победителем. При этом повторить, худо бедно, но работающий пример Dimon456 тупо не сможете.
Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
Добавлено: Вт дек 29, 2020 08:55:24
Нашел транзистор. Понюхал.
Зарегистрирован: Вс сен 06, 2020 16:06:10 Сообщений: 156
Рейтинг сообщения:0
VladislavS, этот топик "виноват" в том что я задумался про "размер кода" и в результате случайно понял что иногда кода может и не быть совсем, если dma использовать. Так что иногда в споре рождаются неплохие идеи...
Поигрался я с идеей iddqd, есть 2 варианта: 1 вариант, когда пины располагаются на одном порту, не важно в какой последовательности. ОЗУ на один пин 4 байта, на 8 пинов 32 байта. Если хранить картинку 256*256 точек, да в добавок в цветном изображении, параллельный порт 8 пинов, 256*256*3*32 = 6.291.456 байт.? Ну как так можно без кода обойтись? Ведь еще сжать картинку можно, без кода ни как. 1 вариант не интересен, обычный дма, буфер, чего тут интересного.
2 вариант, это когда на разных BSRR. Проблема: ни как не поменять значение в регистре CPAR
Код:
A 0x40010810 B 0x40010C10 C 0x40011010
без выключения канала. Значит дма будем запускать только на один пин, а в прерывании выключать канал, подсовывать адрес и данные и заново включать канал. Ну поморгать светодиодами в реальном железе я поморгал, ну нету у меня логических анализаторов что бы посмотреть что в реальности происходит, но как бы в отладчике - вроде все верно моргает. Вот код самого прерывания
Самое главное - без кода ни как. А теперь вопрос в практическом применении, для чего и за чем? И где тут выигрыш в скорости?
Если хранить картинку 256*256 точек, да в добавок в цветном изображении, параллельный порт 8 пинов, 256*256*3*32 = 6.291.456 байт.? Ну как так можно без кода обойтись?
Для того чтобы графику в жк индикатор писать - нужно дма вместе с таймером использовать.
Dimon456 прав: решать надо прикладные задачи, а там всё иначе. То, что что-то можно якобы без кода - это неправильное мнение часто встречается у "батонокидателей" визуального программирования. Ну да, какой тут код, когда всё делает Cube MX... iddqd, у Вас неверное представление о назначении DMA и особенно - о PWM. PWM в микроконтроллере это значительно больше, чем "ногодрыганье" с определенной частотой, и как только начнётся попытка реализовать его полноценную работу, и глянется на блок-схему, то на DMA останется минимум функционала.
Вместо записи трёх констант по трём адресам, доступным от одного базового по смещению, эта байда раскручивается в жуткий цикл. А всё из-за ограничений языка пргораммирования.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения