Хитрые, необычные алгоритмы и код

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

Re: Хитрые, необычные алгоритмы и код

Сообщение Zikon »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4758968#p4758968"]jcxz, а если понадобиться развернуть двухбайтовое число, ты предложишь массив из 65536 байт?[/uquote]

наверно для 2-х байтового числа
можно развернуть каждый байт и поменять их местами ?

для 3-х,4-х,.. байтного числа по аналогии ?

так и сказали уже
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Хитрые, необычные алгоритмы и код

Сообщение veso74 »

Привел пример rev_bits использования "короткого" кода вместо "первой пришедшей в голову идеи" (не вдаваясь в ненужную полемику).
Предпочтительнее аппаратные варианты. "Короткие" - тоже.

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

uint32_t rev_bits(uint32_t v) {
    uint32_t r = 0;
    for (int i = 0; i < 32; i++) {
        r <<= 1;
        r |= (v & 1);
        v >>= 1;
    }
    return r;
}
и "красивое" (для меня)

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

uint32_t rev_bits(uint32_t x) {
    x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);
    x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);
    x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4);
    x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8);
    x = (x >> 16) | (x << 16);
    return x;
}
и примерно 200 инструкции (их не считал) vs напр. 25. (частично пользуюсь переводчиком БГ -> РУ)
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Хитрые, необычные алгоритмы и код

Сообщение linux_rulezz »

veso74, аж 27 операций!
Если в системе нет инструкции реверса бит, но есть инструкция реверса слов (bswap и т.п.), то быстрей будет в каждом байте по массиву поменять биты и использовать этот bswap, чтобы поменять местами байты.
Windows must die!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Хитрые, необычные алгоритмы и код

Сообщение Gudd-Head »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4758921#p4758921"]jcxz, какой, на хрен, 256-байтный массив, чтобы развернуть биты в одном байте?[/uquote]
А что не так, если время критично? Можете предложить более быстрый вариант?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Хитрые, необычные алгоритмы и код

Сообщение jcxz »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4758968#p4758968"]jcxz, а если понадобиться развернуть двухбайтовое число, ты предложишь массив из 65536 байт?[/uquote]Не очень понял что такое "массив из 65536 байт" и зачем я его должен предлагать?

Вроде как очевидно, что можно преобразовать в 2 приёма - побайтно.
Впрочем: если программной памяти лишней много (и если у CPU арифметика с длинными адресами оптимальная), можно и пословно: через 128KB-ный массив. Но вряд-ли такой способ будет оптимальнее на 8-битных ядрах, так как потребуется 16-битная арифметика. И возможно по-байтно будет всё равно быстрее.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Хитрые, необычные алгоритмы и код

Сообщение ARV »

Только что посмотрел видосик с канала Di_Halt-а... Вот где хитрые алгоритмы! Пока вы тут думаете, как что-то переложить на аппаратные фичи stm32, кое-кто на древнючем AVR делает такое, что не всякий на i11 повторить сумеет...

https://www.youtube.com/watch?v=n_eyN-tDSlw
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
zAries
Потрогал лапой паяльник
Сообщения: 305
Зарегистрирован: Ср сен 11, 2024 10:18:53

Re: Хитрые, необычные алгоритмы и код

Сообщение zAries »

Ну световое перо, и что ? Как говорится - давно забытое старое.
Накидывайте на вентилятор.
Audiatur et altera pars !
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Хитрые, необычные алгоритмы и код

Сообщение Adrift »

[uquote="ARV",url="/forum/viewtopic.php?p=4770767#p4770767"]Пока вы тут думаете, как что-то переложить на аппаратные фичи stm32, кое-кто на древнючем AVR делает такое, что не всякий на i11 повторить сумеет...[/uquote]
Вы RP2040 купили и в ящик стола положили, а кое-кто запустил на нем doom. Почитайте сколько всего автору пришлось преодолеть, там полностью рендеринг переделанный, например, так что впихнуть невпихиваемое - это не прерогатива AVR, таким на чем угодно можно страдать. А у Di-Halta я вообще ничего действительно сложного никогда не видел...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Хитрые, необычные алгоритмы и код

Сообщение ARV »

[uquote="zAries",url="/forum/viewtopic.php?p=4770867#p4770867"]Ну световое перо, и что ? Как говорится - давно забытое старое.
Накидывайте на вентилятор.[/uquote]
Ну, если для вас работа АЦП AVR на частоте семплирования, равной тактовой ядра, давно забытое старое, то я вам завидую. Хотя, пожалуй, сами-то вы ничего и близкого к "световому перу" на AVR не делали...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Хитрые, необычные алгоритмы и код

Сообщение Adrift »

