реклама на сайте
подробности

 
 
> как перемножать при помощи встроенного умножителя?
cornflyer
сообщение Feb 22 2008, 10:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



мне нужно умножать два 16bit числа, потом результат поделить на 4095
галочка в ИАРе в опциях стоит - hardware multiplyer
но приведенный ниже код не работает!
может лучше на ассемблере сделать эту фунцкию?


unsigned int get_code ( unsigned int num_value, unsigned int k )
{
tmp = num_value * k ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
tmp = tmp >> 12 ;
return tmp ;
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VAI
сообщение Feb 22 2008, 10:34
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



В том коде, который приведён, ничего работать не будет. tmp не объявлена.
Кстати, сдвиг на 12 эквивалентен делению на 4096, а не на 4095...
попробуйте так
Код
unsigned int get_code ( unsigned int num_value, unsigned int k )
{
unsigned long tmp;

tmp = num_value * k;
asm ("nop");
asm ("nop");
asm ("nop");
tmp = tmp >> 12;
return( unsigned int tmp );
}

// или короче
unsigned int get_code ( unsigned int num_value, unsigned int k )
{
return( (unsigned int)( num_value * k / (unsigned long)4095 ));
}


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 18:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016