Страница 422 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 20:50:57
ChipKiller
Опять ассемблер
... какая разница - можно и на С переписать
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 20:52:40
vitalik_1984
Ээээ! У меня не суперкомпьютер! А всего лишь скромные PIC16/18.
А что такого? В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 21:11:14
Chettuser
ChipKiller писал(а): можно и на С переписать
Лениво, особенно если есть готовое
vitalik_1984 писал(а): В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.
Есть, только операции умножения слишком прожорливы и по времени и по памяти.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 21:19:34
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 операции сложения. Никакого тяжеляка.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 21:23:49
*Trigger*
FreshMan писал(а):ааааааааааа......, тогда выходит надо не только запрещать прерывание по переполнению но и поднимать планку до FF
я правильно уразумел ?
Да, правильно. Только запись в OCR FF - это удаление гланд через Ж... Лучше перевести таймер в обычный режим счёта.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 07, 2013 21:32:11
Chettuser
Alexeyslav писал(а):
X = D
X = X * 10 + C
X = X * 10 + B
X = X * 10 + A
4 присваивания, 3 умножения на 10(сдвиг числа на 1 бит и на 3) и 3 операции сложения. Никакого тяжеляка.
То что надо, завтра додумаю. Спасибо!

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 07:21:55
ut1wpr
Alexeyslav писал(а):3 умножения на 10(сдвиг числа на 1 бит и на 3)
Можно подробнее про умножение на 10 четырьмя сдвигами? Туго доходит.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 07:40:59
Леонид Иванович
X * 10 = X * 8 + X * 2
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 08:15:09
pyzhman
К сдвинутому влево на 3 прибавляем сдвинутое один раз.
1. сдвигаем влево один раз. Запоминаем в NNN.
2. сдвигаем еще два раза.
3. прибавляем NNN.
4. радуемся.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 08:20:01
А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: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ?

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 08:36:45
ut1wpr
Леонид Иванович писал(а):X * 10 = X * 8 + X * 2
Извините. Так и я умею. В тексте было сказано про четыре сдвига. Здесь же присутствует еще и операция сложения.
Я недопонял, думал автор умеет чистыми сдвигами на 10 умножать. Вот и мне захотелось.

Комбинациями сдвигов со сложением пользовался давно, начиная с ассемблера i8080.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 09:42:57
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: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ?
Та не... Просто некоторые не только читают статьи tester'а, а и задумываются...
http://www.pic24.ru/doku.php/osa/articl ... _выражений
Не делать длинных и сложных выражений
По хорошему... одна строка - одно действие...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 09:49:10
ibiza11
HHIMERA писал(а):Код: Выделить всё
X = D;
X = (X<<1UL);
X = (X<<3UL);
X = X + C;
Тут вроде как не на 10, а на 16 умножение получается.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 10:00:15
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...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 15:02:13
ibiza11
Мда. На меге быстрее раза в 3-4 будет за счет аппаратного умножителя.

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 15:46:05
HHIMERA
Где-то за 42 cycles...
А PIC24 за 18 cycles...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 18:22:30
kushman
Всем привет. Столкнулся с такой проблемой: atmega8 сразу после прошивки работает по программе нормально, но стоит отключить и включить питание, и работать он отказывается. Программатор BM9010.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 19:10:58
Аlex
HHIMERA писал(а):133 байт ROM, 10 байт RAM
Не впечатлило

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 19:37:35
Chettuser
Объясню почему я так опасаюсь сложных операций. Когда то в этой теме даже писал.
Делал обратное преобразование BIN2BCD через деление. Для этого пришлось подключить math библиотеку. В результате это преобразование отожрало у МК больше половины памяти и работало очень долго. Тогда решил, что проще выполнить циклические вычитания.
Вот потому и заинтересовался преобразованием BCD2BIN, а вдруг тут какие неожиданные решения есть.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн апр 08, 2013 19:51:00
HHIMERA
Аlex писал(а):HHIMERA писал(а):133 байт ROM, 10 байт RAM
Не впечатлило

Дык... тогда PIC24... однозначно...
54 байта ROM, 0 байт RAM и 18 cycles...
