-
Постов
4 363 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Сообщения, опубликованные _pv
-
-
4 hours ago, jcxz said:
Где же это видно? Вы неправы. Видно, что есть некая внешняя функция foo(), а также видно что glb - глобальная. А значит может изменяться например внутри той же foo(). А значит - она не может быть "всегда равна 0". Поэтому "выкинуть всё" - нельзя ни в каком случае. Была бы glb объявлена со "static" - другое дело.
как бы да, но нет, foo() никогда не будет вызвана так как и glb и sv проинициализованны нулями, соответственно менять glb больше некому, а в коротком примере ничего больше и нет.
не буду утверждать что оптимизатор у иара столь прозорливый и сгенерил приведённый странный код поэтому, а не из-за бага, но впринципе, в том коротком примере выкинуть всё право имел.
-
24 minutes ago, const said:
Программа корректна, а результат компиляции нет.
в "упрощённой" версии и glb и sv всегда равны 0, не понятно почему целиком всё не выкинул, а только присвоение "соптимизировал".
-
1
-
-
на их сайте 30 дневная демоверсия вроде была?
руками функции можно в математике поперебирать.
или в gnuplotе https://gnuplot.sourceforge.net/demo_6.0/fit.html
-
tablecurve2d умел перебирать кучу разных функций для аппроксимации и потом выбирать по точности/вычислительной сложности
-
1
-
-
3 hours ago, iiv said:
и данные все хранить надо. Там проще Фурьем грохнуть сразу
для нескольких определённых частот ДПФ будет быстрее ФФТ, да и как раз на лету считается без буферизации вообще, в отличии от. И того же Гёрцеля можно попробовать скрестить с примитивным БИХ фильтром, чтобы он старые отсчёты "забывал" экспоненциально и просто на каждом новом отсчёте за нескольких умножений уточнять значение фазы за последние N милисекунд.
сигнал узкополосный и вычислять весь пустой спектр через ффт, а не на 2-3 частотах около единственного максимума, чтобы найти фазу смысла особого нет.
-
для дальномера частоту ТС скорее всего сам себе и генерирует, так что должна быть известна.
при неизвестной частоте МНК делать как-то совсем не проще, а частота если известна, то вроде как вообще без разницы - результат будет одинаковый, но Гёрцель тригонометрию всю через одно единственное умножение считает.
а если частота известна "примерно", можно тем же Гёрцелем несколько точек вокруг посчитать, через них какую-нибудь параболу провести, найти где у неё максимум на самом деле и на этой частоте уже считать фазу.
-
55 minutes ago, SergeyVas said:
Есть две ацп ads8681 могу на них завести в микроконтроллере есть cordic только с ацп думаю вариант дороже, сильнее будет грузить проц , программно сложнее, а точность значительно не увеличиться по сравнению с компараторами. Поправте если ошибаюсь?
встроенных АЦП для 10кГц и 30дБ вроде как должно хватить с запасом.
при известной частоте косинусное преобразование делается парой целочисленных умножений на отсчёт. см. "Алгоритм Гёрцеля"
с компараторами ухудшение точности от уровня шума зависит, так как весь период превращается в одну единственную точку (перехода через 0), и соответственно все шумы делённые на производную сигнала прямиком попадают как ошибка фазы для всего периода. если же фаза считается умножением на синус/косинус через ДПФ, то шумы заметно давятся им как узкополосным фильтром и на фазу влияния оказывают меньше.
-
2 hours ago, Sergey_Aleksandrovi4 said:
получаете 2 инструкции/итерацию
Выхлоп из GCC, но IAR на таких тривиальных вещах должен выдавать аналогичный результат
bne ещё не за 1 такт выполняется, а iar этот пустой цикл без наличия volatile выкинет целиком скорее всего, при хоть какой-то включенной оптимизации.
-
45 minutes ago, EdgeAligned said:
При линейном исполнении кода и при правильно настроенных буферах предвыборки задержек возникать не должно, поскольку по параллельной шине с флеши забирается инструкций больше, чем требуется. Задержки из-за сброса конвейера могут происходить при ветвлении кода.
это при правильно настроенных, PRFTEN по умолчанию выключен у STM32G070.
в ram перенести этот десяток nopов всё равно надёжней.
-
44 minutes ago, whale said:2 hours ago, _pv said:
flash wait states, исполнение из ram
Поправить как нить можно в данном контексте?
собственно второе и лечит первое, вызванное тем что МК на большой частоте не успевает читать флэш что даже кэш на несколько слов не помогает и соответственно добавляет паузы.
-
4 minutes ago, whale said:
А по сбою шага никаких идей не подскажите ? как то слишком периодично ровно через 8 сбивается.
flash wait states, исполнение из ram
-
1 hour ago, whale said:
Мы видим постоянные сравнения что и приводит к шагу в 50кгц
On 8/18/2024 at 2:15 AM, jcxz said:При достаточно большой величине N должен получиться как раз ваш "вычисляемый переход".
при 4 ветках видимо "дешевле" развернуть в сравнения, если сделать switch побольше и ещё и оптимизацию по скорости включить вроде должен нормально сделать, но опять же без особых гарантий что при смене параметров оптимизации не сломается.
-
2 minutes ago, whale said:
switch if и прочее я пробовал еще до постинга этой темы, там минимум 35-50кгц шаг, оптимизацию тоже разную пробовал,
листинг в студию.
clang для арма из предложенного jcxz свича сам делает ровно такую же последовательность нопов и инкремент pc.
-
41 minutes ago, whale said:
Черт возьми но вот это похоже работает, сдвигает на 3кгц но есть нюанс,
это clang аргумент в r0 передаёт, и вроде ничего больше не делает, судя по godbolt.org,
что именно там делает iar в прологе если фунция не naked объявлена это в листинг смотреть надо.
инструкция nop вроде как два байта занимает, и почему при сдвиге на нечётный адрес он вообще в какой-нибудь hard fault не улетает я не очень понимаю.
jcxz на первой странице нормальный вариант на С через switch привёл. Да, за компилятором в листинг поглядывать надо, потому что при разных уровнях оптимизации он вероятно может и в цепочку ifов скомпилировать, но такие вещи либо целиком на ассемблере, либо бороться с оптимизатоциями компилятора без каких-либо гарантий.
-
1
-
-
2 hours ago, jcxz said:
А чем мой способ не угодил предводителю дворянства?
слишком просто и даже переносимо получается.
надо сделать что-нибудь вроде
void delay(int cycles){
__asm__("add pc, r0");
__asm__("nop");
__asm__("nop");
__asm__("nop");
__asm__("nop");
//...
}
чтобы потом всё раком встало при "не правильном" переданном значении аргумента функции.-
2
-
-
Supermium
An up-to-date Chromium-based web browser compatible with Windows XP, 2003, Vista, 7, 8.x, and newer.
July 10th, 2024: 124.0.6367.245
-
fluid для fltk, но он страшный
-
2 hours ago, mantech said:
Там все более менее быстрое скорее всего реализовано в их железе и частично драйверах.
"их железо" от обычных ПК с виндой только корпусом отличается, на дин рейку. Но да в ядро они влезли.
XP/7/10, 11 пока вроде не осилили, пересели на freebsd.
-
1 hour ago, khach said:
National Instruments
И все равно ничего путного не вышло.
не удивительно, "Олег за всё берется смело..., а если за labview берется то просто тратит меньше сил"
у beckhoffа с их twincatом вроде вполне получилось, правда тоже недавно рантайм ещё и TwinCAT/BSD выкатили, но со средой разработки win only, на базе msvs :)
-
3 hours ago, makc said:
Спасибо, посмотрел но для моего случая это плохо подходит, т.к. синтаксис C мало кому привычен из техников. С админами проще, но тоже будут вопросы, поэтому я и ищу что-то типа TCL.
у этого C4 ноги вероятно отсюда растут:
http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c
этот гораздо примитивнее, так как задачи уметь собирать самого себя не ставилось, и доработать ему "парсер" добавив нужные команды и до понимания параметров после команды через пробел проще будет.
если хочется именно tcl есть https://github.com/zserge/partcl, сам не использовал, просто под руку попался.
но вот "set x 4; puts [+ [* $x 10] 2]" с пробелами, по сравнению со скобочками у C выглядит ну совсем не лучше
-
1
-
-
1 hour ago, makc said:
Под виндой, согласен, печаль. Но в линуксе с патчами есть варианты.
в виндах тоже есть варианты типа TwinCAT, но не бесплатно и не "без доп.драйверов на уровне ядра"
-
Как-то очень давно в 7 или даже XP, опрашивал параллельным ещё портом какой-то микрометр с ~2кГц последовательным интерфейсом, через тупой опрос inp(), драйверами параллельного порта от avreal.
Путём спихивания процесса руками через SetProcessAffinityMask на какое-нибудь ядро с номером повыше, чтобы там ему никто не мешал, работало вполне стабильно, но какой там именно был джиттер не проверял. Без этого, просто изменением приоритета, было хуже.
Можно наверное ещё где-то шедулеру посоветовать определённые ядра не использовать другими процессами, чтобы там только он один крутился.
я бы вот сюда ещё бы посмотрел: https://learn.microsoft.com/en-us/windows/win32/procthread/multimedia-class-scheduler-service
-
2008 вроде бы самая адекватная была насколько помню, дольше всех прожила,
3 hours ago, dimka76 said:Можно рассмотреть вариант MinGW + Eclipse CDT
не надо так, хотя бы codeblocks какой-нибудь, хоть и страшненький, но более менее рабочий из коробки:
https://www.codeblocks.org/downloads/binaries/#imagesoswindows48pnglogo-microsoft-windows
codeblocks-20.03mingw - с компилятором
з.ы. а для "сложной консольной программы, которая читает из одного текстового файла и пишет в другой", и плюсы-то не особо нужны, хватит поди tinycc, и встроенного редактора в FARе. ну или http://www.smorgasbordet.com/pellesc/
-
1
-
-
Многофазность на момент (особенно если его в саженях*пуд измерять) не особо влияет, разве что на плавность хода и количество шагов на оборот.
У двухфазного в тех же габаритах момент даже больше:
Редуктор какой попало тоже может не подойти, у китайских планетарных градуса 3 люфта спокойно наберётся особенно под нагрузкой, что с плечом в 12 дюймов легко даст полвершка ошибки позиционирования. А "безлюфтовые" волновые редукторы (типа harmonic drive) денег совсем дурных стоят.
При максимальной оптимизации - ошибка
в IAR
Опубликовано · Пожаловаться
может, а lto может увидеть, что никто больше ничего в переменную glb из секции zero bss не пишет, ни в одной единице трансляции, и посчитать что там всегда 0.