Czy można gdzieś ustawić aby działać na tym typie i jakoś zoptymalizować kod ? "-Wl,-u,vfprintf" coś takiego zadziała?
|
Ocena wątku:
Arduino zmienne float
|
29-01-2016, 14:32
(27-01-2016, 22:27)-adamek napisał(a): Czy można gdzieś ustawić aby działać na tym typie i jakoś zoptymalizować kod ? "-Wl,-u,vfprintf" coś takiego zadziała?
Witam
Cóż, to już jest wyższa filozofia, na poziomie preprocesora, lub linkera.
Każdy pliczek jest poddawany obróbce w procesie kompilacji.
Tworzony jest manifest i na etapie linkowania bibliotek ustawia się opcje dla preprocesora. Chyba w tej kolejności właśnie, ale mogę się tu grubo mylić. To zależy od zastosowanego kompilatora avr-gcc, ale z grubsza sprawa wygląda tak: (pewnie doskonale się w tym także orientujesz..ale nie zaszkodzi przypomnieć :-):
Podczas niepozornej kompilacji na naszym kompie zapisuje się całkiem sporo:
Standardowo w C:\users\twoje_konto_usera\AppData\Local\Temp\buildxxxxxxxxxxxx.tmp\
Tworzy się tam kilka katalogów i dość sporo plików.
W pliku ctags_target_gcc_minus_e.cpp znajdziesz informacje o Twoich opcjach. Jest tam rownież nota dot. Twoich ustawień.
Dotąd nie miałem potrzeby sięgania aż tak głęboko w opcje preprocesora. Trzeba sporo ogarniać i sporo umieć.
Może tutaj: http://www.atmel.com/webdoc/AVRLibcRefer...r_gcc.html
... znajdziesz więcej informacji. Na początek trzeba niestety zaznajomić się ze sporym wachlarzem opcji dla samego kompilatora.
Pozdrawiam
29-01-2016, 21:06
Głównie chodziło mi o "sprintf" że nie mogłem floata wstawić , niestety nie posiadam takiego czegoś jak "C:\users\twoje_konto_usera\AppData\Local\Temp\buildxxxxxxxxxxxx.tmp\" tym bardziej dysku "C" jedyne co mam to " \ i \home". Przeraża mnie wielkość kodu obsługa ILI9341, ds3231, dht22, SD zajmuje prawie 32 kB + (bootloader).W eclipse avr można to łatwo wklepać w opcjach edytora arduino tego nie ma ,natomiast są dostępne biblioteki do przeróżnych czujników itp. prosta obsługa, czego nie ma na avr . Na mój wynalazek potrzeba by atmega1284. na początek zakupiłem arduino mini atmega328 nie jestem ekspertem ot tak hobbystycznie stacje pogody próbuje sklecić .
(29-01-2016, 21:06)-adamek napisał(a): Głównie chodziło mi o "sprintf" że nie mogłem floata wstawić , niestety nie posiadam takiego czegoś jak "C:\users\twoje_konto_usera\AppData\Local\Temp\buildxxxxxxxxxxxx.tmp\" tym bardziej dysku "C" jedyne co mam to " \ i \home". Przeraża mnie wielkość kodu obsługa ILI9341, ds3231, dht22, SD zajmuje prawie 32 kB + (bootloader).W eclipse avr można to łatwo wklepać w opcjach edytora arduino tego nie ma ,natomiast są dostępne biblioteki do przeróżnych czujników itp. prosta obsługa, czego nie ma na avr . Na mój wynalazek potrzeba by atmega1284. na początek zakupiłem arduino mini atmega328 nie jestem ekspertem ot tak hobbystycznie stacje pogody próbuje sklecić .Witam
Spróbuj funkcji:
dtostrf(double __val, signed char __width, unsigned char __prec, char *__s);
czyli masz np:
float f=12345.6782349012;
char s[10];
dtostrf(f,9,3,s); // precyzja 3 miejsca
... a potem to s wrzucasz do sprintf() zamiast float
... tylko niech ktoś mi powie dlaczego po wgraniu na UNO na przykład, trzecią cyfrą po przecinku jest 9 a nie 8 ????
(moim skromnym zdaniem takie zaokrąglanie to ewidentny błąd)
Pozdrawiam
Przeglądający: 1 gości

