problem z double w GCC



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: problem z double w GCC
Date: Thu, 16 Mar 2006 13:49:19 +0100


Probuje uzyc funkcji opoznienia _delay_ms() i mimo, ze mam w pliku linie
#include <avr/delay.h>
nie dziala. wywoluje ja w taki sposob:
_delay_ms((double)60000);
Powinno byc opoznienie rzedu jednej minuty a niestety nie ma zadnego.
W pliku makefile jest ustawiony wlasciwy kwarc:
F_CPU = 2457600
Mozecie powiedziec mi dlaczego tak jest? Z gory dzieki
Pozdrawiam

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 14:36:27 +0100


Probuje uzyc funkcji opoznienia _delay_ms() i mimo, ze mam w pliku linie
#include <avr/delay.h>
nie dziala. wywoluje ja w taki sposob:


Przepraszam za pomylke. Oczywiscie naglowek powinien brzmiec: "problem z
delay_ms"
Przepraszam i pozdrawiam

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 14:57:39 +0100


Dnia Thu, 16 Mar 2006 13:49:19 +0100, Jacek M. napisał(a):
#include <avr/delay.h>

W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 14:57:26 +0100


#include <avr/delay.h>

W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Ale ja nie widze takiej sciezki. Mozesz wyjasnic gdzie to znalazles?
Pozdrawiam

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 15:00:22 +0100


W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Ale ja nie widze takiej sciezki. Mozesz wyjasnic gdzie to znalazles?
Pozdrawiam

Jacek M.

Tak dokladnie mowiac mam zainstalowane WinAVR i nie moge znalezc tam takiej
sciezki.
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 15:13:33 +0100


Dnia Thu, 16 Mar 2006 14:57:26 +0100, Jacek M. napisał(a):

#include <avr/delay.h>

W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Ale ja nie widze takiej sciezki. Mozesz wyjasnic gdzie to znalazles?
Pozdrawiam

Jacek M.

avr-libc Reference Manual ver. 1.4.3, 23.01.2006. Pochodzi z najnowszego
WinAVR (20060125). U mnie pełna ścieżka jest: C:\WinAVR\avr\include\util\

A tak w ogóle... Czy do obsługi double nie trzeba dodać LDFLAGS += -lm do
makefile?

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

Poprzedni Następny
Wiadomość
Spis treści
From: Ostry <ot_at_nospam_antyspamowyprefiks.epf.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 15:03:59 +0100


Dnia 16-03-2006 o 14:57:39 Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
napisał:

Dnia Thu, 16 Mar 2006 13:49:19 +0100, Jacek M. napisał(a):
#include <avr/delay.h>

W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Masz nowsze libc, ale avr/delay.h ciągle zapewnia kompatybilność:
#warning "This file has been moved to <util/delay.h>."
#include <util/delay.h>

Do autora wątku: spróbuj dodać "UL" do stałej: F_CPU = 2457600UL.
Przeniósłbym to też "na wszelki wypadek" z pliku makefile do kodu
źródłowego jako #define.

BTW, dokumentacja avr-libc sporo zyskała moim zdaniem na przejrzystości
wraz ze zmianą z 1.2 na 1.4.

--
Ostry
http://ostry.w.szu.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 16:04:54 +0100


#include <avr/delay.h>

W moim podręczniku do avr-libc napisali, że należy włączyć <util/delay.h>

Masz nowsze libc, ale avr/delay.h ciągle zapewnia kompatybilność:
#warning "This file has been moved to <util/delay.h>."
#include <util/delay.h>

Do autora wątku: spróbuj dodać "UL" do stałej: F_CPU = 2457600UL.
Przeniósłbym to też "na wszelki wypadek" z pliku makefile do kodu
źródłowego jako #define.

