@Hexmage960, post #1
@mschulz, post #2
Przy obsludze przerwania nie masz prawa uzywac semaforow.
@Hexmage960, post #3
Jednak zauważ, że jeśli handlery input.device są wywoływane w przerwaniu, to nie muszę stosować semaforów w ogóle, bo kod przerwania wykonywany jest w całości przez procesor.
@mschulz, post #4
indeks A = 0; Pierwsze nieodczytane miejsce w ringbufferze indeks B = 0; Liczba wczytanych znaków w ringbufferze indeks C = 0; Aktualna kopia B. semafor K = 0; Znacznik wykonania kopii tablicy/aktualizacji liczników
@Hexmage960, post #5
Chyba jest OK.
1. Jezeli kilka taskow moze korzystac z jednej struktury danych w tym samym czasie, uzyj semaforow. Handlery z input device do tej kategorii sie na 99.99% zaliczaja
2. Jezeli jeden lub kilka taskow oraz kod w trybie supervisor moze korzystac z jednej struktury w tym samym czasie, uzyj Disable()/Enable().
@Hexmage960, post #5
Możemy zrobić tak:
@mschulz, post #6
@Hexmage960, post #8
Hej, ale nie ustaliliśmy jeszcze, czy handler input.device jest wywoływany w przerwaniu.
Stąd nie wiadomo, czy Enable/Disable zadziała.
@mschulz, post #9
Jak juz powiedzialem jestem na 99.9% pewien ze handlery z input device nie sa wolane w przerwaniu tylko z poziomu tasku input.device. tego z dosc wysokim priorytetem.
@Hexmage960, post #10
@Hexmage960, post #11
@Hexmage960, post #12