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

 
 
> Не могу преобразовать double в строку, Преобразование типов в WinAVR
Sminder
сообщение Mar 9 2007, 00:55
Сообщение #1


Участник
*

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



Возникла такая проблема: для вывода на индикатор требуется строчная переменная (*char) вида
Х.ХХХ, а имеется полученная в результате вычислений переменная типа double (т.е. с плавающей запятой). Как я понял, в компиляторе WinAVR не имеется встроенных средств для преобразования чисел с плавающей запятой в строку. Пожалуйста, дайте ссылку или приведите пример такого преобразования.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Mar 14 2007, 03:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
У Sminder-а возникла следующая проблема: он собирает проект без опции -lm и некоторые модули функцию `__fixsfsi' из libgcc.а. Что эта версия функции не эффективна это только пол проблемы. А основная проблема в том что 'dtostrf' функция из avr-libc и использует `__fixsfsi' из libm.a. Ну и компоновщик не может добавить в проект две функции с одним именем.К сожалению я не понял как в AVRStudio как по-человечески добавить libm, и поэтому предложил такой способ.


Посмотрите внимательно на ошибки - libm там не упоминается.
Если бы она отсутствовала, линкер бы ругнулся на ненайденное имя.
Вот убрал из мэйкфала -lm:
Цитата
Linking: main.elf
C:/_tools/gcc_avr/bin/avr-gcc -mmcu=atmega162 -I. -gstabs - -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=c99 -MD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref

main.o(.text+0x28): In function `main':
: undefined reference to `dtostrf'


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


Цитата
Мое мнение такое: если у вас меньше 64 кб кода то торопиться переходить на winavr2007 смысла нет.


Судя по тому, как Йорг и Эрик отбиваются от вопросов на avrfreaks, еще долго не захочется переходить.
Я интересуюсь сборкой 2006. (сам работаю под 2005)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 14 2007, 13:41
Сообщение #3


Знающий
****

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



WinAVR 2006.

Код:
Код
#include <stdlib.h>

volatile float MyFloatNumber;
volatile int MyInt;

int
main (void)
{
    MyInt = MyFloatNumber;

    dtostrf (MyFloatNumber, 16, 3, 0);

    return (0);
}


При компиляции без -lm:
Код
avr-gcc -g -Wall -O2 -mmcu=atmega8  -Wl,-Map,demo.map -lm -o demo.elf demo.o
C:/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr4\libc.a(fixsfsi.o): I
n function `__fixunssfsi':
: multiple definition of `__fixsfsi'
C:/WinAVR/lib/gcc/avr/3.4.6/avr4\libgcc.a(_sf_to_si.o):: first defined here
make: *** [demo.elf] Error 1


При компиляции с -lm:
Код
avr-gcc -g -Wall -O2 -mmcu=atmega8  -Wl,-Map,demo.map  -o demo.elf demo.o -lm
avr-objdump -h -S demo.elf > demo.lst
avr-objcopy -j .text -j .data -O ihex demo.elf demo.hex
avr-objcopy -j .text -j .data -O binary demo.elf demo.bin
avr-objcopy -j .text -j .data -O srec demo.elf demo.srec
....


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

Сообщений в этой теме
- Sminder   Не могу преобразовать double в строку   Mar 9 2007, 00:55
- - beer_warrior   ftoa() по-моему нет, но ИМХО она не предусмотрена ...   Mar 9 2007, 01:56
- - vooon   просмотрите stdlib.h внимательно, я там например н...   Mar 9 2007, 01:59
|- - Sminder   Цитата(vooon @ Mar 9 2007, 00:59) просмот...   Mar 11 2007, 16:16
- - beer_warrior   Похоже на двойное включение одной и той же библиот...   Mar 11 2007, 16:23
|- - Sminder   Цитата(beer_warrior @ Mar 11 2007, 15:23)...   Mar 13 2007, 00:14
|- - aesok   makefile ваш, или тот что AVRStudio генерирует авт...   Mar 13 2007, 00:34
- - beer_warrior   ЦитатаСообщения действительно говорят о множествен...   Mar 13 2007, 08:17
|- - Sminder   Пардон, оговорился, я имел в виду конечно определе...   Mar 13 2007, 22:35
|- - aesok   Цитата(Sminder @ Mar 13 2007, 22:35) Make...   Mar 14 2007, 00:10
- - beer_warrior   Ну что тут можно сказать. Оба мэйкфайла к осмотру....   Mar 13 2007, 23:09
- - beer_warrior   2 aesok Анатолий, там ИМХО проблема с libc/libgcc....   Mar 14 2007, 01:08
|- - aesok   Цитата(beer_warrior @ Mar 14 2007, 01:08)...   Mar 14 2007, 02:31
|- - aesok   Цитата(beer_warrior @ Mar 14 2007, 03:09)...   Mar 15 2007, 00:10
- - neonix   На данный момент WinAVR 2007 не пригоден для испол...   Mar 14 2007, 12:20
- - Sminder   Огромное спасибо aesok, ваш совет действительно по...   Mar 17 2007, 21:37


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:05
Рейтинг@Mail.ru


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