Например TDA7294

Форум РадиоКот • Просмотр темы - Хитрые, необычные алгоритмы и код
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт дек 25, 2025 09:40:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 414 ]     ... , , , 19, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб дек 07, 2024 13:54:02 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 268
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2723
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
1. Что за проблемные требования? А как программа может содержать нечто, что не содержится в ЯП?

Смотря, что Вы подразумеваете под "содержится в ЯП". Если "содержится в стандарте ЯП", то любая программа должна решать проблемную задачу, иначе она просто не нужна. Следовательно, ничего о решении целевой проблемы в стандарте Вы не найдете. В программе будет содержаться логика решения проблемной задачи. Будь это коммуникация по MQTT или динамическое связывание с учетом ограничений ABI.

2. Ссылки не открываются у меня... но я понял про что, и оно к теме именно программирования в том числе прошивок не имеет никакого отношения.

Официальная "ARM for Embedded Developer Guide"? Ну-ну )))

3. Конечно лучше изучить даташит, вот только чем он может тут помочь преминимо к нашему обсуждению?

Это лишь наиболее очевидный пример того, что невозможно программировать, зная лишь стандарт языка.
В более общем случае, попробуйте почитать требования к вакансиям. С удивлением там обнаружите, что кодер (знающий только ЯП) вообще никому не нужен. В обязательных требованиях будет, для примера, Kafka, ClickHouse, gRPC, ProtoBuf, RabbitMQ, MQTT, PostgreSQL k8s и прочее, чего в стандарте ЯП обнаружить не удастся. И в итоге выяснится, что знания о конкретном ЯП для разработчика - лишь незначительная часть того, что ему действительно необходимо знать.

К примеру могу привести отсутствие какой либо нужды знать конкретные реализации той же самой линковки -- поскольку никаким образом не может привести к изменению в коде...

Внимательно перечитайте мои примеры выше. Переход от статического связывания к динамическому на C++ обязательно потребует изменений в коде.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб дек 07, 2024 15:39:41 
Первый раз сказал Мяу!

Зарегистрирован: Пн мар 18, 2024 22:04:17
Сообщений: 37
Рейтинг сообщения: -3
Следовательно, ничего о решении целевой проблемы в стандарте Вы не найдете. В программе будет содержаться логика решения проблемной задачи. Будь это коммуникация по MQTT или динамическое связывание с учетом ограничений ABI.
-- поскольу это несколько отличается от предыдущих вариаций твоих постов, то отвечу -- я не говорил вообще что в стандарте должо быть решение какой то задачи, в том числе описание того как надо писать логику -- это уже прерогатива каких-то гайдлайнов... Относительно к стандарту я указывал на общие концепции, которые применимы в коде, ты же начал внедрять неверный свой вывод, что требуется знать ABI как сущность ЯП и в соответствии с ABI кодировать так или иначе. При этом ты подразумеваешь, что необходимо как либо использовать сущности, которые должны пользоваться этим ABI. Хотя таковое вообще не предусмотрено ЯП -- о чем я уже многократно высказывался -- по этому прекращай вести этот нелепый спитч про сущности, которые не могут никаким образом повлиять на процесс программирования на определенном ЯП (в частности у нас тут обсуждение С++ было). Никакого механизма для управления dynamic linkage ЯП С++ не подразумевает в себе -- он даже не содержит такого понятия -- такого не существует в нем... В своей программе ты можешь задать какую угодно логику взаимодействия, используя средства ЯП -- ничего больше не требуется.

Это лишь наиболее очевидный пример того, что невозможно программировать, зная лишь стандарт языка.
В более общем случае, попробуйте почитать требования к вакансиям. С удивлением там обнаружите, что кодер (знающий только ЯП) вообще никому не нужен. В обязательных требованиях будет, для примера, Kafka, ClickHouse, gRPC, ProtoBuf, RabbitMQ, MQTT, PostgreSQL k8s и прочее, чего в стандарте ЯП обнаружить не удастся. И в итоге выяснится, что знания о конкретном ЯП для разработчика - лишь незначительная часть того, что ему действительно необходимо знать.
-- а можно вообще привести хоть один мой пост, в котором указывается, что вообще ничего кроме ЯП знать не надо для кодирования? Ведь я говорил про то, что нет никакой необходимости знать, как это будет устроено после обработки компилятором и воспринято операционной системой... А не в общем случае про знания для программирования... Я же явно пометил про "к нашему обсуждению" неоставив никаких иных истолковательных вариантов.

