Свежие обсуждения
Микроконтроллеры

Оптимизация математических выражений для МК

1 3 5

Возможно ли все вычисления вести не в плавающей запятой, а в фиксированной или даже целочисленно, с использованием таблиц. На выходе МК наверняка требуется целочисленный результат? Возможно ли вычисления проводить так, чтобы делать их "доводку" вне МК? Возможно даже попробовать представить большую часть программы МК в виде таблицы с добавлением насложной арифметики.
Наконец, можно перейти на язык ассемблера. Компиляторы ЯВУ не настолько оптимальны, а язык ассемблера, тем более для МК, не настолько сложен как многие думают но даёт гораздо большие возможности. Конечно, для его освоения требуется время.

 

caddr: Можно.
Интересно, что это за ряд получится ? Это уже не ряд, а квадрат какой-то. Пример, плиз.
А что, логарифм и экспонента уже заимели второй аргумент ?

To gan :
< Все калькуляторы (и наверняка и компиляторы) именно так вычисляют значения фукций. >

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

To Vlad_Petr :

Форум был очень приличный ru.embedded, я несколько раз получал оттуда существенную помощь - не прямо решение задачи, а обсуждение как-то раскрепощало мысл`ю, снимало шоры, и ответ находился : да как же я, дурак, сразу не дотумкал ! Но часто мнения были слишком категоричны, появилось два лагеря заклятых между собой "друзей", и форум ушел во флуд, а нормальные люди ушли. Говорят, в Нью-Йорке оттуда, где поселяются русские, уходят даже негры

-------------------
А насчет арифметики - я использовал нестандартную : 1 байт знак-порядок, 2 байта мантисса ( без скрытого разряда ).
Точности мне хватало ( если точность измерения 1%, точность вычислений 0.0001% ни к чему ). Попробовали раз сравнить с 4-байтной Сишной арфметикой - разность времени выполнения в 4 раза ! А со временем у меня всегда была напряженка : начиная задачу, выбирал вроде проц с запасом, а по ходу заказчик подвешивает все новые и новые функции, а это все в реалтайме, синусовина 50-герцовая ждать не станет Вот и приходилось исползовать ресурсы на 150%

 

Bul_d_Ozer: Интересно, что это за ряд получится ?
- Я не ходячий справочник по матану. Подробнее ищите в учебниках или поисковиках (разложение в ряд Тейлора функции нескольких переменных).

 

Bul_d_Ozer: А насчет арифметики - я использовал нестандартную : 1 байт знак-порядок, 2 байта мантисса ( без скрытого разряда ).

И смнусы/логарифмы/экспоненты и т. д. тоже реализовали? Внушает© Только не надо всем это советовать
Я понимаю, приятно рассказать про такие достижения, но современные микроконтроллеры позволяют использовать языки высокого уровня с их отлаженными, проверенными математическими библиотеками (зачастую написанными на том же самом ассемблере). И далеко не факт, что самописная библиотека будет меньше/безглючнее.

 

А если питание не лимитирует возьмите из хлама что-нибудь типа 8087 там страшной скорости арифметика заточена. Стековый калькулятор со всеми стандартными мат.функциями. И ее контроллером можно юзать. Даром, высочайшая точность, считает очень быстро...но жрет...

 

AHTOXA: Только не надо всем это советовать...
Я понимаю, приятно рассказать про такие достижения, но современные микроконтроллеры позволяют использовать
.....
Разумеется, они позволяют. У них ресурсов больше. Но тут опять найдется Bul_d_Ozer может и помоложе, и опять сделает что-то по своему, и это будет очень быстрая и эффективная программа. Окажется, что задача опять не могла быть решена стандартными методами... А остальные снова будут ждать новые, все более современные контроллеры......ДИАЛЕКТИКА....
Думаю, тут все просто: Если хотите эффективно использовать ресурсы контроллера, - asm Вам в руки!. Когда будете этим asm владеть, мысли как сделать нестандартно и очень эффективно, сами придут. В конце концов, как и какая там внутри софтинка крутится никого не волнует....

 

Vlad_Petr: Но тут опять найдется Bul_d_Ozer может и помоложе, и опять сделает что-то по своему, и это будет очень быстрая и эффективная программа.
... только писать и отлаживать её он будет полгода, а то и больше, и за это время конкуренты, сразу взявшие подходящий под задачу МК, уже займут рынок... ДИАЛЕКТИКА

 

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

 

Vov4ik: Ну это вряд ли Долгое написание программ на ассемблере - это больше миф, чем правда.

Это — правда. Я знаю про это не понаслышке
Сколько займёт времени написание нестандартной математической библиотеки? А полноценное её тестирование? И так ли уж велик будет выигрыш? Библиотеки языка си тоже не пионеры пишут.

Vov4ik: Я тоже хотел как один из вариантов предложить использовать мат. сопроцессор

Вот это уже точно "удалять гланды через ж" У автора темы формула занимает половину(кажется) памяти программ. Десять формул займут 3/4. Не влезет - взять контроллер с вдвое большей памятью. Скорость, как он пишет, не критична. Зачем здесь сопроцессор?! Зачем здесь ассемблер?

Vov4ik: Всё таки призываю попробовать глобальную оптимизацию программы, а не оптимизацию конкретных матем. операций.

А я предлагаю не париться Есть ещё половина памяти программ, зачем паниковать раньше времени?

 

AHTOXA: ...зачем паниковать раньше времени?
Присоединяюсь. Все библиотеки, какие требуются, уже прилинкованы, вторая формула оставшуюся половину памяти точно не займет. Можно еще с десяток таких же формул закатать