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



Teraz jest 23 kwi 2024, o 19:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: Zmienne
PostNapisane: 6 cze 2012, o 12:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No dobra my tu gadu gadu o drugiej księdze prawdy a tu trzeba pogłębiać wiedzę ;)


Niech no mi ktoś wytłumaczy czemu jest różnica w ilosci zajętych bajtów miedzy tymi dwoma zapisami

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


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


A różnica jest nie bagatelna, bo aż 20 bajtów.



Ostatnio edytowano 6 cze 2012, o 13:03 przez Malutki_27, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 12:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Na moje oko powodem jest to że powołujesz do życia 2 nowe zmienne 16bitowe...
Ale to tylko gdybanie, poczekaj na odpowiedź kogoś mądrzejszego w programowaniu:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

KoreX napisał(a):
Na moje oko powodem jest to że powołujesz do życia 2 nowe zmienne 16bitowe...
Ale to tylko gdybanie, poczekaj na odpowiedź kogoś mądrzejszego w programowaniu:)



No własnie gdybanie ;) , ponieważ pierwszy fragment mniej zajmuje.

Pierwszy ma - 944
a drugi -964

Ehhh a różnica to 20 a nie 40 bajtów



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:02 
Offline
Moderator
Avatar użytkownika

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

A co to w ogóle jest to:

Timer1;

w tym drugim przykładzie ??? ;)

Poza tym twoje pytanie powinno brzmieć troszkę inaczej, dlaczego użyty jest taki kod, który zajmuje więcej pamięci Flash, skoro można go napisać prościej i zajmuje mniej miejsca ???

Wtedy odpowiedziałbym ci, że "nie wszystko złoto co się świeci" ;) a dokładniej mówiąc nie każdy kod w C napisany krócej wykonuje się szybciej. A zwróć uwagę, że to jest obsługa timerów programowych - i trzeba się starać żeby była wykonywana w przerwaniu JAK NAJSZYBCIEJ. I to co widzisz to jest właśnie taka optymalizacja pod kątem szybkości kosztem nieco większego kodu w pamięci FLASH.

W nowej książce będziesz miał BARDZO dobitny przykład takiej optymalizacji kodu procedury obsługi przerwania, które wysyła próbki po I2S do przetwornika DAC TDA1543 ;) ....

wiem - pozostaje pytanie "dlaczego?" - no dlatego że jak sam widzisz powołujesz do życia zmienne lokalne a przecież to MUSI wydłużyć nieco kod, za to zysk jest taki, że jakbyś znał asembler i podejrzał co stało się po kompilacji i przeanalizował to okazałoby się, że jest mniej odwołań do pamięci a więcej działań na rejestrach - co znacznie przyśpiesza wykonanie procedury obsługi całego przerwania.

I takich optymalizacji będzie trzeba się powoli uczyć ;)

_________________
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  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

mirekk36 napisał(a):
A co to w ogóle jest to:

Timer1;

Własnie przed chwilą zuważyłem to i już poprawiłem.


Co do tej objętości to aż jeszcze raz zaraz sprawdze



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:08 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 napisał(a):
Ehhh a różnica to 20 a nie 40 bajtów


Na te różnice to tak nie patrz, bo one mogą się zmieniać w zależności od procka i nawet całego programu, tu optymalizator robi różne sztuczki. Więc to może być raz 20 bajtów a innym 5 albo 10 itp

_________________
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  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Nie no ...... dobrze patrzyłem pierwszy kod zajmuje mniej miejsca niż drugi

Na te różnice to tak nie patrz, bo one mogą się zmieniać w zależności od procka i nawet całego programu, tu optymalizator robi różne sztuczki. Więc to może być raz 20 bajtów a innym 5 albo 10 itp

To rozumiem ...... , tylko nadal się zastanawiam skąd wynika ta różnica że mimo powołania dodatkowych zmiennych kod nadal zajmuje mniej ......., według logiki powinien zajmować więcej ........ Hmmm ...

-- dodano 6 cze 2012, o 14:21 --

Timer1;

A tak na marginesie takie "puste" wywołanie zmiennej kosztuje 8 bajtów przy czym zmienna jest 16-to bitowa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 13:35 
Offline
Moderator
Avatar użytkownika

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

Ja teraz nie mam jak sprawdzić i potwierdzić, który mniej który więcej i dokładnie skąd to wynika - ale może wieczorkiem znajdę chwilkę to przeanalizuję, przypomnę sobie co i jak i podpowiem.

_________________
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  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Kurcze do czego to doszło żebym musiał się kłócić o niebieską książkę ze swoim 3 letnim synem :? .


A wracając do tematu, wydedukowało mi się żę kompilator w przypadku drugim ( tym większym objętościowo ) przy warunku if pobiera wartość Timer1 sprwdza czy nie 0, jeżeli nie 0 to wtedy pobiera ją jeszcze raz.

Natomiast w przypadku pierwszym ( tym mniejszym) wartość Timera1 jest pobierana do zmiennej lokalnej, następnie jest sprawdzana i "obrabiana" a na ońcu przepisywana do Timer1.

Co nasuwa wniosek że mimo większej ilości kodu do napisania w przypadku pierwszym po skompilowaniu wynikowo dla procesora jest to mniej operacji do wykonania.

Dobrze myślę czy znow poszedłem gdzieś na maliny, a raczej w maliny ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Zmienne
PostNapisane: 6 cze 2012, o 19:30 
Offline
Moderator
Avatar użytkownika

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

Dobrze myślisz - bo te zmienne lokalne jak je nazwałeś ;) to w asemblerze nazywają się rejestry - a operacje na nich wykonywane są zdecydowanie szybsze niż operacje na pamięci.

_________________
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: 10 ] 

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