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

 
 
 
Reply to this topicStart new topic
> Сколько тактов затрачивает AVR на умножение, float * float
sergeus
сообщение Oct 19 2008, 13:36
Сообщение #1


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Столкнулся с такой проблемой:
Считываю показания с датчика ускорения ADXL202. Подозреваю, что во время умножения двух Float величин происходит прерывания по захвату ICP, - появляються кое-какие баги.
Подскажите, сколько тактов требуется AVR на умножение двух float. Пишу под WinAVR.
Буду очень рад любой информации по количеству тактов для мат. операций.
Go to the top of the page
 
+Quote Post
Baser
сообщение Oct 19 2008, 15:53
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Дело в том, что микроконтроллеры AVR не имеют аппаратного умножения float на float. Поэтому сколько тактов затрачивается на умножение, целиком зависит от того какие библиотеки применяет ваш компилятор и особенно, применяют ли эти библиотеки аппаратное целочисленное умножение.

А померять количество тактов удобнее всего при помощи симулятора, напр. A-Studio. Математические процедуры очень хорошо отлаживать на симуляторах, в отличие от других задач.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Oct 19 2008, 16:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(sergeus @ Oct 19 2008, 19:36) *
Столкнулся с такой проблемой:
Считываю показания с датчика ускорения ADXL202. Подозреваю, что во время умножения двух Float величин происходит прерывания по захвату ICP, - появляються кое-какие баги.
Подскажите, сколько тактов требуется AVR на умножение двух float. Пишу под WinAVR.
Буду очень рад любой информации по количеству тактов для мат. операций.

Проблема описана не полностью. Вы не указали период считывания показаний, Вы не указали длительность чтения, ...

Я наверно бы решал проблему так. Перед началом умножения устанавливал бы программно флаг (переменную, определенную глобально). После умножения снимал бы его (флаг). А в обработчике прерывания прописал бы условие: если флаг установлен -- зажечь светодиод или поставить вверх какую-нибудь лапку. Если уже все лапы заняты, использовать ту, которая меенее других критична для этой временной тестовой функции. Этот тест покажет Вам точно-ли возникает прерывание во время умножения или нет.

Если же Вас интересует время, сделйте тоже самое, но только не с флагом, а со светодиодом. Перед началом умножения "поднимайте" лапку, после -- опускайте. Таким образом Вы сможете оценить время, затрачиваемое на умножение, а после пересчитать его в количество тактов.

Не бойтесь экспериментировать. Ресурс флеш-памяти -- практически неисчерпаем. А потом, у Вас, на сколько я понимаю, это -- разработка? А если это разработка, то тут надо экономить не на детальках, а на личном времени.

Это все настолько банально, что мне приходится извиняться за советы -- извините! smile.gif

Удачи!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Kernigan
сообщение Oct 19 2008, 19:07
Сообщение #4





Группа: Новичок
Сообщений: 11
Регистрация: 17-10-08
Пользователь №: 41 018



Цитата(sergeus @ Oct 19 2008, 17:36) *
Пишу под WinAVR.


окружите умножение переключением ножки и посмотрите в симуляторе сколько времени пройдет между переключениями ноги.

ИМХО ОЧЕВИДНО !

Цитата(zhevak @ Oct 19 2008, 20:33) *
Ресурс флеш-памяти -- практически неисчерпаем.

А у модели в студии ресурс ЕЩЕ больше !
Go to the top of the page
 
+Quote Post
sergeus
сообщение Oct 19 2008, 21:13
Сообщение #5


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Всем спасибо за советы beer.gif . Проблему решил - оказалось дело было немного в другом. Насчёт выставления флагов, - я это использую (безопасное программирование smile.gif ). Из любопытства, попробую завтра прогнать в симуляторе, точно узнаю сколько тактов.
Go to the top of the page
 
+Quote Post
mse
сообщение Oct 20 2008, 09:19
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(sergeus @ Oct 19 2008, 17:36) *
Столкнулся с такой проблемой:
Считываю показания с датчика ускорения ADXL202...

Чот не понял...С АДХЛ идёт инфо во флоат? ;О)
Go to the top of the page
 
+Quote Post
slog
сообщение Oct 20 2008, 10:46
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Вообще, я бы искал способы обойтись без float. Слишком уж этот float ресурсоёмкий для AVR.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 20 2008, 12:10
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(slog @ Oct 20 2008, 14:46) *
Вообще, я бы искал способы обойтись без float. Слишком уж этот float ресурсоёмкий для AVR.

Я таких заявлений не понимаю.
Если всё прекрасно работает и с float, то зачем нужно изгаляться. Вдемя - деньги.
Стараться обходится без float надо только в ооочень редких случаях от безысходности.
И такие случаи возникают, как правило, из-за неграмотного выбора контроллера.
Если человек осознанно идёт на такой шаг - флаг ему в руки.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 20 2008, 12:23
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(demiurg_spb @ Oct 20 2008, 15:10) *
Я таких заявлений не понимаю.
Если всё прекрасно работает и с float, то зачем нужно изгаляться. Время - деньги.

+1
Go to the top of the page
 
+Quote Post
slog
сообщение Oct 20 2008, 13:31
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Да ради бога, работает и хорошо. Я просто хотел сказать что случаев когда этот флоат действительно необходим не так уж и много. Во вторых, пара функций с флоат по обьёму могут быть больше всей остальной программы. Вообщем не думаю что по этому поводу стоит начинать очередную религиозную войну.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
sergeus
сообщение Oct 20 2008, 16:24
Сообщение #11


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

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



С датчика инфа идёт в виде шим-сигнала. float нужен для обработки и вывода результата с двумя знаками после запятой (не охота изворачиваться без math.h, оно того не стоит). Изначально я вообще использовал double ... и всё работало smile.gif.
Go to the top of the page
 
+Quote Post
aesok
сообщение Oct 20 2008, 18:51
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(sergeus @ Oct 19 2008, 17:36) *
Пишу под WinAVR.
Буду очень рад любой информации по количеству тактов для мат. операций.


Симулятор показал что умножение float на float на контроллерах с MUL* инструкциями выполняеться примерно за 150 циклов.

Можете порыться в архиве avr-libc-dev mail list-а там должны быть результаты времени выполнения для всех математических функций.

.... RTFM: Benchmarks http://www.nongnu.org/avr-libc/user-manual/benchmarks.html

Анатолий.

Сообщение отредактировал aesok - Oct 20 2008, 18:52
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 05:15
Рейтинг@Mail.ru


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