Внимательно перечитайте мои примеры выше. Переход от статического связывания к динамическому на C++ обязательно потребует изменений в коде.
-- какие же в коде должны быть изменения? Я как и впредь предложу обратить внимание на тот факт -- что ты возможно пытаешься не там изменять для достижения своей цели? Такое называется "костылями" как я считаю.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб окт 25, 2025 17:59:03 
Нашел транзистор. Понюхал.

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 174
Рейтинг сообщения: 0
У меня джиттера нет, ввод/вывод происходит после прерывания когда процессор спал, засыпает он всегда не позднее 950 мкс, когда завершит все текущие одномиллисекундные задачи. Сначала все активные задачи основные, после процессор запускает ADC на 700_й микросекунде, по очереди каналы, сам находится во сне во время работы ADC, просыпается только переключить канал и сохранить результат, после в сон до прерывания 1 миллисекунда, далее уже повторю - ввод/вывод по SPI.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб окт 25, 2025 18:12:38 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20009
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Эт чё за херня?

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб окт 25, 2025 18:17:48 
Нашел транзистор. Понюхал.

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 174
Рейтинг сообщения: 0
Это по теме - хитрый алгоритм, но тебе похоже это не под силу понять.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб окт 25, 2025 18:56:25 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24617
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Это по теме - хитрый алгоритм

Любой "хитрый алгоритм" - это джиттер. Джиттер почти отсутствует только у аппаратного процесса, да и то нужно постараться.
Например, триггер Шмитта - это гарантированный высокий уровень джиттера. А практически все ноги современных МК по входу - триггеры Шмитта.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Сб окт 25, 2025 21:33:59 
Мудрый кот

Карма: 25
Рейтинг сообщений: 494
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1814
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Простой способ изменить порядок битов в байте.
Идея отсюда: In C/C++ what's the simplest way to reverse the order of bits in a byte?

напр. 0b10010011 -> 0b11001001

С листом бумаги и карандашом за минуту (и меньше) ясно, что делает метод :).
Давно пользуюсь, например для зарядки данных в TM1637 по протоколу I2C (аппаратная или программная, без адреса).

