Там, мне казалось, стабилизатор встроенный, но, конечно, это предусмотреть на плате надо... А не вариант что-нить в районе 6-7 ноги отрезать-коротнуть?
Да ну его, долбаться. Там питалово еще кроме самой микросхемы еще на резистор подтяжки идет (читалка iButton). Это надо будет 2 дороги порезать, замкнуть 2 вывода QFN - к одному из которых проводники не подведены совсем, и кинуть проводок. При этом еще и выход стабилизатора без блокировочного конденсатора останется. Если бы для себя, в единственном экземпляре - поставил бы внешний стабилизатор, и все дела. А так проще переделать, тем более что те платы, что уже есть, не пропадут, пойдут в дело. На плате разведены по сути 2 отдельных устройства - у них корпуса одинаковые.
Дано : произвольное целое число x со знаком, целая константа k со знаком. Необходимо вычислить y = kx, используя только операции арифметического сдвига, сложения и вычитания, за минимальное количество операций. Пусть k = -14, тогда простейшее решение "в лоб" y = -(x << 1) - (x << 2) - (x << 3). Но оптимальным будет : y = (x << 1) - (x << 4). Вопрос в том, как найти это оптимальное сочетание сдвигов, сложений и вычитаний для заданного k? Может существует какой-то формальный алгоритм?
Теперь пусть мы знаем все правильные решения для |k|<z.
Попробуем найти решение R(z) для z (для -z получим очевидным образом инвертировав знаки): Если z=2^n, тогда решение очевидно, иначе из двух лемм вроде очевидным образом вытекает, что оптимальное решение R(z) это либо 2^n+R(z-2^n), либо 2^(n+1)-R(2^(n+1)-z), заметим, что |z-2^n|<z и |2^(n+1)-z|<z.
Бинго!
Добавлено спустя 42 секунды: Ну а реализация в софте - либо динпрог, либо перебор, тут уж смотря какие требования к производительности и наличию времени на кодинг.
=DeaD= писал(а):Ну а реализация в софте - либо динпрог
Это я так понимаю, если народ умными словами не пугать, просто рекурсия - из функции R(z) вызываем R(2^(n+1)-z) и R(z-2^n) и смотрим, какое решение оптимальнее? Ну а R(0) и R(+-1) возвращают константные решения, так?
blindman писал(а):Необходимо вычислить y = kx, используя только операции арифметического сдвига, сложения и вычитания, за минимальное количество операций.
=DeaD= писал(а):Дано произвольное k - целое, надо выразить его через сумму минимального количества элементов вида +\-2^(целое неотрицательное).
Имхо такая формулировка - существенное упрощение задачи.
Например, чтобы умножить на 0x66 проще сначала умножить на 6 и запомнить результат, а потом полученное умножить еще на 16 и сложить с запомненным.
То есть делаем не четыре сдвига и четыре сложения, а три сдвига и три сложения, но используем лишнюю ячейку памяти для промежуточного результата. Ну и с минусами так же - просто примеры не столь очевидные.
Согласен, значительно упростил, тут получается такой эффект:
0x66=102=64+32+4+2=(16+1)(4+2)
Значит если z не простое, тогда кроме 2^n+R(z-2^n) и 2^(n+1)-R(2^(n+1)-z) надо еще перебрать все R(q)*R(z/q), где q - один из делителей z не равный 1 и меньший или равный sqrt(z)
такие формулы я не понимаю - это для меня слишком сложно и лениво... может быть проще на множители раскладывать... только вот не всегда оптимум получится. Его нужно как-то отдельно оценивать... И правда перебором что-ли...
Есть такая задача: принимать данные по SPI, записывать в кольцевой буфер. При заполнении буфера до определенного порога - выдать сигнал, чтобы передатчик притормозил. Содержимое буфера надо выдавать на другие ноги, тоже через последовательный интерфейс, он должен синхронизироваться с внешним тактовым сигналом, частота которого может меняться. Суть в том, чтобы обеспечить на выходе стабильный поток данных, синхронизированный с внешним тактом, независимо от скорости поступления данных на вход (в разумных пределах). Скорости вывода - до 6200 кбит/с. Принимать на большей скорости (до 20 МБит/с)
С ПЛИСами никогда не работал. Имеется в наличии EPM3064ALC44-10. Ног вроде хватает впритык для интерфейсов и подключения ОЗУ на 32 кБ. Хватит ли ее для такой задачи? Что можно почитать про работу с ПЛИС для начала?