Цитата(beer_warrior @ Mar 14 2007, 01:08)

2 aesok
Анатолий, там ИМХО проблема с libc/libgcc. К сожалению слабо представляю как они коррелируют между собой, но libm здесь ИМХО непричем. В этом случае ругнулось бы на undefined function.
Тут два варианта - либо это очередная кривизна winavr2007, либо IDE подсовывает либу линкеру дважды. Исключить второе поможет билд из командной строки. Если при этом линкер заругается опять, то тогда откатыватся на старую версию (2006). Я так понял, вы ей активно пользуетесь, она надежна и очищена от старья?
Дело в том что в GCC две версии библиотеки для чисел с плавающей точкой (я говорю только про сложение, вычитание, ..., сравнение, преобразование типов). Одна находиться в стандартной библиотеке компилятора в libgcc.а. Недостаток этой версии в том что эти функции написаны на C, и имеют большой размер кода и время выполнения. Но GCC должен иметь эти функции в стандартной библиотеке. float - это стандартный 'С' тип, и компилятор должен всегда быть готовым сгенерировать код для умножения двух float переменных.
Есть еще один набор тех же самых функций, но написанных на ассемблере, тоесть оптимизированных по скорости и размеру. Эти функции находятся в avr-libc, а физически в библиотеке libm.a. Для того чтобы использовались оптимизированные функции и нужно прилинковать библиотеку libm.a с помощью опции линкера -lm. (кстати в вашем примере этот ключ есть).
Код
avr-gcc -mmcu=atmega162 -adhlns=main.o -std=c99 -main.o --output main.elf [b]-lm[/b]
У Sminder-а возникла следующая проблема: он собирает проект без опции -lm и некоторые модули функцию `__fixsfsi' из libgcc.а. Что эта версия функции не эффективна это только пол проблемы. А основная проблема в том что 'dtostrf' функция из avr-libc и использует `__fixsfsi' из libm.a. Ну и компоновщик не может добавить в проект две функции с одним именем.
К сожалению я не понял как в AVRStudio как по-человечески добавить libm, и поэтому предложил такой способ.
Анатолий.
PS: Мое мнение такое: если у вас меньше 64 кб кода то торопиться переходить на winavr2007 смысла нет.