[uquote="ARV",url="/forum/viewtopic.php?p=4770888#p4770888"]Ну, если для вас работа АЦП AVR на частоте семплирования, равной тактовой ядра, давно забытое старое, то я вам завидую.[/uquote]
Осциллографы никогда не делали? Любой человек, который делал, естественно будет пробовать разгонять ADC. Обычно в несколько раз можно разогнать без видимым проблем, а дальше по форме сигнал будет похож, но уровень сигнала будет падать, т.к. конденсатор не успевает заряжаться. Di-Halt доразгонялся до того, что пару младших разрядов реагируют на 10MHz меандр... Ну ок, вау эффект то в чем? Или необычный алгоритм тут где?
Аватара пользователя
zAries
Потрогал лапой паяльник
Сообщения: 305
Зарегистрирован: Ср сен 11, 2024 10:18:53

Re: Хитрые, необычные алгоритмы и код

Сообщение zAries »

[uquote="ARV",url="/forum/viewtopic.php?p=4770888#p4770888"]...Хотя, пожалуй, сами-то вы ничего и близкого к "световому перу" на AVR не делали...[/uquote]
А в чём сакральный смысл делать это именно на AVR? :dont_know:
Audiatur et altera pars !
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Хитрые, необычные алгоритмы и код

Сообщение Starichok51 »

ARV писал(а):Ну, если для вас работа АЦП AVR на частоте семплирования, равной тактовой ядра, давно забытое старое
у меня ютуб не работает. можно как-то описать или где-то прочитать, как такой "разгон" делается.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Хитрые, необычные алгоритмы и код

Сообщение linux_rulezz »

[uquote="zAries",url="/forum/viewtopic.php?p=4770919#p4770919"]А в чём сакральный смысл делать это именно на AVR? :dont_know:[/uquote]
Видимо: "смотрите, шо я могу!" ☺
На форумах иной раз на такое наткнешься… Особенно если какой-нибудь ардуинщик начнет свой "код" выкладывать: а там флоаты, аллокаторы, ногодрыг, жесть сплошная!
Windows must die!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Хитрые, необычные алгоритмы и код

Сообщение ARV »

[uquote="zAries",url="/forum/viewtopic.php?p=4770919#p4770919"][uquote="ARV",url="/forum/viewtopic.php?p=4770888#p4770888"]...Хотя, пожалуй, сами-то вы ничего и близкого к "световому перу" на AVR не делали...[/uquote]
А в чём сакральный смысл делать это именно на AVR? :dont_know:[/uquote]
Ни в чем, кроме того, что лишь с массой хитростей и особых алгоритмов можно добиться невероятного результата. Знаменитый японец Чен на тиньке сделал ЦОС в звуковом диапазоне - слабо переплюнуть? На 11-ом интеле это можно на циклах Бейсика в реальном времени реализовать, производительности хватит. На стм32 тоже особого ума не надо, и только на системе, в которой ресурсов чуть больше "ничего", проявляются навыки программирования, которым и Кнут мог бы позавидовать. Только вот в этом смысл, ни в чем ином.

Добавлено after 4 minutes 20 seconds:
[uquote="Starichok51",url="/forum/viewtopic.php?p=4771021#p4771021"]
ARV писал(а):Ну, если для вас работа АЦП AVR на частоте семплирования, равной тактовой ядра, давно забытое старое
у меня ютуб не работает. можно как-то описать или где-то прочитать, как такой "разгон" делается.[/uquote]да не слушай этих критиканов, никакой разгон там не делается. Просто стробоскопический метод и неизвестно как реализованная синхронизация запуска АЦП в нужные моменты с точностью до такта ядра. Само АЦП при этом на штатной тактовой работает. В том и хитрость алгоритма!

P.S. подключи впн и посмотри видос, он длинный, но того стоит!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Хитрые, необычные алгоритмы и код

Сообщение Adrift »

[uquote="ARV",url="/forum/viewtopic.php?p=4771283#p4771283"]да не слушай этих критиканов, никакой разгон там не делается. Просто стробоскопический метод и неизвестно как реализованная синхронизация запуска АЦП в нужные моменты с точностью до такта ядра. Само АЦП при этом на штатной тактовой работает. В том и хитрость алгоритма![/uquote]
ADC требуется 1.5 ADC такта только на sample-and-hold, при этом делители там 2..128 и штатная тактовая для 10-бит ADC - 50..200KHz, т.е. в норме выбирается максимальный делитель 128 и получаем частоту ADC равную 156KHz. Следовательно 1.5 ADC такта - это 192 такта основной частоты мк, которая там 20 MHz. Теперь представьте что у вас меандр 10MHz и вы 192 такта заряжаете конденсатор, что вы там намеряете? ) Потому Di-Halt наверянка выставил минимальный делитель 2 и sample-and-hold занимает всего 3 такта, никаких других вариантов я не вижу. Это безусловно экстремальный разгон и за 3 такта конденсатор успевает зарядиться совсем чуть-чуть. При этом 3 такта все равно много для меандра 10MHz, но что-то похожее может запросто выдавать. А дальше уже идет ваш стробоскопический метод, наверное )
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25123
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Хитрые, необычные алгоритмы и код

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

