promo eddy_em february 18, 09:43 4
Buy for 10 tokens
По-отдельности все четыре в своей "мультиплате" проверил. Т.к. использовал преобразователь 485+232 на CH340, быстрей 2Мбод проверить не вышло, нужно на pl2303 искать, или, что проще — два интерфейса между собой соединить. А мне вчера дипсик как раз почти и сказал, что ошибка у меня в ДНК, когда я…
flag

Про CORDIC

Попросил "болвана" сгенерировать функции для сравнительного теста функций из libm и CORDIC. Но честно: по одной функции "за присест". Получились такие результаты (в среднем на одну функцию):
ФункцияВремя libm (мкс)Время CORDIC (мкс)
sin11.44
cos11.44
atan0.9550.413
sqrt0.4481.535
ln1.021.565

Заранее готовится массив аргументов (1000 штук), затем в цикле для каждого члена массива вычисляется заданная функция.
У libm от вызова к вызову более-менее различалась скорость вычисления, у CORDIC почти стабильно стояла.
Видно, что никакого смысла использовать это ускорение для единичных вычислений нет. Только если у вас массив данных, вы подключаете DMA → вуаля!
Почему так долго? Потому что "ускоритель" работает с дурным форматом (числа [-1, 1] "размазаны" на весь диапазон int32_t), так что приходится еще и для каждого аргумента тратить время на преобразование "туда" и "обратно". Потом еще ждать окончания вычислений...
С DMA лень продумывать тест, но даже если реально будет значительно быстрей, где те задачи, чтобы нужно было "за один присест" насчитать сотню-другую синусов-косинусов? Те же БПЛА, контроллер монтировки телескопа, "векторный" контроллер двигателя и т.п. требуют вычислений не более двух аргументов за один раз.

UPD: до жирафа таки дошло! Ведь огромное количество синусов-косинусов - это БПФ или ДКП. Остается "всего лишь" придумать, как его с помощью CORDIC реализовать... При том, что оперативки не так уж и много. Надо будет интереса ради попробовать натравить DMA на тысячу синусов-косинусов. Если будет выигрыш хотя бы в 10 раз - смысл от CORDIC есть. Иначе — это просто какое-то недоразумение.

Кстати, "болван" мне сгенерировал тесты, используя в качестве вычислителя TIM2. Я так понял, у "легких" G431 такого таймера нет. Однако, "нечто" что-то там считало с бешеной скоростью. Я даже в отладке попробовал вручную позапускать этот таймер, задав максимальный прескалер (т.е. около 2.5кГц). И за одну-две секунды получал не несколько тысяч отсчетов, а какие-то бешеные цифры.

(off: о, у моих stm32samples уже 200 "звезд" и 49 форков! Почему репы на гитхабе не считаются так же, как публикации? ☺)
flag

Про "туристов"

В кавычках — потому что вменяемые туристы (коих от силы полпроцента от этой толпы быдла) так себя не ведут.
Сегодня со знакомым в очередной раз обсуждали, как же эти сволочи всех достали. Как их ненавидят все местные жители. Да, кому-то они приносят доход (в т.ч. и мне: на экскурсиях, но это лишь мелкая толика той толпы, что проезжает за сутки по дороге в Архыз). Но убытков от них значительно больше. Начиная от экологии: со строительства "романтика" и водохранилища под Даусузом количество ясных ночей в САО стало заметно меньше; из Зеленчука я 25 лет назад спокойно пил воду, а сейчас мне в этой клоаке даже купаться боязно; все горы, куда доходит нога "туриста", засраты в буквальном смысле слова (и черт бы с дерьмом, но ведь и неразлагаемыми солфетками, фантиками, бутылками и т.п.)…
Местные банды (и не только: сейчас начальником "романтика" является бандит внешний) постоянно делят сферы влияния. Каждый свободный клочок земли, где можно было раньше остановиться с палаткой, теперь - "частная собственность". В общем, пиздец, товарищи!
Вот до чего довел планету этот фигляр ПэЖо! ©

