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

 
 
> WinAVR & float, проблемы оптимизации
GIGAWAT
сообщение Apr 3 2007, 23:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 9-02-07
Из: Санкт-Петербург
Пользователь №: 25 221



Приветствую 8)

Имеется девайс на Mega169.
Имеется некоторый код написанный под WinAVR.
Проблема в следующем.
Провожу вычисления с извлечением корня кубического, для этого я возводил число в степень 1/3 с помошью функции pow библиотеки math, все заработало, вычисляется, НО компилятор нормально работает с переменными float и double только без оптимизации кода, а без оптимизации в память не влезает основной код (rom всего 16К).
Незнаю даже, что делать?
Может есть вариант оптимизации отдельно взятого участка кода ?
Или может вообще отказаться от вещественных типов ? (однако неохота ,ибо уже парился с этим заставляя на асме вычислять корень кубический МК(HOLTEK HT49R50), который умел аппаратно токо складывать и умножать wacko.gif ) не зря же я на архитектуру AVR переехал smile3046.gif
Вобщем нужно мнение ОТЦОВ 8) a14.gif
Заранее спасибо.

З.Ы.
Если нужны уточнения, спрашивайте wink.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GIGAWAT
сообщение Apr 4 2007, 11:36
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 9-02-07
Из: Санкт-Петербург
Пользователь №: 25 221



Да уж, накосячил я с примером кода tongue.gif

Вот:

#include <math.h>

float x1;
float rezult;
char=temp;
main()
{
temp=25;
x1=pow(temp, 0.333);
rezult=x1*2;
}

Вот так повеселее 8)
Суть в том, что когда оптимизация включена компилятор просто проскакивает строки с float и ничего не далает 8(.
ОДНАКО проблему я решил cool.gif
По вашей рекомендации добавил к переменным float приставочку volatile, и все заработало с оптимизацией -0s, но при этом участок кода с float само сабой особо не уменьшается, осталось проверить, хватит ли места в памяти.

Насчет вычислений без применения float, вы меня конечно порадовали, а то я считал, что у меня был принципиально неправильный подход в решении данной задачи.
Спасибо за вашу помощ. wink.gif

Сообщение отредактировал GIGAWAT - Apr 4 2007, 11:39
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 4 2007, 12:14
Сообщение #3


Знающий
****

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



Цитата(GIGAWAT @ Apr 4 2007, 11:36) *
ОДНАКО проблему я решил cool.gif
По вашей рекомендации добавил к переменным float приставочку volatile, и все заработало с оптимизацией -0s, ...


Я вам этого не рекомендовал, модифакатор volatile используеться для отключения оттимизации доступа к переменной. И должен применятьса только тогда, когда это дейсвительно нужно. Прочитайте FAQ #1 в avr-libc-user-manual.

Анатолий.
Go to the top of the page
 
+Quote Post



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

 


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


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