Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сколько тактов затрачивает AVR на умножение
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sergeus
Столкнулся с такой проблемой:
Считываю показания с датчика ускорения ADXL202. Подозреваю, что во время умножения двух Float величин происходит прерывания по захвату ICP, - появляються кое-какие баги.
Подскажите, сколько тактов требуется AVR на умножение двух float. Пишу под WinAVR.
Буду очень рад любой информации по количеству тактов для мат. операций.
Baser
Дело в том, что микроконтроллеры AVR не имеют аппаратного умножения float на float. Поэтому сколько тактов затрачивается на умножение, целиком зависит от того какие библиотеки применяет ваш компилятор и особенно, применяют ли эти библиотеки аппаратное целочисленное умножение.

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

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

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

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

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

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

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


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

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

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

А у модели в студии ресурс ЕЩЕ больше !
sergeus
Всем спасибо за советы beer.gif . Проблему решил - оказалось дело было немного в другом. Насчёт выставления флагов, - я это использую (безопасное программирование smile.gif ). Из любопытства, попробую завтра прогнать в симуляторе, точно узнаю сколько тактов.
mse
Цитата(sergeus @ Oct 19 2008, 17:36) *
Столкнулся с такой проблемой:
Считываю показания с датчика ускорения ADXL202...

Чот не понял...С АДХЛ идёт инфо во флоат? ;О)
slog
Вообще, я бы искал способы обойтись без float. Слишком уж этот float ресурсоёмкий для AVR.
demiurg_spb
Цитата(slog @ Oct 20 2008, 14:46) *
Вообще, я бы искал способы обойтись без float. Слишком уж этот float ресурсоёмкий для AVR.

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

+1
slog
Да ради бога, работает и хорошо. Я просто хотел сказать что случаев когда этот флоат действительно необходим не так уж и много. Во вторых, пара функций с флоат по обьёму могут быть больше всей остальной программы. Вообщем не думаю что по этому поводу стоит начинать очередную религиозную войну.
sergeus
С датчика инфа идёт в виде шим-сигнала. float нужен для обработки и вывода результата с двумя знаками после запятой (не охота изворачиваться без math.h, оно того не стоит). Изначально я вообще использовал double ... и всё работало smile.gif.
aesok
Цитата(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

Анатолий.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.