// и это я молчу еще о том, что нонче за 14-15 минут до центра Зеленчука от дома вообще доехать невозможно! Иной раз минут сорок едешь, как на волах…
flag

Засада…

Кое-как со статейкой я вчера справился (опять лучи ненависти к тем, кто вместо латеха "ворд" использует), но вот для презенташки, как оказалось, у меня сильно не хватает фотографий. Да и красивых картинок с температурными картами с "ИК-олская". И если второму виной погода (уже которые сутки невозможно нормального ночного неба дождаться с облачностью процентов в 30-50 — не иначе, пиндосня с экологическим оружием балуется), то как я умудрился не сфотографировать изделие в процессе сборки и установки — непонятно.
Благо, до конференции больше месяца, можно будет найти время, чтобы подняться на гору (я сейчас принципиально не езжу на гору на своей машине, т.к. жечь 92-й бензин по 130р — жирновато будет), да сфотографировать. Ну и, авось, "муссонные дожди" таки закончатся, и можно будет наклепать нормальных массивов данных.
flag

Сервики…

Решил опять немного побаловаться с сервиками. Так как управляющая частота - всего 50Гц, как-то грех всякие прерывания и DMA использовать. В последней вариации вообще просто флаги TIM_SR_CCxIF проверяю — чтобы удостовериться, что импульс отработан, и можно новый задавать (а буферизация обеспечивает изменение значения лишь в следующем периоде).
Наткнулся на то, что при попытке заставить двигаться с минимальной скоростью (на каждый период по 1мкс изменяю длительность импульса), мой MG90S движется как-то дерганно. Дипсик указал мне, что у него же dead time целых 5мкс! Правда, сдается мне, что здесь чуть ли не 20мкс, т.к. дрожание в 10Гц я бы вряд ли заметил.
А вообще, даже с 5мкс получается, что на 180° у него приходится аж 400 "шагов", что в 4 раза больше, чем у обычного шаговика. Да, шаговик можно заставить ехать на микрошаге, но надо таки проверить, мне кажется, что должен дергаться под почти предельной нагрузкой, т.к. в промежуточных положениях у него сильно спадает момент, поэтому на низких скоростях это будет равноценно останову с удержанием в промежуточном положении (чего добиться невозможно — физику не обманешь; да и греться он, зараза, будет изрядно).

Collapse )
flag

Если "электронный болван" не способен помочь?..

Уже неделю занимаюсь рефакторингом ccd_capture. Задачу сохранения изображения перенес на клиента, т.о. сервер теперь вообще о шапке FITS не должен ничего знать. Немного подрихтовал код (чтобы меньше было дублирующихся частей, хотя, все равно их достаточно много осталось).
В итоге опять: то сегфолт, то косяк. Сейчас при передаче данных через SHM у меня где-то нарушается синхронизация, и отображаемое изображение иногда "портится" (причем, даже размер изменяется немного). А при передаче данных по сети то сегфолт, то в последнем куске читается -1 и errno=14.
Пытаюсь выпытать у дипсика, что же там не так. А он пока ничего дельного предложить не может.
А эту самую ccd_capture я хочу использовать как базис для нового "астровидеогида", т.к. добавлять в старый очередные камеры все сложней и сложней (там все больше "deprecated" кусков и зависимостей от старых версий моих библиотек)...
flag

Дичь с "-flto"

Переделал сниппет USB-CDC под STM32G431 (код на гитхабе). В DEBUG-режиме отлично работает: и в терминале USB, и в терминале USART1 пишет правильное "эхо". А вот как только я в RELEASE собираю — фигвам! Дублирует четные буквы и рисует мусор в конце строки (при этом в терминале USART1 выводится правильно).
Вообще не понимаю, где "собака порылась"! Этот же код работает с -flto на девятом gcc, а на 15 почему-то возникли проблемы. А мне хочется "bool" использовать ☺ ...

UPD. Вот такая строчка
$(OBJDIR)/usb_dev.o: CFLAGS := $(filter-out -flto,$(CFLAGS)) -fno-lto

