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



Teraz jest 1 mar 2025, o 02:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 4 mar 2013, o 22:42 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Witam
Jeśli ktoś by potrzebował dość znośnego timera sprzętowego ...
.. to pierwszy użyteczny programik w C.
Ponieważ jestem ledwie początkujący w C , postanowiłem sprawdzić jak to wychodzi w C ,
w zestawieniu do asemblera , po raz pierwszy jestem mile zaskoczony , różnica
między szybko napisanym kodem w .asm a implementacją w C wynosi zaledwie dwa cykle zegara na korzyść
asemblera w stosunku do C {266/264 cykle dla wykonania bez żadnego aktywnego timera }
oraz również dwa cykle na korzyść asemblera dodatkowo na każdy aktywny-zliczany w danej chwili trimer
{14/12 cykli dodatkowo na każdy aktywny timer( te dwa cykle tutaj to już nieco więcej bo ~15%}
Uwaga : timer posiada "na zewnątrz" oprócz liczników dwa 16 bitowe słowa stanu :
Tm_Off - którego ustawione bity od b0 do b15 wskazują przez jeden cykl , który timer zakończył liczenie
Tm_ON - którego ustawione bity od b0 do b15 wskazują timery których stan jest różny od zera - jeszcze liczą

Zamiarem było stworzenie szybkiego wzorca ,który umożliwia dołączenie niezależnej obsługi dla każdego timera
w osobnym przerwaniu wymuszonym programowo , po kolei lub osobno.
Zawsze znajdzie się niewykorzystane przerwanie sprzętowe , pod które można podwiesić obsługę "wyliczonych "
timerów . Użycie osobnych przerwań ułatwia unikanie długotrwałego blokowania przerwań o wyższym priorytecie.
Jeśli komuś się przyda , bardzo proszę ,
Jako początkujący jestem gotów na każde gromy i uwagi ,
Dziękuję J.P.
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: 4 mar 2013, o 23:06 
Offline
Moderator
Avatar użytkownika

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

Tak to jeszcze inne ale równie ciekawe podejście i zresztą bardzo cenne - do tworzenia tzw "timerów programowych" ;)

Widzę że kolega jeszcze wciąż stara się porównywać C do asemblera - ale jak widzi kolega - szybko się okaże, że w 99% przypadków będzie można się tego pozbyć, i zająć się już tylko czystym i wygodnym programowaniem w C - bo dobrze sobie radzi z translacją na asemblera ;)

_________________
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: 4 mar 2013, o 23:41 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Dzięki,
Ale w nauce o to właśnie chodzi aby próbować różnego podejścia ,
bo z czasem z pewnością znajdą się jakieś ,może tylko ogólne reguły,
ale zawsze sugerujące mniej i bardziej wydajne sposoby zapisu funkcji,
aby uzyskać podobny efekt , ale za niższą cenę...
dlatego nie obiecuję jeszcze długo" weryfikacji asemblerowej".
Teraz zamierzam wypraktykować jak zmusić C do użycia np. takiego
najszybszego wyboru czy i jaką obsługę wykonać:
jakaś tablica wskaźników do funkcji {po kolei po 16 bitów , obsługa zakończenia zliczania Timera0, Timera1...Timera15}

a. ładujemy tablicę wskaźników do obsługi np. Tm_Service[16]
b. Ładujemy słowo stanu np. Tm_Off -- te które właśnie zakończyły zliczanie
c . banalny kod w asemblerze zużyje kilkanaście do 30 cykli
np. lds r16,Tm_Off // Low byte stanu zakończonego zliczania
sbrc r16,0
call(rcall) Tm_Service[Timer0]
sbrc r16,1
call (rcall) Tm_Service[Timer1]

i tak do ostatniego timera z przeładowaniem r16 na górny bajt słowa stanu po sprawdzeniu pierwszych ośmiu
oczywiście dodam jeszcze sprawdzenie iż wskaźnik nie jest zerowy, choć w zdefiniowanym już zakresie używania można po prostu wybrać tylko te które posiadają obsługę, chyba że zaszalejemy ze zróżnicowaną przez kontekst obslugą ,
no to nie da się oszczedzić tych paru cykli na sprawdzenie wskaźnika :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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