... какая разница - можно и на С переписатьОпять ассемблер
Мелкие вопросы по МК и ПЛИС.
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Мелкие вопросы по МК и ПЛИС.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
А что такого? В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.Ээээ! У меня не суперкомпьютер! А всего лишь скромные PIC16/18.
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
ChipKiller писал(а): можно и на С переписать
Лениво, особенно если есть готовое
vitalik_1984 писал(а): В вашем Мк нет двух свободных байт для хранения переменой int? В случае со знаковой переменной ваши 9999 легко помещаются в +-32 767.
Есть, только операции умножения слишком прожорливы и по времени и по памяти.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Он имел в виду реализацию умножения контроллер потянет с превеликим натягом... если хватит памяти вообще.
А в чем проблема с ассемблером? вставляй отдельным инклудом, 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 операции сложения. Никакого тяжеляка.
А в чем проблема с ассемблером? вставляй отдельным инклудом, 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: Мелкие вопросы по МК и ПЛИС.
FreshMan писал(а):ааааааааааа......, тогда выходит надо не только запрещать прерывание по переполнению но и поднимать планку до FF
я правильно уразумел ?
Да, правильно. Только запись в OCR FF - это удаление гланд через Ж... Лучше перевести таймер в обычный режим счёта.
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Alexeyslav писал(а):X = D
X = X * 10 + C
X = X * 10 + B
X = X * 10 + A
4 присваивания, 3 умножения на 10(сдвиг числа на 1 бит и на 3) и 3 операции сложения. Никакого тяжеляка.
То что надо, завтра додумаю. Спасибо!

Re: Мелкие вопросы по МК и ПЛИС.
Можно подробнее про умножение на 10 четырьмя сдвигами? Туго доходит.Alexeyslav писал(а):3 умножения на 10(сдвиг числа на 1 бит и на 3)
С уважением,
Виктор.
Виктор.
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
X * 10 = X * 8 + X * 2
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
К сдвинутому влево на 3 прибавляем сдвинутое один раз.
1. сдвигаем влево один раз. Запоминаем в NNN.
2. сдвигаем еще два раза.
3. прибавляем NNN.
4. радуемся.
1. сдвигаем влево один раз. Запоминаем в NNN.
2. сдвигаем еще два раза.
3. прибавляем NNN.
4. радуемся.
Docendo discimus
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Эх.. не поленился я...
PIC16, HI-TECH PICC :
64 байта ROM, 6 байт RAM, выполнение = 254 цикла.
72 байта ROM, 6 байт RAM, выполнение = 262 цикла.
72 байта ROM, 6 байт RAM, выполнение = 262 цикла.
PS: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ?
PIC16, HI-TECH PICC :
Код: Выделить всё
unsigned char A,B,C,D;
unsigned int X;
X=D*1000 + C*100 + B*10 + A;
Код: Выделить всё
unsigned char A,B,C,D;
unsigned int X;
X = D;
X = X * 10 + C;
X = X * 10 + B;
X = X * 10 + A;
Код: Выделить всё
#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;
PS: Ну почему у людей такое недоверие к компиляторам ? Неужели кто-то считает, что они глупее нас ?
Re: Мелкие вопросы по МК и ПЛИС.
Извините. Так и я умею. В тексте было сказано про четыре сдвига. Здесь же присутствует еще и операция сложения.Леонид Иванович писал(а):X * 10 = X * 8 + X * 2
Я недопонял, думал автор умеет чистыми сдвигами на 10 умножать. Вот и мне захотелось.
С уважением,
Виктор.
Виктор.
Re: Мелкие вопросы по МК и ПЛИС.
А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 ... жений
Не делать длинных и сложных выражений
По хорошему... одна строка - одно действие...
"Я не даю готовых решений, я заставляю думать!"(С)
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Мелкие вопросы по МК и ПЛИС.
Тут вроде как не на 10, а на 16 умножение получается.HHIMERA писал(а):Код: Выделить всё
X = D;
X = (X<<1UL);
X = (X<<3UL);
X = X + C;
Ставим плюсы: )
Re: Мелкие вопросы по МК и ПЛИС.
Да.. недоглядел...
133 байт ROM, 10 байт RAM, 121 cycles
Реапьно используется сдвиг, а не умножение, как во всех примерах приведённых Alex...
Код: Выделить всё
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: Мелкие вопросы по МК и ПЛИС.
Мда. На меге быстрее раза в 3-4 будет за счет аппаратного умножителя. 
Ставим плюсы: )
Re: Мелкие вопросы по МК и ПЛИС.
Где-то за 42 cycles...
А PIC24 за 18 cycles...

А PIC24 за 18 cycles...
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Мелкие вопросы по МК и ПЛИС.
Всем привет. Столкнулся с такой проблемой: atmega8 сразу после прошивки работает по программе нормально, но стоит отключить и включить питание, и работать он отказывается. Программатор BM9010.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Не впечатлилоHHIMERA писал(а):133 байт ROM, 10 байт RAM
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Объясню почему я так опасаюсь сложных операций. Когда то в этой теме даже писал.
Делал обратное преобразование BIN2BCD через деление. Для этого пришлось подключить math библиотеку. В результате это преобразование отожрало у МК больше половины памяти и работало очень долго. Тогда решил, что проще выполнить циклические вычитания.
Вот потому и заинтересовался преобразованием BCD2BIN, а вдруг тут какие неожиданные решения есть.
Делал обратное преобразование BIN2BCD через деление. Для этого пришлось подключить math библиотеку. В результате это преобразование отожрало у МК больше половины памяти и работало очень долго. Тогда решил, что проще выполнить циклические вычитания.
Вот потому и заинтересовался преобразованием BCD2BIN, а вдруг тут какие неожиданные решения есть.
Re: Мелкие вопросы по МК и ПЛИС.
Аlex писал(а):Не впечатлилоHHIMERA писал(а):133 байт ROM, 10 байт RAM
Дык... тогда PIC24... однозначно...
54 байта ROM, 0 байт RAM и 18 cycles...
"Я не даю готовых решений, я заставляю думать!"(С)