в Makefile "верхнего уровня" исправляет ситуацию. ХЗ, что там 15-й gcc мутит, но у него даже объем флеша получается больше, чем у gcc-9.

P.S. Непонятно, чем руководствуются в ST, выбирая ядро USB: вроде, не такой и древний камушек этот G431, но USB больше похож на F0, чем на G0… Правда, с STM32F303 они вообще адово поступили: в "простых" камнях там один тип, а в "крутых" — другой. И приходится в Makefile определять USB1_16 (т.е. в одно 32-битное слово входит лишь одно 16-битное полуслово данных → реальный размер буфера в 2 раза меньше) или USB2_16 (здесь все ОК, но все равно обращаться надо как к 16-битным полусловам, memcpy не канает). А у G0B1 вообще 32-битная адресация… Ну неужто к более свежим моделям сложно определиться и зафиксировать какое-то одно ядро USB? Вменяемое, желательно.
flag

А дела-то с бензином улучшаются (надеюсь)!

Позавчера (уже) был в Зелике. До этого почти 2 недели никуда на машине не ездил (т.к. в баке было почти сухо, а из запасов в гараже — всего-то 20л канистра 95-го). Удивился, что почти все "частные" заправки стабильно работали. И, самое главное — там вообще не было очередей! На "лукойле" стояла очередь где-то метров 300-400. В общем, решил, что раз уж такое счастье, и есть бензин, то надо до полного бака залить. По 130 рублей налил на "частной" колонке 15 литров 92-го. Заодно и "бодяжный" 95-й разбавил, от которого у меня свечи горели (до этого 12 лет не менял свечи, а с конца прошлого года поменял уже два раза!).
Есть, правда, подозрения, что катализатор уже забился. Надо бы таки найти нормального "мастера", который мне вырежет эту ненужную приблуду и перепрошьет ЭБУ. Эх, были бы исходники прошивок, сам бы сделал… Вообще, пора бы уже запрещать установку катализаторов на выхлопной тракт: ничего хорошего от них однозначно нет! Да и двигатели нужно бы разрабатывать такие, которые смогут 100-200 "лошадей" выдавать на старом добром 76-м бензине.
flag

"Race conditions" на микроконтроллере

Когда-то я при разработке под F303 натыкался на то, что после включения тактирования периферии нужно чуть-чуть подождать, прежде чем настраивать ее. Вот, и под G431 (который на дико шустрой частоте — аж 170МГц — работает) на это наткнулся. Пишу USART+DMA (полностью DMA: и на прием, и на передачу; в прерывании USART1 по символу '\n' выставляется флаг форсирования чтения строки, а так просто в поллинге проверяется буфер DMA и понемножку заполняется кольцевой буфер).
Раньше я "для надежности" на несколько микросекунд делал паузу при помощи цикла с nop'ами, но "болван" подсказал, что и простой инструкции DSB (ждать, пока не прекратятся операции с памятью) достаточно.
Добавил строчку, и светодиодик опять стал мигать.

Вот так и пиши под МК "как под ПК": хренушки! Нужно учитывать скорость некоторых процессов.
flag

Про "2FA"

Я уж не знаю, что за мудак эту дрянь придумал, но получается, что как только твой смартфон "превращается в тыкву" (сперли, потерял или же гугол в России блокируют и т.п.) — вуаля, ты не сможешь зайти на данный сайт. Лучи ненависти в сторону гитхаба. Конченые мудаки. Ну, в принципе, от мелкомягких иного ожидать и не приходится.
Намедни еще и битбакет отсох: требует ключа для каждого репозитория. Как сгенерировать "общий ключ", подходящий для аутентификации при работе со всеми репами, я не нашел. Ну и хрен с ним: закомментил в .git/config. Чую, скоро вообще останется лишь отечественный гитфлик (если там тоже не прийдет в ебанутую башку идиотская идея "2FA"), да локальные репозитории...
Уроды, блин! Просто конченые твари.