Interrupt issue op arduino

Interrupt issue op arduino 

Onderwerp van Frits1956

BEHEERD DOOR:
rdolfijn

Dit onderwerp is gesloten.
door Frits1956 zelf op 19 augustus 2018 om 19:51:35

Terug naar de lijst
  1. Ik loop tegen een programmeer probleem aan en zoek een oplossing.
    Ik wil met een interrupt een poort uitlezen en navenante aktie ondernemen.
    Tot zover lukt het prima maar..... De interrupt zorgt er ook voor dat delay en/of millis funktie niet werkt terwijl ik iets dergelijks toch nodig heb. Iemand een oplossing/suggestie?
    Ik weet het het is zeer specifiek maar niet geschoten?.?.
  2. koen
    min x min = plus

    Toon alleen de berichten van koen
    ik heb geen specifieke ervaring met de arduino, maar bij een interrupt-driven software, geldt:

    bij opstarten (cold-boot)
    - intrerrupt routine laden
    - interrupt vector instellen
    - wachtrij aanmaken & initialiseren
    - interrupt activeren

    vervolgens in de interrupt-routine:
    - eerst interrupt deactiveren
    - gegevens uitlezen, opslaan in een wachtrij
    - interrupt weer activere
    - einde interrupt handler
    het devies bij een interrupt-routine is "get-in/get-out" en wel zo snel mogelijk!

    in een ander proces (wat loopt als er geen interruputs zijn af te handelen):
    - wachtrij uitlezen (first-in, first-out)
    - uitgelezen gegevens verwerken
    - doorgaan tot wachtrij leeg is
    mocht de wachtrij "overlopen" (gegevens komen te snel, of het verwerkingsproces loopt niet goed): een fout-afhandeling doen, bijv de nieuwste interrupts niet opslaan, danwel de oudste interrupts weggooien. Gebruik bij voorkeur een "circular buffer" als wachtrij.

    als de wachtrij leeg is, idle-processing, bijv
    - 100ms sleep
    - kijk er gegevens in de wachtrij zitten
    - loop to in het oneindige
    die "sleep" is belangrijk om niet in een "race-condition" te belanden, als de snelheid van reageren van de interrupt van belang is, kan je die eventueel verlagen naar 50 of 10 msec (of verhogen naar 500 of 1000 msec)

    als je dan in elk proces een led-je toggelt, kan je zien met welk proces je applicatie bezig is (ledje knippert of ledje is constant aan of uit)

    dit geldt voor een single-thread OS, als je gebruik maakt van een multi-user of multi-threading OS, kan je b/g functies ook in een andere thread onderbrengen. dan moet je er alleen voor zorgen dan de interrupt op een hogere prioriteit loopt dan het verwerkingsproces.
    19 aug '18 - 16:28:38 / 19 aug '18 - 16:47:46
  3. quote:
    Dit schreef koen
    ik heb geen specifieke ervaring met de arduino, maar bij een interrupt-driven software, geldt:

    vervolgens in de interrupt-routine:
    - eerst interrupt deactiveren
    - gegevens uitlezen, opslaan in een wachtrij
    - interrupt weer activere
    - einde interrupt handler
    het devies bij een interrupt-routine is "get-in/get-out" en wel zo snel mogelijk!




    Het ging uiteindelijk om dit stukje waarvan ik in de veronderstelling was dat dit juist niet mocht vanwege de timer.
    Dankzij jouw aanvullende uitleg en vertaling in gewoon ABN begrijp ik het volledige juiste gebruik.

    TNX!!!!!
Terug naar de lijst