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
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.

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
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ą volatile


@Scallar Rozwiazanie ze zmienna zadziala ale pamietaj o 2 rzeczach, wyrazenia obslugujace zmienna musza byc koniecznie atomiczne inaczej wyjda bzdury. Druga rzecz jest taka ze procesor dalej bedzie caly czas sprawdzal wartosc
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 operacji
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;
interrupt
count = 0;

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

A tak poza tym to

korzysta z Arduino a wy tu wylatujecie
@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 mogłoby powodować problemy ze zliczeniem.

Czyli RTOS jest be i trudny (bo
@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 nie