[uquote="ARV",url="/forum/viewtopic.php?p=4771283#p4771283"]с массой хитростей и особых алгоритмов можно добиться невероятного результата. Знаменитый японец Чен на тиньке сделал ЦОС в звуковом диапазоне - слабо переплюнуть?[/uquote]
:)))
Это "хитрость" для лохов.
Работа в высших зонах Найквиста, в просторечии именуемой "стробоскопическим преобразованием" на самом деле является достаточно примитивным методом использования АЦП. Только в этой "хитрости" есть одна проблема. Полоса пропускания УВХ должна соответствовать верхней частоте спектра сигнала. Иначе никакой "хитрости" не получится. Ну и антиалиасинговый фильтр на входе АЦП на выбранную зону Найквиста потребуется. Само по себе это не всегда просто реализовать. Требования к фильтру могут оказаться достаточно высокими.

Добавлено after 3 minutes 3 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4771283#p4771283"]Само АЦП при этом[/uquote]
АЦП мужского, а не среднего рода. :)

Добавлено after 4 minutes 48 seconds:
[uquote="Adrift",url="/forum/viewtopic.php?p=4771315#p4771315"]за 3 такта конденсатор успевает зарядиться совсем чуть-чуть.[/uquote]
Это зависит от импеданса мультиплексора на входе УВХ и от внутреннего сопротивления источника сигнала. Все вместе они и образуют апертуру (апертурную задержку) УВХ, которая и определит полосу пропускания УВХ.
Аватара пользователя
maxlab
Мучитель микросхем
Сообщения: 479
Зарегистрирован: Вт апр 23, 2013 22:21:18
Откуда: KUBAN, Krasnodar

Re: Хитрые, необычные алгоритмы и код

Сообщение maxlab »

КРАМ, Неистово плюсую :)
Учебник "Радиотехнические цепи и сигналы". Ну, на крайняк Титце&Шенк и "Искусство схемотехники"
Девице - Device
Аватара пользователя
zAries
Потрогал лапой паяльник
Сообщения: 305
Зарегистрирован: Ср сен 11, 2024 10:18:53

Re: Хитрые, необычные алгоритмы и код

Сообщение zAries »

[uquote="ARV",url="/forum/viewtopic.php?p=4771283#p4771283"]...Знаменитый японец Чен на тиньке сделал ЦОС в звуковом диапазоне - слабо переплюнуть?...[/uquote]

На PIC16, в своё время, карточки для VIACCESS делали, и за геройство и необычные алгоритмы не считали.
Хотя пользы от этого было несравнимо больше. А касаемо светового пера, так к РАДИО-86 РК прикручивали,
а там процессор 1,78мГц и вывод на экран в "железе" ВГ75 с задержкой работал, и ничего, "хитрый алгоритм"
применяли и всё ОК. Так что никаких 11-х интелов.
А вы про японцев, про тиньки.. не интересно это всё.
:)
Audiatur et altera pars !
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Хитрые, необычные алгоритмы и код

Сообщение ARV »

Из критиков кто видео смотрел-то? Или всё теоретизируете?
Теоремы Найквиста вспоминаете, полосы, время выборки... А человек взял, и сделал микро-осциллограф, который вполне способен показать сигнал 5 МГц с вполне адекватными фронтами и спадами сигнала. И даже выше 5 МГц.

Судя по тому, что все упорно называют Di_Halt-а автором этого пера, никто видео не смотрел, т.к. дихальт только перепостил его... Эх вы, специалисты по обсеру других...

Кстати, световое перо на Радио-86 делалось аппаратными средствами микросхемы контроллера дисплея, знатоки хреновы.

Добавлено after 7 minutes 31 second:
[uquote="maxlab",url="/forum/viewtopic.php?p=4771340#p4771340"]КРАМ, Неистово плюсую :)
Учебник "Радиотехнические цепи и сигналы". Ну, на крайняк Титце&Шенк и "Искусство схемотехники"[/uquote]
Просто напомню, что по учебникам аэродинамики майский жук летать не должен.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25123
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Хитрые, необычные алгоритмы и код

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

[uquote="ARV",url="/forum/viewtopic.php?p=4771393#p4771393"]Из критиков кто видео смотрел-то?[/uquote]
А зачем? :dont_know:
Что удивительного в стробоскопическом осциллографе? Они существовали еще в середине прошлого века.
У меня есть два старых (17 лет назад разработаны) устройства уже выведенных из серии, где обнаружение сигнала происходит в пятой зоне Найквиста. А все патамушта PIC18 имеет частоту дискретизации АЦП не выше 100К. А нужно 300К.
Правильный усилитель и фильтр на входе АЦП для минимизации апертурной задержки - вот и всё "чудо".
Все очень дешевые китайские осциллографы с широкой полосой выполнены по стробоскопической схеме. Смотреть на них однократные короткие сигналы принципиально невозможно. А так да, - фронты соответствуют полосе...
Такшта, Роман Викторович, теоретег тут только Вы. Поэтому и удивляетесь обычному.
Последний раз редактировалось КРАМ Чт дек 11, 2025 08:21:42, всего редактировалось 1 раз.
Ответить

Вернуться в «Разные вопросы по МК»