RTV forum PL | NewsGroups PL

Jak rozwiązać problemy z funkcjami inline w WinAVR 20080610 podczas kompilacji?

[AvrGcc] WinAVR-20080610 problem z funkcjami inline

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak rozwiązać problemy z funkcjami inline w WinAVR 20080610 podczas kompilacji?

Pawel K
Guest

Thu Sep 11, 2008 8:21 am   



Witam,
przesiadlem sie na winavr z wersji z 2006 roku i zaczely sie schody
w trakcie kompilacji Sad
wszystkie f-cje inline sie sypia.
Tam gdzie wywoluje te funkcje linker wywala mi ze funkcja jest
zdeklarowana, ale niezdefiniowana ... Wywale slowo inline i wszystko gra
i huczy ...
Ki czort?

--
--
Pozrdawiam
Pawel K from 3miasto
groups(at)kpw.qs.pl
GG: 1263183
---------------- end ----------------

Raven
Guest

Thu Sep 11, 2008 8:52 am   





Pawel K
Guest

Thu Sep 11, 2008 10:29 am   



Raven pisze:
Quote:
a c99+ gnu ustawione ?

# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99

plik z f-cjami inline kompiluje sie bezblednie jak widac:

Compiling C: dev/ads1110.c
avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=14745600UL -DV2 -Os -I
include -I include/dev -I include/menu -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wstrict-prototypes
-Wundef -Wa,-adhlns=obj/dev/ads1110.lst -Ic:\code\avr\avrlib -std=gnu99
-MD -MP -MF .dep/ads1110.o.d dev/ads1110.c -o obj/dev/ads1110.o


plik w ktorym wywoluje funkcje inline w trakcie kompilacji wywala takie
bledy:

include/dev/ads1110.h:6: warning: inline function 'ads1110_Convert_IN'
declared but never defined
include/dev/ads1110.h:5: warning: inline function 'ads1110_Convert'
declared but never defined
include/dev/ads1110.h:6: warning: inline function 'ads1110_Convert_IN'
declared but never defined
include/dev/ads1110.h:5: warning: inline function 'ads1110_Convert'
declared but never defined


w czym moze byc problem? ktory powstal w nowej wersji ...

--
--
Pozrdawiam
Pawel K from 3miasto
groups(at)kpw.qs.pl
GG: 1263183
---------------- end ----------------

Guest

Thu Sep 11, 2008 2:20 pm   



On 11 Wrz, 11:29, Pawel K <gro...@kpw.qs.pl> wrote:
Quote:

plik z f-cjami inline kompiluje sie bezblednie jak widac:

Compiling C: dev/ads1110.c

[ciach]

Quote:
plik w ktorym wywoluje funkcje inline w trakcie kompilacji wywala takie
bledy:

include/dev/ads1110.h:6: warning: inline function 'ads1110_Convert_IN'
declared but never defined

To tylko ostrzeżenie, że funkcja nie będzie potraktowana jako inline i
rozwinięta w miejscu wywołania.
Wyjaśnij, po co deklarujesz funkcje jako inline, jeżeli nie dajesz
kompilatorowi możliwości skorzystania z tej deklaracji, definiując te
funkcje w oddzielnym pliku ".c" ?
Aby deklaracja inline mogła zadziałać, kompilator musi znać definicję
funkcji w miejscu, gdzie napotka do niej odwołanie. Przy programach
składających sie z wielu plików źródłowych, jedynym sensownym sposobem
jest umieszczenie definicji funkcji inline w pliku nagłówkowym i
najczęściej z dodatkowym atrybutem static (znaczy jako static inline),
aby później uniknąć problemów w czasie łączenia.

Wcześniejsza wersja kompilatora najwidoczniej nie potrafiła generować
ostrzeżeń tego rodzaju.

Adam Dybkowski
Guest

Thu Sep 11, 2008 8:18 pm   



Pawel K pisze:

Quote:
include/dev/ads1110.h:5: warning: inline function 'ads1110_Convert'
declared but never defined

Wygląda tak, jakbyś zapomniał o "static".
Poprawnie powinno być w pliku .h na przykład:

static inline int funkcja (int param1)
{
return param1 * 5;
}

Jeżeli chcesz wymusić, aby funkcja zawsze była inline (normalnie może
się zdarzyć, że jakaś duża funkcja static inline wywoływana wiele razy
będzie umieszczona w kodzie tylko raz gdy optymalizujesz na zajętość
pamięci kodu), można dodać always_inline to w atrybutach funkcji.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

Konop
Guest

Fri Sep 12, 2008 12:36 am   



Quote:
Wygląda tak, jakbyś zapomniał o "static".
Poprawnie powinno być w pliku .h na przykład:

static inline int funkcja (int param1)
{
return param1 * 5;
}

Jeżeli chcesz wymusić, aby funkcja zawsze była inline (normalnie może
się zdarzyć, że jakaś duża funkcja static inline wywoływana wiele razy
będzie umieszczona w kodzie tylko raz gdy optymalizujesz na zajętość
pamięci kodu), można dodać always_inline to w atrybutach funkcji.

A mógłbyś jeszcze tak w 3 słowach wyjaśnić, co oznacza static dla
funkcji inline?? Bo co dla zmiennej lokalnej - to wiem Smile... ma stałe
miejsce w RAMie... a dla funkcji - już nie :/...

Pozdrawiam
Konop

Artur M. Piwko
Guest

Fri Sep 12, 2008 10:01 am   



In the darkest hour on Fri, 12 Sep 2008 01:36:32 +0200,
Konop <konoppo@gazeta.pl> screamed:
Quote:
Jeżeli chcesz wymusić, aby funkcja zawsze była inline (normalnie może
się zdarzyć, że jakaś duża funkcja static inline wywoływana wiele razy
będzie umieszczona w kodzie tylko raz gdy optymalizujesz na zajętość
pamięci kodu), można dodać always_inline to w atrybutach funkcji.

A mógłbyś jeszcze tak w 3 słowach wyjaśnić, co oznacza static dla
funkcji inline?? Bo co dla zmiennej lokalnej - to wiem Smile... ma stałe
miejsce w RAMie... a dla funkcji - już nie :/...


http://www.greenend.org.uk/rjk/2003/03/inline.html

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:227B ]
[ 09:01:20 user up 11828 days, 20:56, 1 user, load average: 0.99, 0.71, 0.72 ]

Minds are like Parachutes. They work best when open.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak rozwiązać problemy z funkcjami inline w WinAVR 20080610 podczas kompilacji?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map