• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino zmienne float
#1
Information 
Czy można gdzieś ustawić aby działać na tym typie i jakoś zoptymalizować kod ? "-Wl,-u,vfprintf" coś takiego zadziała?
 
Odpowiedź
#2
(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
 
Odpowiedź
#3
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ć .
 
Odpowiedź
#4
(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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości