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

 
 
> Не могу преобразовать 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 15 2007, 00:10
Сообщение #3


Знающий
****

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



Цитата(beer_warrior @ Mar 14 2007, 03:09) *
Посмотрите внимательно на ошибки - libm там не упоминается.
Если бы она отсутствовала, линкер бы ругнулся на ненайденное имя.
Вот убрал из мэйкфала -lm:

К сожалению я не могу коментировать WinAVR-2005, про 2006 я уже написал проблема решаеться добавлением библиотеки libm при компоновке (опция -lm в [/b]конце[b] командной строки).

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

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

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

Я интересуюсь сборкой 2006. (сам работаю под 2005)

Эрик обещал в апреле новый релиз WinAVR, но можете спокойно добавить месяц. wink.gif

WinAVR-20060421 стабильный, сильно ни кто не ругает. Наверное привыкли. wink.gif
Но выбор вседа за вами.

Анатолий.
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   WinAVR 2006. Код: Код#include <stdlib.h> ...   Mar 14 2007, 13:41
- - 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 - 14:15
Рейтинг@Mail.ru


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