Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ChipKiller »

Опять ассемблер
... какая разница - можно и на С переписать
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Ээээ! У меня не суперкомпьютер! А всего лишь скромные PIC16/18.
А что такого? В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

ChipKiller писал(а): можно и на С переписать

Лениво, особенно если есть готовое :))
vitalik_1984 писал(а): В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.

Есть, только операции умножения слишком прожорливы и по времени и по памяти.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

Он имел в виду реализацию умножения контроллер потянет с превеликим натягом... если хватит памяти вообще.

А в чем проблема с ассемблером? вставляй отдельным инклудом, PUSH/POP используемые регистры в подпрограмме и делов-то. Даже глаза мозолить не будет.

А вообще, для PIC-ов я гдето видел математически выведенные алгоритмы BCD-BIN и BIN-BCD преобразования для различных разрядностей, потреблением памяти и времени выполнения. С виду тарабарщина после обфускатора, а работу выполняет верно и быстро...

А вообще в таких алгоритмах можно обойтись без умножения - умножение на 10 заменяется суммой числа умноженного на 2 и на 8. в первом случае это всего лишь сдвиг на один бит, а во втором - на 3 бита.

В твоем примере - берется переменная результата X, и выполняется ряд операций:

X = D
X = X * 10 + C
X = X * 10 + B
X = X * 10 + A

4 присваивания, 3 умножения на 10(сдвиг числа на 1 бит и на 3) и 3 операции сложения. Никакого тяжеляка.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение *Trigger* »

FreshMan писал(а):ааааааааааа......, тогда выходит надо не только запрещать прерывание по переполнению но и поднимать планку до FF
я правильно уразумел ?

Да, правильно. Только запись в OCR FF - это удаление гланд через Ж... Лучше перевести таймер в обычный режим счёта.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Alexeyslav писал(а):X = D
X = X * 10 + C
X = X * 10 + B
X = X * 10 + A

4 присваивания, 3 умножения на 10(сдвиг числа на 1 бит и на 3) и 3 операции сложения. Никакого тяжеляка.

То что надо, завтра додумаю. Спасибо! :beer:
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ut1wpr »

Alexeyslav писал(а):3 умножения на 10(сдвиг числа на 1 бит и на 3)
Можно подробнее про умножение на 10 четырьмя сдвигами? Туго доходит.
С уважением,
Виктор.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Леонид Иванович »

X * 10 = X * 8 + X * 2
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение pyzhman »

К сдвинутому влево на 3 прибавляем сдвинутое один раз.

1. сдвигаем влево один раз. Запоминаем в NNN.
2. сдвигаем еще два раза.
3. прибавляем NNN.
4. радуемся.
Docendo discimus
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

Эх.. не поленился я...

PIC16, HI-TECH PICC :

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

unsigned char A,B,C,D;
unsigned int X;

X=D*1000 + C*100 + B*10 + A;
64 байта ROM, 6 байт RAM, выполнение = 254 цикла.

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

unsigned char A,B,C,D;
unsigned int X;

X = D;
X = X * 10 + C;
X = X * 10 + B;
X = X * 10 + A;
72 байта ROM, 6 байт RAM, выполнение = 262 цикла.

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

#define MUL_10(v)   (((v)<<1) + ((v)<<3))

unsigned char A,B,C,D;
unsigned int X;

X = D;
X = MUL_10(X) + C;
X = MUL_10(X) + B;
X = MUL_10(X) + A;
72 байта ROM, 6 байт RAM, выполнение = 262 цикла.

PS: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ? :roll:
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ut1wpr »

Леонид Иванович писал(а):X * 10 = X * 8 + X * 2
Извините. Так и я умею. В тексте было сказано про четыре сдвига. Здесь же присутствует еще и операция сложения.
Я недопонял, думал автор умеет чистыми сдвигами на 10 умножать. Вот и мне захотелось. :) Комбинациями сдвигов со сложением пользовался давно, начиная с ассемблера i8080.
С уважением,
Виктор.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение HHIMERA »

Аlex писал(а):Эх.. не поленился я...

Я тоже... :)))
72 байта ROM, 6 байт RAM, выполнение = 262 цикла.

64 байта ROM, 6 байт RAM, выполнение = 52 цикла!!! :)))

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

unsigned char A,B,C,D;
unsigned int X;

X = D;
X = (X<<1UL);
X = (X<<3UL);
X = X + C;
X = (X<<1UL);
X = (X<<3UL);
X = X + B;
X = (X<<1UL);
X = (X<<3UL);
X = X + A;

PS: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ? :roll:

Та не... Просто некоторые не только читают статьи tester'а, а и задумываются... :))
http://www.pic24.ru/doku.php/osa/articl ... жений
Не делать длинных и сложных выражений

По хорошему... одна строка - одно действие...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ibiza11 »

HHIMERA писал(а):

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

X = D;
X = (X<<1UL);
X = (X<<3UL);
X = X + C;
Тут вроде как не на 10, а на 16 умножение получается.
Ставим плюсы: )
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение HHIMERA »

Да.. недоглядел... :)

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

unsigned char A,B,C,D;
unsigned int X, Y, Z;

X = D;
Y = (X << 1);
Z = (X << 3);
X = Y + Z + C;

Y = (X << 1);
Z = (X << 3);
X = Y + Z + B;

Y = (X << 1);
Z = (X << 3);
X = Y + Z + A;


133 байт ROM, 10 байт RAM, 121 cycles

Реапьно используется сдвиг, а не умножение, как во всех примерах приведённых Alex... :))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ibiza11 »

Мда. На меге быстрее раза в 3-4 будет за счет аппаратного умножителя. :)
Ставим плюсы: )
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение HHIMERA »

Где-то за 42 cycles...
А PIC24 за 18 cycles...
:))
"Я не даю готовых решений, я заставляю думать!"(С)
kushman
Нашел транзистор. Понюхал.
Сообщения: 194
Зарегистрирован: Сб ноя 07, 2009 15:27:59

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение kushman »

Всем привет. Столкнулся с такой проблемой: atmega8 сразу после прошивки работает по программе нормально, но стоит отключить и включить питание, и работать он отказывается. Программатор BM9010.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

HHIMERA писал(а):133 байт ROM, 10 байт RAM
Не впечатлило :))
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Объясню почему я так опасаюсь сложных операций. Когда то в этой теме даже писал.
Делал обратное преобразование BIN2BCD через деление. Для этого пришлось подключить math библиотеку. В результате это преобразование отожрало у МК больше половины памяти и работало очень долго. Тогда решил, что проще выполнить циклические вычитания.
Вот потому и заинтересовался преобразованием BCD2BIN, а вдруг тут какие неожиданные решения есть.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение HHIMERA »

Аlex писал(а):
HHIMERA писал(а):133 байт ROM, 10 байт RAM
Не впечатлило :))

Дык... тогда PIC24... однозначно...
54 байта ROM, 0 байт RAM и 18 cycles...
:))
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

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