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



Teraz jest 7 lut 2025, o 22:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 17 mar 2013, o 18:36 
Offline
Nowy

Dołączył(a): 17 mar 2013
Posty: 4
Pomógł: 0

Jak w temacie.
Tworzę (usiłuję to zrobić :( ) program do obsługi termometru ds18b20. Do pewnego momentu z eclipsem nie ma problemów. Na koniec programu chcę zwizualizować temperaturę, za pomocą jednej diody (temperatura przekracza zadaną - dioda się zapala). Problem polega na tym, że gdy dorzucę funkcję if(), rozmiar programu rozrasta się z blisko 400 bajtów do ponad 2500 bajtów i nagle zużywa też ponad 250 bajtów eepromu:
gdy w programie wpisuję
PORTD|=255;
program zajmuje "tylko 400" bajtów, natomiast gdy tą linijkę wydłużę do:
if (temp>10) PORTD|=255;
program zaczyna zajmować ponad 2500 bajtów. Kompilacja innych programów, w których występuje taki błąd z użyciem innego programu (Programmers notepad z pakietu winavr-a) powoduje zmianę rozmiaru pliku wynikowego do około 1kB.

Piszę program na Attiny2313 i tak jest ustawiony w preferencjach, używam USBasp i tak jest ustawiony w preferencjach, używam eclipse indigo, zmiana toolchaina z atmela na winavr nie robi różnicy.

Co wy na to?


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 19:15 
Offline
Moderator
Avatar użytkownika

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

Jak będziesz stosował takie zapisy:

16.0

to nie dziw się ;) .... kompilator próbuje traktować to jako liczbę typu float i zaraz musi dociągnąć hektolitry bibliotek


Autor postu otrzymał pochwałę

_________________
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: 17 mar 2013, o 19:40 
Offline
Nowy

Dołączył(a): 17 mar 2013
Posty: 4
Pomógł: 0

Poprawione, rzeczywiście zmniejszyło rozmiar kodu o... 500 bajtów. Aktualnie jest sporo ponad 2kB, nadal jest stanowczo za dużo jak na zmianę kodu o jedną instrukcję. Nie dopatrzyłem się innych tego typu kruków. Tak na marginesie ten program pochodzi ze zdaje się, że piątej części kursu avr-gcc z forbota (obsługa termometru).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 19:47 

Pomógł: 0

Rozumiem, że to nie są mirkowe biblioteki DSów?.

Musiał byś się w nie zaopatrzyć, albo przejrzeć całą obsługę DSów........ mnie spory pod względem ilości funkcji program zajął w atmedze8 ok 6k, czyli jakieś 80% (6664 bajta, 214bajtów ramu i 4bajty eeproma)
Obsługa ADC (pomiar na termoparze), DS18x20 pełne biblioteki Mirka, wysyłanie po RS232, superdebounce, regulator proporcjonalny z wykrywaniem zera (też z niebieskiej książki),no i obsługa LCD1602 też na Mirkowych Bibliotekach.

Bez specjalnej optymalizacji funkcji czy obsługi przeliczania......



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 19:51 
Offline
Nowy

Dołączył(a): 17 mar 2013
Posty: 4
Pomógł: 0

Poprawione, rzeczywiście zmniejszyło rozmiar kodu o... 400 bajtów. Aktualnie jest sporo ponad 2kB, nadal jest stanowczo za dużo jak na zmianę kodu o jedną instrukcję. Nie dopatrzyłem się innych tego typu kruków. Tak na marginesie ten program pochodzi ze zdaje się, że piątej części kursu avr-gcc z forbota (obsługa termometru). Z wyjątkiem pinów, chyba niczego nie zmieniałem.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 20:11 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Masz zmienną typu double i dlatego masz taki duży kod. Jak nie była używana to obliczanie zmiennej temp po prostu zostało pominięte przez kompilator. Zmień typ tej zmiennej na int16_t i zobaczysz różnicę. Skoro sprawdzasz z dokładnością do 1 stopnia to po co stosować double.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 22:53 
Offline
Nowy

Dołączył(a): 17 mar 2013
Posty: 4
Pomógł: 0

mirekk36 i Krauser - dzięki za help'a ;)

Podłoże pode mną robi się grząskie... Czuję, jak zapadam się ze wstydu pod ziemię :oops:

Trochę szkoda, że nie ma opcji usuwania wątku (lub przynajmniej ja jej nie dostrzegam) - wszak zawalanie takiego zacnego forum problemami wynikającymi z niewiedzy... Straszny obciach :roll:

Zobaczyłem, zapamiętam... Niedługo pewnie zrozumiem; program zdaje się działać poprawnie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2013, o 23:02 
Offline
Moderator
Avatar użytkownika

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

jaki tam obciach i wstyd ? ;) po to jest właśnie to forum

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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