Код:
// https://stackoverflow.com/questions/2602823/in-c-c-whats-the-simplest-way-to-reverse-the-order-of-bits-in-a-byte
uint8_t rev_data(uint8_t b) {
  b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
  b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
  b = (b & 0xAA) >> 1 | (b & 0x55) << 1;

  return b;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вс окт 26, 2025 10:46:11 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 20009
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
А практически все ноги современных МК по входу - триггеры Шмитта.

Хочется сказать, что ноги завязаны на тактовую частоту МК

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вс окт 26, 2025 11:23:32 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24617
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
ноги завязаны на тактовую частоту МК

Это зависит от архитектуры. Но программное чтение порта несомненно завязано. Однако ТШ сам по себе способен вызвать джиттер, Особенно для сигналов с не крутыми фронтами.
Есть пины способные работать асинхронно с внутренней аппаратной периферией. И тогда ТШ станет камнем преткновения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Пн окт 27, 2025 23:32:05 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 3
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Простой способ изменить порядок битов в байте.
Хорошая идея, но неплохо было-бы уточнить для какого процессорa. Понятно, что на С будет работать на любом, но в АРМ это делается одной командой RBIT процессора. Кроме того, для использования аппаратного SPI (не I2C) драйвера с TM1637 в них имеется выбор засылки данных начиная с msb или с lsb, так что программное инвертирование битов не требуется. В аппаратных I2C драйверах такого выбора не встречал, так что может иметь смысл. Однако, при программной реализации I2C можно выталкивать биты сдвигом байта влево или вправо, так что дополнительное инвертирование порядка битов не требуется.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вт окт 28, 2025 04:53:17 
Друг Кота

Карма: 64
Рейтинг сообщений: 1022
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4371
Откуда: Ижевск
Рейтинг сообщения: 0
[uquote="veso74",url="/forum/viewtopic.php?p=4757753#p4757753"...напр. 0b10010011 -> 0b11001001

С листом бумаги и карандашом за минуту (и меньше) ясно, что делает метод
Код:
 {
  b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
  b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
  b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
  return b;
}
[/uquote]
Такой код выполняется за 17 тактов. Даже карандаш с бумагой доставать не надо. К тому же позволяет выполнить любую перетасовку битов.
Код:
.include "tn2313def.inc"

   .CSEG   

Reset:
   LDI   R22,0b10010011
   BST   R22,7
   BLD   R0,0
   BST   R22,6
   BLD   R0,1
   BST   R22,5
   BLD   R0,2
   BST   R22,4
   BLD   R0,3
   BST   R22,3
   BLD   R0,4
   BST   R22,2
   BLD   R0,5
   BST   R22,1
   BLD   R0,6
   BST   R22,0
   BLD   R0,7
   RJMP   RESET
.EXIT


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вт окт 28, 2025 06:56:25 
Мучитель микросхем
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 420
Рейтинг сообщения: 0
Такой код выполняется за 17 тактов. Даже карандаш с бумагой доставать не надо. К тому же позволяет выполнить любую перетасовку битов.
Код:
.include "tn2313def.inc"

   .CSEG   

Reset:
   LDI   R22,0b10010011
   BST   R22,7
   BLD   R0,0
   BST   R22,6
   BLD   R0,1
   BST   R22,5
   BLD   R0,2
   BST   R22,4
   BLD   R0,3
   BST   R22,3
   BLD   R0,4
   BST   R22,2
   BLD   R0,5
   BST   R22,1
   BLD   R0,6
   BST   R22,0
   BLD   R0,7
   RJMP   RESET
.EXIT

Для простого разворота я всегда использовал пару сдвигов через С ROL/ROR (те же самые 16 тактов на байт). Но если нужна особая перестановка, то использование BST/BLD, конечно, без вариантов.

_________________
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 6 декабря 2025 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вт окт 28, 2025 07:51:11 
Мудрый кот

Карма: 25
Рейтинг сообщений: 494
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1814
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Ser60, для AVR, PIC, STM8/32, CH32, GD32, APM32, Teensy, ESP32 и другие.
Пo I2c oсобенно эффективно для МК с небольшим количеством пинам и ресурсам, при наличии других периферийных устройств на стандартном I2c. Прогр. код для комуникации с дисплея уже написан и не нужно писать новый (bit-banging).
Изображение
---
Нашел для APM (Keil, arm_acle.h), спасибо, буду использовать.
Код:
/* RBIT */
static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__rbit(uint32_t __t) {
  return __builtin_arm_rbit(__t);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Вт окт 28, 2025 11:40:40 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24617
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Кроме того, для использования аппаратного SPI (не I2C) драйвера с TM1637 в них имеется выбор засылки данных начиная с msb или с lsb, так что программное инвертирование битов не требуется. В аппаратных I2C драйверах такого выбора не встречал, так что может иметь смысл. Однако, при программной реализации I2C можно выталкивать биты сдвигом байта влево или вправо, так что дополнительное инвертирование порядка битов не требуется.

Инвертирование порядка бит является фундаментальной процедурой FFT. Именно поэтому в любом процессоре рассчитанном на БПФ есть реверс битов как отдельная инструкция.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 11:58:59 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
Для простого разворота я всегда использовал пару сдвигов через С ROL/ROR (те же самые 16 тактов на байт). Но если нужна особая перестановка, то использование BST/BLD, конечно, без вариантов.
Для байта то - зачем так? Неужто нет места на один 256-байтный массив? Для архитектур, где нет спец.команды, проще и быстрее имхо - трансляцией через массив.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 12:13:46 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18892
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
jcxz, какой, на хрен, 256-байтный массив, чтобы развернуть биты в одном байте?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 12:36:41 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
jcxz, какой, на хрен, 256-байтный массив, чтобы развернуть биты в одном байте?
А что не так?
Исходное значение - индекс массива, результат = значению по данному индексу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 13:54:30 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18892
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
jcxz, а если понадобиться развернуть двухбайтовое число, ты предложишь массив из 65536 байт?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 14:25:33 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24617
Откуда: Московская область, Фрязино
Рейтинг сообщения: 1
а если понадобиться...?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хитрые, необычные алгоритмы и код
СообщениеДобавлено: Ср окт 29, 2025 15:08:55 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2927
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18892
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
КРАМ, извини, но вопрос был задан не тебе.
и еще я не спрашивал, какие способы существуют и сколько их.
я спросил про конкретный способ, который предлагает jcxz.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 414 ]     ... , , , 19, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y