Ja myślę, że chyba nie uda się tego zrobić przy obecnej ogólnej koncepcji programu, o ile w ogóle się da.
Jest szereg problemów, których pewnie w tej chwili nie dostrzegasz, ale prędzej czy później one wyjdą na światło dzienne
Przykładowo ilość zboczy. Poszczególne cyfry różnią się ilością zboczy. Jeśli jakaś cyfra się zmieni, a przedtem do tablicy zapisane było więcej zboczy niż jest ich po zmianie, to w tablicy pozostaną "śmieci" po przedniej cyfrze. Aby tego uniknąć, trzeba byłoby zerować tablicę po każdym cyklu, a na to potrzebny jest dodatkowy czas. Nawet, jeśli nie będziesz robił tego w przerwaniu, mikrokontroler musi zdążyć to zrobić przed zapisaniem nowych danych, a jak będzie tak dużo czasu spędzał na obsłudze przerwań, to może być z tym kłopot, tym bardziej, że przed wyzerowaniem musi coś z tymi danymi zrobić (przeanalizować lub przynajmniej przesłać gdzieś do analizy).
Inny przykład - identyfikacja ramki/cyfry.
AKSELINEK napisał(a):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pomijam już fakt, że wywoływanie funkcji w czasie obsługi przerwań jest nieekonomiczne czasowo (o czym już pisał wcześniej kolega
rskup), a procedura obsługi przerwania powinna być jak najkrótsza (tym bardziej, że tu masz do dyspozycji tylko 55 taktów, a to naprawdę niewiele, jak na zdania, które chcesz wykonać). Zresztą skoro funkcja
RAMKA() posiada tylko jedną instrukcję(?) - zerowanie zmiennej
ramka - to po co tak kombinować.
Bardziej chodzi mi o to, że jeśli w pewnym momencie wyzerujesz zmienną ramka, to co z poprzednimi zboczami (gdy
L było równe 0, 1 lub 2), które były zapisane do innej tablicy, kiedy zmienna
ramka miała inną wartość?
Nie wiem, co dokładnie próbujesz osiągnąć, więc trudno mi się tutaj szczegółowo określić, jakie ewentualnie inne problemy mogą wystąpić. Myślę jednak, że najlepszym rozwiązaniem byłoby w procedurze obsługi przerwania skoncentrować się tylko i wyłącznie na zapisywaniu danych do tablicy (oczywiście kod musi być jak najbardziej optymalny), a inne rzeczy, jak np. wyżej wymieniona identyfikacja cyfry, można zrobić w programie głównym (wtedy może uda się zdążyć przed następnym zboczem). Między cyframi jest trochę czasu (ok. 3000 taktów), który można przeznaczyć na analizowanie.
Tutaj trudno dać jakąś jedną prostą "złotą radę" (czy nawet kilka), która spowoduje, że Twój program zacznie działać zgodnie z Twoimi oczekiwaniami. Prawdopodobnie wykonanie tego, co chcesz wykonać, jest możliwe, jednak to wymaga dobrego planu. Nie wiem, czy przy Twoim stopniu zaawansowania (napisałeś, że jesteś początkujący) nie jest to zbyt ambitny projekt, a pomoc na forum musiałaby być zbyt obszerna i "całościowa", bo tak jak już napisałem, według mnie to nie jest tylko kwestia optymalizacji procedury obsługi przerwania. Niewykluczone, że ktoś się podejmie, bo ja niestety nie znajdę chyba tyle czasu (choć nie wykluczam, że jeszcze się włączę do dyskusji w tym wątku)
Życzę powodzenia.