[an error occurred while processing this directive]
Вопрос к пишущим для TMS 2812 на СИ: не могу заставить его (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено dsp 31 июля 2006 г. 22:42

правильно помножить два числа Q31. Объявляю:
long a,b;
long long c;
a=...; b=....
c = a*b;
получаю всякую х..
Смотрю, что выдает в Mixed Mode:
- во-первых, принудительно выставляет "SPM 0" (т.е. в PM стоИт единица - уже не то);
- во-вторых, вместо QMPYL стоит IMPYL;
- в третьих сдвигает результат вправо на 32 (точнее, два раза по 16);
в итоге умножение, например, 0x4000 0000 на 0x4000 0000 выдает вообще нулевой результат!
Где засада? Как этим управлять? В руководстве по сям нашел только рекомендации, как получить старшие 16 бит при умножении 16х16 (да и то через жопу: (long)a*(long)b>>16 - при int a,b; Про 32 разряда - ни слова.
Не дайте пропАсть. Не хочу из-за этой ерунды переходить на асм. Наверняка есть какое-то решение, просто не знаю, где рыть.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание