|
|
  |
FMul как Div, Почему не используем? |
|
|
|
Feb 26 2008, 12:19
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451

|
Добрый день уважаемые форумчане. На днях созрел вопрос: почему бы не использовать FMul как Div, например так: Ldi Tmp,0xFF ; Ldi Tmp2,0b00011001 ; 1/5, вообще то говоря должна быть ; 0b00110010, но AVRStudio утверждает обратное FMul Tmp,Tmp2 ; Необходимо убрать Sts 0x00+XMEM_Base,R0 ; Записать по внешнему адресу Sts 0x01+XMEM_Base,R1 ; Stop ; Безконечный цикл Посчитал на калькуляторе - некоторые расхождения есть, но я думая что есть области где и это можно будет применить. Ниже прикрепляю файл для перевода делителя для Div`а в множитель для FMul`а. _____________________ Не удается прикрепить, не знаю почему, короче кому надо - просите здесь отправлю на мыло. Файл можно скачаать здесь
Сообщение отредактировал Erv&Sed - Feb 26 2008, 12:38
|
|
|
|
|
Feb 26 2008, 12:27
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451

|
Дело в том, что все библиотеки которые поподались мне в руки - в качестве процедуры истользовали оогромные алгоритм, но я не видел ни одной, которая использовала бы FMul, поэтому я и решил что люди в основном пользуются именно этими библиотеками.
|
|
|
|
|
Feb 26 2008, 12:42
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Erv&Sed @ Feb 26 2008, 16:27)  Дело в том, что все библиотеки которые поподались мне в руки - в качестве процедуры истользовали оогромные алгоритм, но я не видел ни одной, которая использовала бы FMul, поэтому я и решил что люди в основном пользуются именно этими библиотеками. Дело в том, что деление и умножение не размножишь как сложение и вычитание. А используется, как правило двух-четырёх байтовые числа для арифметики. Алгоритм намного сложнее получается. Тем не менее эти команды в библиотеках присутствуют.
|
|
|
|
|
Feb 26 2008, 12:42
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451

|
Да конечно, можно получить приближенное значение, но достаточно точное чтобы использовать этот спопсоб для выигрыша в скорости.
|
|
|
|
|
Feb 26 2008, 18:01
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720

|
у меня такое работает : Код u8 div_by5_u8_hmul(u8 data_in) {return((((u16)data_in * 0x33) + 0x33) >> 8); }
u16 div_by5_u16_hmul(u16 data_in) {return((((u32)data_in * 0x3333) + 0x3333) >> 16); } можно и без аппаратного умножения : Код u8 div_by5_u8_soft(u8 data_in) {u16 u16_01, result; result = u16_01 = data_in; u16_01 <<= 1; result += u16_01; u16_01 <<= 3; result += u16_01; u16_01 <<= 1; result += u16_01; result += 0x33; //correction return(result >> 8); }
u16 div_by5_u16_soft(u16 data_in) {u32 u32_01, result; result = u32_01 = data_in; u32_01 <<= 1; result += u32_01; u32_01 <<= 3; result += u32_01; u32_01 <<= 1; result += u32_01; u32_01 <<= 3; result += u32_01; u32_01 <<= 1; result += u32_01; u32_01 <<= 3; result += u32_01; u32_01 <<= 1; result += u32_01; result += 0x3333; //correction return(result >> 16); }
Сообщение отредактировал umup - Feb 26 2008, 18:10
|
|
|
|
|
Feb 26 2008, 19:19
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451

|
Umup я не понял про что вы, может это из-за моего С, но мы говорим что с помощью FMul можно разделить на любое число, а не только на 5, для чего нужно предварительно загрузить значения 1/число в Tmp2(в нашем примере).
Но я действительно не понял что у вас происходит в программе.
Со всем уважением. (насколько я понимаю вы владелец ресурса Umup.Narod.Ru)
|
|
|
|
|
Feb 26 2008, 21:01
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 11-09-05
Пользователь №: 8 451

|
Кстати говоря, можно писать так: Код Ldi Tmp,0xFF; ; Ldi Tmp2,0b00011001; 1/5 Ldi Tmp2,Q7(0.2);!!!!!!!!!!!!!!!!!!!!!!!!
FMul Tmp2,Tmp; Необходимо убрать
Sts 0x00+XMEM_Base,R0 Sts 0x01+XMEM_Base,R1 Stop Q7() - это функция преобразующая простое дробное число - в число необходимое для FMul`а. Она поддерживается AVRASM2 но 1-ым нет. Кстати а кто-нибудь знает как можно оформить структуры в AVRStudio, как-то сложно без них.
Сообщение отредактировал Erv&Sed - Feb 26 2008, 21:04
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|