BTW, dokumentacja avr-libc sporo zyskała moim zdaniem na przejrzystości
wraz ze zmianą z 1.2 na 1.4.
Ta nowa dokumentacja rzeczywiscie wydaje sie bardziej przejrzysta, niestety
ja posiadam starsza wersje konpilatora i na razie musze zadowolic sie
dotychczasowa "ksiazka". Co ciekawsze jak uzupelnilem linie z deklaracja
czestotliwosci kwarcu literami UL kompilator zaczal mi krzyczec, ze on nie
zgadza sie na taki sufix:
"C: WinAVR/bin.. lib/gcc/avr3.4.3/../../../../avr/include/avr/delay.h:139:19:
invalid suffix "ULUL" on integer constant".
A sugerowana sciezka wystepuje prawdopodobnie (nie sprawdzalem) w nowszych
instalacjach WinAVR. Moze jakies inne pomysly?
Pozdrawiam

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: Ostry <ot_at_nospam_antyspamowyprefiks.epf.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 16:28:35 +0100


Dnia 16-03-2006 o 16:04:54 Jacek M. <tymkonto_at_nospam_poczta.onet.pl> napisał:

Co ciekawsze jak uzupelnilem linie z deklaracja
czestotliwosci kwarcu literami UL kompilator zaczal mi krzyczec, ze on
nie
zgadza sie na taki sufix:
"C: WinAVR/bin.. lib/gcc/avr3.4.3/../../../../avr/include/avr/delay.h:139:19:
invalid suffix "ULUL" on integer constant".

Racja, dla pliku makefile "UL" jest zbędne:

# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to
the
# processor frequency. You can then use this symbol in your source
code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be
done
# automatically to create a 32-bit value in your source code.
F_CPU = 8000000

--
Ostry
http://ostry.w.szu.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 18:46:43 +0100


Thu, 16 Mar 2006 13:49:19 +0100, na pl.misc.elektronika, Jacek M.
napisał(a):

Probuje uzyc funkcji opoznienia _delay_ms() i mimo, ze mam w pliku linie
#include <avr/delay.h>
nie dziala. wywoluje ja w taki sposob:
_delay_ms((double)60000);
Powinno byc opoznienie rzedu jednej minuty a niestety nie ma zadnego.

Przekraczasz zakres :

<man delay.h>
void _delay_ms ( double __ms )
Perform a delay of __ms milliseconds, using delay_loop2().
The macro F_CPU is supposed to be defined to a constant defining the CPU
clock frequency (in Hertz).
Maximal possible delay is 262.14 ms / F_CPU in MHz. <<------------
[...]
In general, for long delays, the use of hardware timers is much
preferrable, as they free the CPU, and allow for concurrent processing of
other events while the timer is running.
</man>

--
Pozdrowienia
Jurek Szczesiul

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 19:08:07 +0100


Przekraczasz zakres :

Wlasnie! Taka sama odpowiedz przyslal mi emailem Ostry. Postawilem petle i
juz mam potrzebne opoznienie.
Dzieki wszystkim i pozdrawiam

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Artur M. Piwko" <pipene-news_at_nospam_pu.kielce.pl>
Subject: Re: problem z double w GCC
Date: Thu, 16 Mar 2006 22:15:11 +0000 (UTC)


In the darkest hour on Thu, 16 Mar 2006 13:49:19 +0100,
Jacek M. <tymkonto_at_nospam_poczta.onet.pl> screamed:
Probuje uzyc funkcji opoznienia _delay_ms() i mimo, ze mam w pliku linie
#include <avr/delay.h>
nie dziala. wywoluje ja w taki sposob:
_delay_ms((double)60000);
Powinno byc opoznienie rzedu jednej minuty a niestety nie ma zadnego.
W pliku makefile jest ustawiony wlasciwy kwarc:
F_CPU = 2457600
Mozecie powiedziec mi dlaczego tak jest? Z gory dzieki
Pozdrawiam


Za duża wartość argumentu. Podziel na mniejsze i wywołaj w pętli.
Dokładny zakres znajdziesz w samym pliku nagłówkowym delay.h.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:227B ]
[ 23:14:34 user up 10917 days, 11:09, 1 user, load average: 0.06, 0.06, 0.06 ]

Press [ESC] to detonate or any other key to explode.