Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

"pomiar" obciążenia procesora...

Awatar użytkownika
tasza
-
-
Posty:456
Rejestracja:17 sty 2005, o 10:52
"pomiar" obciążenia procesora...

Postautor: tasza » 17 sty 2005, o 11:50

cześć,
zagadka jak w temacie...
jak oszacować, czy wręcz zmierzyć, ile czasu
procesor spędza w handlerze przerwania?
wymyśliłam sobie tak:
zakładając że działa jeden int np. od timer_0
możnaby na początku ustawić wolny bit jakiegoś portu
a na koniec funkcji obsługi go skasować,
np.

Kod: Zaznacz cały

SIGNAL ( SIG_OVERFLOW0 ) { sbi ( port, bit ); //... // tu kod obsługi // .. cbi ( port, bit ); } int main (void) { while ( 1 ) { // tu pętla główna } }
na oscyloskopie będzie przebieg prostokątny
a jego współczynnik wypełnienia ( Th / T ) to byłoby to...
tylko co zrobić jak działają dwa timery? :o
ma ktoś z Was jakieś przemyślenia w tej materii?

i miłej reszty dnia
tasza

Awatar użytkownika
jaglarz
-
-
Posty:47
Rejestracja:14 gru 2004, o 17:20
Lokalizacja:Kraków
Kontaktowanie:

Postautor: jaglarz » 17 sty 2005, o 12:27

Drugim Timerem "steruj" inny bit portu. Mnie się zdarzało dawniej że obsługi przerwania zachodziły na siebie czyli jedno przerwanie nie zdążyło się skończyć a zaczęło się już drugie i program szedł w "maliny". Nie było wtedy takich wynalazków jak Bascom.

Awatar użytkownika
tasza
-
-
Posty:456
Rejestracja:17 sty 2005, o 10:52

Postautor: tasza » 17 sty 2005, o 12:48

to czy przerwania mogą na siebie zachodzić czy nie
to mam SIGNAL / INTERRUPT,
mnie chodzi o to ile ogólnie czasu spędza procek
w handlerach przerwań, czyli mówiąc po prostu
czy obsługa przerwań zbytnio nie "przydusza" programu głównego
stąd ten wolny bicik - to taki indykator kiedy procek bierze się za obsługę
przerwania i kiedy ją kończy. dla jednego int-a to jest proste, ale już dla dwóch
robi się kłopot...

tdolata
-
-
Posty:18
Rejestracja:6 gru 2004, o 10:56
Lokalizacja:Poznań

Postautor: tdolata » 19 sty 2005, o 14:20

A gdyby tam do pomiaru obciążenia użyć 3 timera (oczywiście o ile ci jakiś został :). Brzmi to bez sensu, ale...
Na początku programu włączamy timer3 z dzielnikiem 1, ale nie włączamy dla niego przerwań, tworzymy 3 zmienne long do przechowywania wyników. Na początku przerwania czytamy licznik timera3 i dodajemy do zmiennej1, zerujemy timer3. Na końcu przerwania czytamy timer3, dodajemy do zmienne2 i zerujemy timer. W drugim przerwaniu tak samo.
W wyniku otrzymamy: w zmiennej1 - obciążenie procesora dla pętli głównej; w zniennej2 i 3 - obciążenie dla przerwań.

Niezbyt to eleganckie, ale za to dość pewne i daje obciążenie procesora w % bez pomocy zewnętrznego sprzętu.

Do minusów tego pomysłu należy zaliczyć:
- możliwość przekręcenia licznika timer3
- dodatkowe obciążenie prosesora arytmetyką 32 lub 64bit
- konieczność okresowego kasowania zmiennych1, 2, 3, aby nie doszło do przepełnienia

Awatar użytkownika
tasza
-
-
Posty:456
Rejestracja:17 sty 2005, o 10:52

Postautor: tasza » 19 sty 2005, o 15:31

no i trzeba mieć ten trzeci timer...
ale to co napisałeś brzmi ciekawie
dzięki!
tasza

Awatar użytkownika
gawel
-
-
Posty:683
Rejestracja:24 lis 2003, o 11:19
Lokalizacja:Białystok

Postautor: gawel » 22 sty 2005, o 23:26

Tasza, a do czego jest to ci potrzebne?

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości