No więc szukam i mecze się od paru dni mam : następujące problemy
1. Projekt, gdy użyje polecenia
kompilator się kompiluje natomiast gdy napiszę
się nie kompiluje i wyskakuje komunikat
nie wiem w czym jest problem dodam tylko ze takie polecenia się normalnie kompilując w Dev C++
Z tego co znalazłem w pdf do avr-lib-user-manual piszą choć nie rozumiem co cytuje str 61.
"11.3 I get "undefined reference to..." for functions like "sin()"
In order to access the mathematical functions that are declared in <math.h>, the
linker needs to be told to also link the mathematical library, libm.a.
Typically, system libraries like libm.a are given to the final C compiler command
line that performs the linking step by adding a flag -lm at the end. (That is, the initial
lib and the filename suffix from the library are written immediately after a -l flag. So
for a libfoo.a library, -lfoo needs to be provided.) This will make the linker
search the library in a path known to the system.
An alternative would be to specify the full path to the libm.a file at the same place
on the command line, i. e. after all the object files (.o). However, since this requires
knowledge of where the build system will exactly find those library files, this is
deprecated for system libraries.
Back to FAQ Index."
2.
Problem drogi polega na tym, że mając jakąś pętle do opóźnienia czasowego powiedzmy taką
to nie kiedy avr studio mi to pomija jakby "skapował" się ze jest to nie produktywne działanie. To znaczy gdy tworzy swój plik makefile to tak właśnie pomija gdy korzystam z tych "dobry" podmienianych projektów to nie pomija. Problem może rozwiązać np coś takiego:
od czego to zależy ?;
3.
Najważniejsze napisałem już kilka projektów ale nadal nie umiem stworzyć nowego projektu. Omijałem to poprzez kopiowanie jakieś przykładowego programu zachowując oryginalne nazewnictwo a zmieniając kod. Z tego co się doczytałem wiąże się to z plikiem makfile, który podobno jest generowany automatycznie przez avr studio. Próbowałem nawet sam tworzyć taki plik przy pomocy winAvr->mfile zgodnie np z tym kursem ale taki plik też mi zwykle nie chciał działać http://kursc.dioda.com.pl/str001.html.
Powiem tak mam makefile do atmegi 8 i 32 ale nie długo mam zamiar napisać coś na inny i będę miał problem ze stworzeniem dobrego makefile. Więc ktoś może mi w końcu wytłumaczy jak się to robi.?
Odrazu powiem odwiedziłem te linki:
https://www.elektroda.pl/rtvforum/topic1059204.html
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=77409
4. Zapytam przy okazji jeszcze o jedną kwestię
jak skowertować liczbę we floadzie do tablicy charów z kropką.
podobno można to zrobić dodając do linkera (-Wl,-u,vfprintf,-lprintf_flt,-lm)ale mi to nie dział (może źle to robie)? Dlatego też napisałem swoją funkcje która przerabia floata na tablice charów ale jest bardzo dułga. i nie optymalna. Jednakże interesował bym mnie jak to zrobić lepiej.
1. Projekt, gdy użyje polecenia
wynik=sin(4.822);kompilator się kompiluje natomiast gdy napiszę
float abc=2.345;
wynik=sin(abc);się nie kompiluje i wyskakuje komunikat
c:/winavr-20081205/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5libc.a(fp_powsodd.o): In function `__fp_powsodd':
(.text.fplib+0x10): relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3' defined in .text section in c:/winavr-20081205/bin/../lib/gcc/avr/4.3.2/avr5libgcc.a(_mul_sf.o)
c:/winavr-20081205/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5libc.a(fp_powsodd.o): In function `__fp_powsodd':
(.text.fplib+0x20): relocation truncated to fit: R_AVR_13_PCREL against symbol `__mulsf3' defined in .text section in c:/winavr-20081205/bin/../lib/gcc/avr/4.3.2/avr5libgcc.a(_mul_sf.o)
make: *** [sumo.elf] Error 1
Build failed with 1 errors and 0 warnings...
nie wiem w czym jest problem dodam tylko ze takie polecenia się normalnie kompilując w Dev C++
Z tego co znalazłem w pdf do avr-lib-user-manual piszą choć nie rozumiem co cytuje str 61.
"11.3 I get "undefined reference to..." for functions like "sin()"
In order to access the mathematical functions that are declared in <math.h>, the
linker needs to be told to also link the mathematical library, libm.a.
Typically, system libraries like libm.a are given to the final C compiler command
line that performs the linking step by adding a flag -lm at the end. (That is, the initial
lib and the filename suffix from the library are written immediately after a -l flag. So
for a libfoo.a library, -lfoo needs to be provided.) This will make the linker
search the library in a path known to the system.
An alternative would be to specify the full path to the libm.a file at the same place
on the command line, i. e. after all the object files (.o). However, since this requires
knowledge of where the build system will exactly find those library files, this is
deprecated for system libraries.
Back to FAQ Index."
2.
Problem drogi polega na tym, że mając jakąś pętle do opóźnienia czasowego powiedzmy taką
void wait(unsigned char pt)
{
unsigned char tp1;
for(;pt>0;pt--)
{
for(tp1 = 255; tp1 != 0; tp1--) ;
}
}to nie kiedy avr studio mi to pomija jakby "skapował" się ze jest to nie produktywne działanie. To znaczy gdy tworzy swój plik makefile to tak właśnie pomija gdy korzystam z tych "dobry" podmienianych projektów to nie pomija. Problem może rozwiązać np coś takiego:
void wait(unsigned char pt)
{
unsigned char tp1;
for(;pt>0;pt--)
{
for(tp1 = 255; tp1 != 0; tp1--) asm("nop");
}
}od czego to zależy ?;
3.
Najważniejsze napisałem już kilka projektów ale nadal nie umiem stworzyć nowego projektu. Omijałem to poprzez kopiowanie jakieś przykładowego programu zachowując oryginalne nazewnictwo a zmieniając kod. Z tego co się doczytałem wiąże się to z plikiem makfile, który podobno jest generowany automatycznie przez avr studio. Próbowałem nawet sam tworzyć taki plik przy pomocy winAvr->mfile zgodnie np z tym kursem ale taki plik też mi zwykle nie chciał działać http://kursc.dioda.com.pl/str001.html.
Powiem tak mam makefile do atmegi 8 i 32 ale nie długo mam zamiar napisać coś na inny i będę miał problem ze stworzeniem dobrego makefile. Więc ktoś może mi w końcu wytłumaczy jak się to robi.?
Odrazu powiem odwiedziłem te linki:
https://www.elektroda.pl/rtvforum/topic1059204.html
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=77409
4. Zapytam przy okazji jeszcze o jedną kwestię
jak skowertować liczbę we floadzie do tablicy charów z kropką.
podobno można to zrobić dodając do linkera (-Wl,-u,vfprintf,-lprintf_flt,-lm)ale mi to nie dział (może źle to robie)? Dlatego też napisałem swoją funkcje która przerabia floata na tablice charów ale jest bardzo dułga. i nie optymalna. Jednakże interesował bym mnie jak to zrobić lepiej.
