Wpis z mikrobloga

Kodzę w tym arduino ide.
Da się jakoś w loop() czekać na przerwanie ?
Chcę wysyłać szit jak nastąpi zmiana stanu GPIO ale nie chcę żeby CPU ciągle sprawdzało jakąś zmienną volatile.
Wysyłanie w funkcji do obsługi przerwania odpada ze względów oczywistych.

#esp8266 #arduino #embedded #arduinoide
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Wykop Mobilny (Android)
  • 0
@Scallar: jeśli nie chcesz ani czekać na flagę ani wysyłać z przerwania to musisz użyć RTOSa i wybudzać z poziomu przerwania wątek, który ci wyśle dane.

  • Odpowiedz
via Wykop Mobilny (Android)
  • 6
@Scallar: może zaraz linuxa musi postawić ( ͡° ͜ʖ ͡°) Zrób w obsłudze przerwania zmienną pomocniczą a w pętli loop sprawdzaj czy się zmieniła, obsłuż przerwanie i zresetuj zmienną. Btw w uproszczeniu RTOS robi to samo tylko systemowo. Jeśli to wysyłanie jest na jakimś nowszym procku możesz spróbować zrobić to przetrwaniu po DMA
  • Odpowiedz
Jeśli to wysyłanie jest na jakimś nowszym procku możesz spróbować zrobić to przetrwaniu po DMA


@Dirrack: Nie szedl bym ta droga.

chcę wysyłać szit jak nastąpi zmiana stanu GPIO ale nie chcę żeby CPU ciągle sprawdzało jakąś zmienną
  • Odpowiedz
via Wykop Mobilny (Android)
  • 2
@JohnReese: fajnie, że się podzieliłes opinią ale powiedz może czemu? Nie jest znany protokół ani warstwa sprzętowa, czasem jest to bardzo efektywne rozwiązanie jeśli jest zrobione mądrze.

Atomowe, a nie atomiczne swoją drogą. Nie rozumiem tylko po co te atomowe operacje? Jeśli przyjdzie kolejne przerwanie i wywoła się kolejne to w zależności od mechanizmu albo poprzednie będzie przerwane albo to odrzucone. Tak czy siak będzie dobrze póki nie robi złożonych
  • Odpowiedz
Nie rozumiem tylko po co te atomowe operacje?


@Dirrack: Zalozmy na przyklad ze w obsludze przerwan zliczasz przerwania a w loop wykonujesz kod tyle razy ile bylo przerwan wiec najpierw przepisujesz wartosc zmiennej a potem zerujesz ja:

x = interruptcount;
  • Odpowiedz
@JohnReese: widzę, że wiesz, że dzwoni ale nie wiesz, w którym kościele ( ͡° ͜ʖ ͡°)

Jesli dojdzie do przerwania pomiedzy tymi linijkami kodu to program to przerwanie calkowice zignoruje.


No właśnie zignoruje zawsze, niezależnie od tego czy są to operacje atomowe czy nie. Rzeczywiście, gdyby liczył i dekrementował licznik miało by to znaczenie i
  • Odpowiedz
@Dirrack:

No właśnie zignoruje zawsze, niezależnie od tego czy są to operacje atomowe czy nie. Rzeczywiście, gdyby liczył i dekrementował licznik miało by to znaczenie i mogłoby powodować problemy ze zliczeniem.


Nie twierdze ze autor cos takiego robi tylko podalem przyklad o co mi chodzilo. Popraw mnie jesli sie myle ale gdyby obie linijki mozna bylo wykonac jedna instrukcja to problem by nie istnial. Porblem jest taki ze tak sie
  • Odpowiedz