Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 22 mar 2026, o 00:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 3 mar 2016, o 00:15 
Offline
Nowy

Dołączył(a): 30 sie 2015
Posty: 1
Pomógł: 0

Mam problem ze zbyt dużym rozmiarem kodu programu do termometru na czujniku DS18B20.
Program to zmodyfikowana wersja programu ze strony http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=8
(Dostosowane zostały komendy do biblioteki hd44780.h)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zastosowana w kodzie instrukcja sprintf(str, "%4.1f\xdf" "C", temp); powoduje rozrost rozmiaru kodu o grubo ponad 3KB, do ponad 200% miejsca na procku. Nie wiem, jak innaczej przekonwertować obrobione dane temp na tablicę char możliwą do wysłania do wyświetlacza. Używam oprogramowania eclipse z dodanym WinAVR.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2016, o 00:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

andrzejzandrzejowa napisał(a):
powoduje rozrost rozmiaru kodu o grubo ponad 3KB, do ponad 200% miejsca na procku.

I bardzo dobrze - może teraz na własnym przykładzie zrozumiesz dlaczego warto unikać jak ognia obliczeń na liczbach zmiennoprzecinkowych ... a tym bardziej, że w tak prostym zastosowaniu jak z DS18B20 daje się to zrobić bez zmrużenia oka.... tzn absolutnie bez liczb typu float/double

andrzejzandrzejowa napisał(a):
Nie wiem, jak innaczej przekonwertować obrobione dane temp na tablicę char możliwą do wysłania do wyświetlacza

Polecam książkę: http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
w której jest to ładnie opisane i to właśnie z użyciem tylko liczb całkowitych ... A jeśli nie książka to również w internecie znajdziesz mnóstwo przykładów bez używania liczb zmiennoprzecinkowych.

andrzejzandrzejowa napisał(a):
Używam oprogramowania eclipse z dodanym WinAVR.

To akurat nie ma nic do rzeczy ... Nie ważne czy będziesz używał nowego Atmel toolchain czy starego dziadka WinAVR to będziesz miał to samo jeśli tylko tkniesz liczby typu float na tak małym procku

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2016, o 09:37 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Samo sprintf() dodaje 2KB kodu (jeśli trzeba dołączać fltprintf.a to jeszcze więcej). ftoa()/dtostrf() ma znacznie więcej sensu w tym przypadku, ale i tak da się to zrobić bez liczb zmiennoprzecinkowych.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2016, o 22:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 237
Lokalizacja: Rzeszów
Pomógł: 11

Poczytaj sobie o liczbach stałoprzecinkowych - brzmi groźnie, ale jest banalne.
I zrób to na nich. Nie używa typów zmiennoprzecinkowych, bo ośmiobitowe AVR'y ich nie wspierają sprzętowo.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO