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



Teraz jest 26 gru 2024, o 08:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 23 kwi 2013, o 07:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Witam !

Mam pewien problem - napisałem dość duży kod bo aż na 10kb, jest to program na mege16, która steruje pilotem do platformy wielozadaniowej. Po dodaniu kilku bajerów typu jakaś prosta gra, program nie działa jak powinien - na wyświetlaczu krzaczki itp. Czy jest to wina stosu, i jak to rozpoznać (czy stos nadpisuje mi się w programie)? A moje drugie pytanie brzmi jak mogę rozwiązać problem z tak dużym programem ? I trzecie - jak używa się zmiennych globalnych w plikach nagłówkowych ?

serdecznie pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 07:31 

Pomógł: 0

Bez obejrzenia kodu to wróżenie z fusów ;).

Masz jakieś zasobnożerne biblioteki, typu printf?, obsługa float?.
W zielonej książce Mirka jest na 325stronie jak sprawdzać ile zajmuje stos na bieżąco ;).
Ile ramu masz zajęte po kompilacji?



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 07:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Cytuj:
Program: 10772 bytes (65.7% Full)
(.text + .data + .bootloader)

Data: 1299 bytes (126.9% Full)
(.data + .bss + .noinit)

EEPROM: 7 bytes (1.4% Full)
(.eeprom)


Finished building: sizedummy


wynik kompilacji, a na książkę za chwilę zerknę ;)

Ale chyba inna strona, bo na 325 jest sterowanie krokowcem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 07:37 

Pomógł: 0

Zielona, nie niebieska ;).

No i patrzałeś, przeca zmienne w RAM to ci zajmują 130%, jak chcesz by to działało
toż stos nawet biedny procesor nie ma gdzie trzymać ;).


PS. Ja jak mi zmienne po kompilacji zajmują więcej niż 70% szukam możliwych dróg optymalizacji, albo zmieniam procka na większego.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 08:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 08:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Zamień wszystkie funkcje lcd_str
lcd_str("LATARKA ON");
na lcd_Pstr Czy jakoś tak. Nie pamiętam tak na szybko. To zmniejszy ci o wiele wykorzystanie pamięci/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 08:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

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


------------------------ [ Dodano po: 1 minucie ]

Panie drogi, a cóż robią goto w kodzie?
Toż to najłatwiejsza droga do tego aby mieć spaghetti code, jak to mawiał jeden z profesorów na moich studiach.

------------------------ [ Dodano po: 4 minutach ]

Zajętość RAM-u nie powinna być większa niż 80% (podczas kompilacji). Inaczej spodziewaj się problemów ze stosem w trakcie działania programu.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 08:46 
Offline
Moderator
Avatar użytkownika

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

Zobacz pan jak straszliwie DUŻO pamięci RAM po prostu marnujesz - bezpowrotnie marnujesz :( a wspominam o tym w książce, że taki zapis:

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


jest robiony przeze mnie tak na szybko ... i nie ma nic wspólnego z optymalizacją kodu, po prostu krócej się go pisze. Nie pamiętasz ? albo nie doczytałeś skąd funkcja lcd_str() bierze argumenty ? to przypomnę z pamięci RAM. :( Zaczynasz już rozumieć zgrozę w twoim kodzie ??? każdy taki napis to wyrzucone w błoto bajty RAM ? a dlaczego wyrzucone w błoto ? no bo i tak chociaż byś nie chciał, muszą one przez kompilator być umieszczone w pamięci FLASH !!! żeby skądś się wzięły w tejże pamięci RAM :( prawda ? samo nic się w ramie nie pojawi. Więc bidny kompilator nie dość że i tak musi te twoje napisy umieścić we FLASH to jeszcze co gorsze musi napisać kawałek kodu, który po starcie procka ale jeszcze przed twoją funkcją main() napełni te zmienne w pamięci RAM tymi tekstami .... więc pomyśl ile tracisz na takich zapisach gdy robisz nie mały testowy programik a już gotowy

jak myślisz po co jest w książce opisana funkcja lcd_str_P() ???? (nie obraź się proszę ale wydaje mi się że jakoś ją przeczytałeś bardzo hmmm że tak powiem wyrywkowo i wybiórczo .... i stąd twoje problemy, co widać także po tym że nie budzi twojego zdziwienia fakt że zajętość pamięci RAM po kompilacji u ciebie jest ponad 100% !!!!!! :(

ale ok w książce jest jedno i drugie dokładnie opisane - ja przypomnę ci jednak tutaj - i może to skłoni cię do kolejnego czytania książki albo jej fragmentów żeby zawsze mieć pod ręką .... że zmień swoje zapisy tak:

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


ale już sam doczytaj w książce KONIECZNIE:

1. co to takiego jest to PSTR()
2. na temat stosu, jak nad nim panować i ile pamięci RAM warto utrzymywać po kompilacji

ok?

------------------------ [ Dodano po: 1 minucie ]

O! kolega wyżej dobrze zauważył - WYWAL KAŻDY rozkaz goto ! i zapomnij o nim na całe życie programując w C - bo nawet jeśli poprawisz kod i będziesz miał więcej RAM'u to goto załatwi cię tak, że nawet 100% wolnego RAMU ci nie pomoże.

------------------------ [ Dodano po: 5 minutach ]

Ledes napisał(a):
Zajętość RAM-u nie powinna być większa niż 80% (podczas kompilacji). Inaczej spodziewaj się problemów ze stosem w trakcie działania programu.


To jest taka moja podpowiedź dla kogoś kto początkuje i jeszcze nie czuje się dobrze z tym jak panować nad stosem, gdy nie zna takich narzędzi do badania stosu jakie opisałem w Zielonej książce. Ale w trakcie praktyki programowania każdy dojdzie sam do tego, że ta zajętość spokojnie może być większa (OCZYWIŚCIE w zależności od własnego indywidualnego kodu) i może np wynosić nawet 90% albo i 95% ;) ale mówię - to już jak się chociaż troszkę dłużej popraktykuje.

A czasem gdy się mocno i świadomie korzysta ze stosu (gdy np ja bawię się warstwami na LCD), podczas tworzenia ala obiektów, albo przy korzystaniu z dynamicznego alkokowania pamięci RAM - może się okazać że np zajętość tej pamięci nie może przekroczyć nawet 70% .... Jak mówię - troszkę praktyki i każdy sam poczuje stos na własnej skórze ;)

no ale nigdy 100% albo jak w tym przypadku więcej niż 100% !

_________________
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: 23 kwi 2013, o 08:53 

Pomógł: 0

No i Mirek mnie ubiegł, a już przygotowywałem fajne porównanie rozmiaru kodu w zależności od użytych funkcji do wyświetlania na ekranie LCD :). Bo sam całkiem nie dawno z tym walczyłem.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 08:54 
Offline
Moderator
Avatar użytkownika

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

rezasurmar napisał(a):
No i Mirek mnie ubiegł, a już przygotowywałem fajne porównanie rozmiaru kodu w zależności od użytych funkcji do wyświetlania na ekranie LCD :). Bo sam całkiem nie dawno z tym walczyłem.


No ale takie porównanie tego konkretnego kodu to byłaby fajna rzecz ;) nawet sam autor jeśli to zrobi to niech tu opisze ile RAMu ma zajęte przed (chociaż to już widzimy w zasadzie) a ile po ;) Więc jeśli to skompilowałeś rezasurmar to podpowiedz nam już za wczasu bo aż sam jestem ciekaw ;)

_________________
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: 23 kwi 2013, o 09:23 

Pomógł: 0

No fakt wywaliłem odrobinę funkcji (odkomentowałem) ale wszystkie napisy poszły w Flash i proszę taki wynik

Device: atmega16

Program: 2852 bytes (17.4% Full)
(.text + .data + .bootloader)

Data: 84 bytes (8.2% Full)
(.data + .bss + .noinit)

EEPROM: 7 bytes (1.4% Full)
(.eeprom)



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



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 09:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Kod:
Program:   10892 bytes (66.5% Full)
(.text + .data + .bootloader)

Data:        507 bytes (49.5% Full)
(.data + .bss + .noinit)

EEPROM:        7 bytes (1.4% Full)
(.eeprom)


Finished building: sizedummy
 


Chyba nie wymaga komentarza ;) Dzięki Wam wszystkim !

Co do książki= czytałem ją 10 miesięcy temu, jak widać nie dokładnie, ale pewnie niedługo przeczytam ją ponownie.

W jaki sposób mogę pozbyć się instrukcji goto ?



Ostatnio edytowano 23 kwi 2013, o 09:32 przez klonyyy, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 09:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Po prostu ją wywal. To samo uzyskasz dobierając odpowiednio instrukcje break, continue, ify

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 09:33 

Pomógł: 0

A chociaż by wykorzystując break, w while, case itp.
Musiał byś sobie jeszcze raz przemyśleć ten fragment kodu.
Napisz gdzieś na kartce sobie algorytm po kolei co robi i staraj się zmienić tak by nie było goto......

No i tak to jest jak się w pracy, piszę ;), Ledes był pierwszy ;)..



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 09:38 
Offline
Moderator
Avatar użytkownika

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

klonyyy napisał(a):
Co do książki= czytałem ją 10 miesięcy temu, jak widać nie dokładnie, ale pewnie niedługo przeczytam ją ponownie.


ooo jej, 10 mies temu to może i nawet dokładnie czytałeś, ale jak widzisz nasza pamięć RAM ludzka jest zawodna i ulotna, a nie mamy wbudowanego EEPROM'a ;) hahahaah Ja też bym pozapominał wiele rzeczy, a z książką tego typu techniczną - gdy np uczę się ostatnio JAVA to po prostu wciąż siedzę i ją wertuję gdy jestem w kodzie. Takich książek nie da rady raz przeczytać jak powieść - bo ta nasza pamięć .... eeeeh pamięć - tym bardziej u mnie ;) ze sklerozą ;)

klonyyy napisał(a):
W jaki sposób mogę pozbyć się instrukcji goto ?


dość proste , WUKASUJ każde goto, i postaraj się zrobić porządny ERASE mózgu żeby całkowicie zapomnieć, wtedy twoje neurony same będą szukać nowych rozwiązań i je znajdą - zapewniam cię ;) zresztą koledzy wyżej słusznie podpowiadają.

_________________
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: 23 kwi 2013, o 10:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 mar 2013
Posty: 39
Pomógł: 0

rezasurmar napisał(a):
(...) Napisz gdzieś na kartce sobie algorytm po kolei co robi i staraj się zmienić tak by nie było goto...... (...)


Na moich studiach dobrze narysowany algorytm to była podstawa przed napisaniem kodu... tylko kiedy to było :roll: ;) Są jakieś kursy albo ćwiczenia do rysowania algorytmów? Warto odświeżyć sobie pamięć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 10:09 

Pomógł: 0

Sam czytam do poduszki Algorytmy w C++ ;), no i podstawa Algorytmy + struktury danych = Programy i jeszcze Algorytmy ;), taka przepastna książka :D.
No miało się 5.0 z algorytmów dzięki tym cegłom.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2013, o 10:26 
Offline
Użytkownik

Dołączył(a): 31 paź 2012
Posty: 99
Pomógł: 4

Witam .
Algorytmy tak na prawdę nie są trudne ( czasem nieskończone diagramy odstraszają ) najważniejsze to odpowiedzieć na pytania :
co program ma robić i kiedy ?
Odpowiedzią na "co ma robić ?" są funkcje programu a odpowiedzią na "kiedy ?" to warunki wykonania tych funkcji . Prawidłowo formułując warunki można z powodzeniem napisać program bez goto czyli skoku bezwarunkowego .



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: 18 ] 

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