Перейти к содержанию
    

Быстрое деление в AVR - Как?

3 часа назад, dimka76 сказал:

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

А какой смысл? Автор же написал, что не дружит с асмом. А си-компилятор сам умеет аналогичные функции для операции деления подставлять. Может даже более оптимальные. Только чтобы оценить степень оптимальности (какая лучше), опять же нужно дружить с асмом.

Так что - тупик.  :unknw:

9 минут назад, MPetrovich сказал:

А разве деление float/float не в одно действие?

Понятия "действие" в CPU нет. Есть такты, циклы, команды.

И любая FPU-операция будет дольше, чем аналогичная целочисленная.

 

PS: Кроме того - си-компилятор может заинлайнить какие-то операции или оптимизировать их, слепив с соседними. Поэтому (в общем случае) - результат его работы будет лучше, чем бездумное использование ассемблерных функций. Без понимания асма и умения их доработать под себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, dimka76 said:

Речь же шла о Cortex-M3. В нем нет float

STM32F4xx это не Cortex-M3? Я на нём делал гироскоп для платформы и синусы во float умножал/делил с показаниями акселерометра тоже во float... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/23/2024 at 8:49 PM, jcxz said:

А какой смысл? Автор же написал, что не дружит с асмом. А си-компилятор сам умеет аналогичные функции для операции деления подставлять. Может даже более оптимальные. Только чтобы оценить степень оптимальности (какая лучше), опять же нужно дружить с асмом.

В том Apllication Note, на который я ссылался, описано два варианта деления. Оптимальный по объему и оптимальный по скорости.
Какой вариант в Си компиляторе - ХЗ :pardon:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, jcxz said:

А си-компилятор сам умеет аналогичные функции для операции деления подставлять. Может даже более оптимальные.

Ну, выходит, я зря уважаемых юзеров беспокоил. "Всё украдено до нас"(Операция Ы..) 🤷‍♂️

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/23/2024 at 8:51 PM, MPetrovich said:

STM32F4xx это не Cortex-M3?

Нет. Это Cortex-M4F

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, MPetrovich сказал:

 А вот как оптимизировать деление в моём случае?

Никак :acute:

Деление на хрен знает что даёт результат НИЧТО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/23/2024 at 8:51 PM, MPetrovich said:

STM32F4xx это не Cortex-M3? Я на нём делал гироскоп для платформы и синусы во float умножал/делил с показаниями акселерометра тоже во float... 

В Cortex-M4 деление с помощью FPU (float) занимает 14 тактов.
Но во-первых, надо указать компилятору использовать аппаратный блок плавающей точки, а во-вторых - этот блок еще надо включить определенными битами в определенном регистре.

Вы это делали ?

On 7/23/2024 at 8:57 PM, A.V.Avtomat said:

Никак :acute:

Деление на хрен знает что даёт результат НИЧТО.

Ну, так, обороты же изначально неизвестны. Вот и получается, что деление не на константу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ускорить деление можно в случае если не все биты делимого используются, тогда можно сократить количество циклов деления.

Но таскать с собой несколько процедур деления ради какой-то индикации, по-моему, перебор.

В библиотеке GCC-AVR те же процедуры что и в аппнотах.

Изменено пользователем vov4ick

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, dimka76 said:

Вы это делали

Вероятно да. Лет 6-7 назад это было...))) 

23 minutes ago, vov4ick said:

В библиотеке GCC-AVR те же процедуры что и в аппнотах.

Я ж уже написал: Ну, выходит, я зря уважаемых юзеров беспокоил. "Всё украдено до нас"

 

2 hours ago, MPetrovich said:
2 hours ago, jcxz said:

 

 

 

В принципе, я из дискуссии сделал вывод, что оптимизировать лучше, чем си-компилятор у меня вряд ли получится. Поскольку на данном этапе контроллер справляется, мне не стоит выпендриваться с оптимизацией))) 

31 minutes ago, vov4ick said:

Но таскать с собой несколько процедур деления ради какой-то индикации, по-моему, перебор.

Согласен! Индикация побочный процесс. Основной - регулировка и поддержание заданных оборотов двигателя. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, MPetrovich сказал:

В принципе, я из дискуссии сделал вывод, что оптимизировать лучше, чем си-компилятор у меня вряд ли получится.

Единственный способ оптимизации лучше чем у компилятора - поменять алгоритм. Из вариантов - сразу измерять частоту вообще отказавшись от деления. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, artemkad сказал:

Единственный способ оптимизации лучше чем у компилятора - поменять алгоритм. Из вариантов - сразу измерять частоту вообще отказавшись от деления. 

Интересно - каким образом это сделать? Особенно при учёте того, что ТС вроде даже не рассказывал: какой датчик оборотов он использует и какие скорости вращения с какой точностью нужно измерять?

Может его датчик даёт один импульс на оборот? Или используются датчики Холла (дискретные)? А скорость вращения не очень высокая. Может есть неравномерности вращения, вибрации, которые нужно сгладить фильтрацией?

Предлагаете ему в обязательном порядке добавить в устройство какой-либо датчик точного углового положения с разрешением в доли градуса?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, jcxz сказал:

Может его датчик даёт один импульс на оборот?

C учетом того, что он в начале подрывался отображать данные о частоте оборотов с киношной частотой, там явно не один оборот в минуту.

39 минут назад, jcxz сказал:

Может его датчик даёт один импульс на оборот? Или используются датчики Холла (дискретные)?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, artemkad сказал:

C учетом того, что он в начале подрывался отображать данные о частоте оборотов с киношной частотой, там явно не один оборот в минуту.

Не вижу что это может поменять. Во всех случаях считаешь число импульсов за фиксированное время.

Предположим:

Обороты = не 1rpm, а пускай - около ~600 rpm. Нормально? Измерять нужно с точностью/дискретностью = ~0.1rpm. Датчик даёт = 1 импульс на оборот. Требуемая реалтаймовость индикации = не хуже 0.1сек (а лучше = от 0.1сек до 0.05сек). Как в этом случае "считать число импульсов за фиксированное время"? За какое время? 1 сек? 0.1сек? ...? Что будет на индикаторе при этом - представляете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, jcxz сказал:

Предположим:

Обороты = не 1rpm, а пускай - около ~600 rpm. Нормально? Измерять нужно с точностью/дискретностью = ~0.1rpm. Датчик даёт = импульс на оборот. Требуемая реалтаймовость индикации = не хуже 0.1сек (а лучше = от 0.1сек до 0.05сек). Как в этом случае "считать число импульсов за фиксированное время"? За какое время? 1 сек? 0.1сек? ...?

Отличные вводные - каждые 0.05 сек(20 раз в секунду) отображать частоту 10 Гц, причем с точностью 1/600 Гц. Я так понимаю  частота постоянна и неизменна и из всех 12 тысяч отображений информативным будет только одно - измеренное и усредненное за 10 минут. А все остальное будет бессмысленное мельтешение цифр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...