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



Teraz jest 19 kwi 2024, o 20:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 26 lis 2015, o 00:34 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Cześć, problem może prosty ale nie potrafię na niego znaleźć odpowiedzi. Chodzi o różnicę w działaniu pomiędzy licznikami w przerwaniu:
Kod:
    if (Timer0) Timer0--;

    n = Timer1;      
    if (n) Timer1 = --n;

Jaki jest cel wprowadzenia zmiennej n?
Który sposób jest szybszy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2015, o 00:45 
Offline
Moderator
Avatar użytkownika

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

To już niejednokrotnie opisywałem na tym forum .... a także jak to sprawdzić ... ale ok podpowiem jeszcze raz

- zajrzyj po kompilacji każdego sposobu do pliku *.lss (czyli kodu w asemblerze) i spróbuj sobie porównać, który działa szybciej ;) bo tu ładnie widać, że nie zawsze to co krócej napisane w C działa szybciej po kompilacji na asembler - dlatego czasem warto bawić się optymalizacją kodu ale to oznacza, że warto też znać chociaż podstawy asemblera żeby to dobrze robić

podpowiedź: ;) ... oczywiście ten drugi sposób jest SZYBSZY a w przypadku obsługi timerów programowych w przerwaniu SZCZEGÓLNIE nam na tym zależy


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: 26 lis 2015, o 01:21 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Sprawdziłem sobie w kilku wariantach (W timerze są liczone dwie zmienne 16 bit i jedna 8 bit). Co mnie zadziwiło najkrótszy kod w pliku .lss jest gdy stworzy się oddzielne zmienną dla liczników 16 bitowych i licznika 8 bit. Tekstu najwięcej ale sprawniej. Dzięki za pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2015, o 11:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jeżeli używasz zmiennej volatile, a taką powinieneś jak wykorzystujesz ją w i poza przerwaniem, to każde odwołanie do niej to ponowne załadowanie jej wartości. Dlatego jest taki myk, że na początku przerwania pobierasz ją do zwykłej zmiennej i dzięki temu skraca się kod, bo kolejne odwołania nie są już volatile. A jak wiesz, przy normalnym wykorzystaniu przerwania nic innego w międzyczasie zmiennej Ci nie zmodyfikuje.

Mirek pisał o tym na swoim blogu, więc warto tam zaglądać http://mirekk36.blogspot.com i czytać, czytać, czytać ...

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 6 minutach ]

O tym napisane jest w tym artykule:
http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html



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 10 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO