Hoe tegelijkertijd drie functies uitvoeren?

Hoe drie functies te implementeren, die tegelijkertijd kunnen uitvoeren (functie van willekeurige invoervariabelen)?

1
Dat kan niet. Een Arduino doet maar één ding tegelijk. De truc is om je programma te schrijven, zodat het je functies samenvoegt.
toegevoegd de auteur Majenko, de bron
Zie mijn bericht over Meerdere dingen tegelijkertijd doen
toegevoegd de auteur Nick Gammon, de bron

5 antwoord

U kunt drie functies implementeren, maar u kunt ze niet tegelijkertijd uitvoeren.

6
toegevoegd

Geen enkele processor kan meer dan één ding tegelijk doen. Het beste waarop je kunt hopen, is dat elke functie slechts een korte tijd draait en de processor naar de volgende geeft, waardoor de illusie ontstaat dat er meer dan één ding tegelijk gebeurt. Dit wordt multi-tasking of multi-threading genoemd.

Er zijn enkele bibliotheken die dit voor de Arduino doen (zoek "RTOS Arduino" of "Arduino multitasking"), of je kunt elke functie schrijven volgens de principes van Finite State Machine programmeren om hetzelfde effect te bereiken .

5
toegevoegd

Hoe kunnen drie functies worden geïmplementeerd die in dezelfde tijd kunnen worden uitgevoerd (functie van willekeurige invoervariabelen)?

Micro-controllers zoals de AVR die op Arduino-boards wordt gebruikt, hebben slechts één verwerkingskern, maar er zijn veel hardwaremodules (ADC, UART, SPI, TWI, timers, enz.). Met behulp van deze is het mogelijk om verschillende "functies" tegelijkertijd te bereiken, d.w.z. zuivere concurrency.

Enkele voorbeelden, in afwachting van ...

  1. ADC (analoogRead) er zijn meer dan 100 cycli
  2. SPI (spi.transfer) er zijn 16 cycli
  3. UART (Serieel) is eigenlijk al bestand tegen buffering en ISR's.
  4. Hetzelfde geldt voor I2C (twi).

Deze cycli kunnen worden gebruikt voor het verscherven van verschillende functies of voor het verbeteren van de prestaties (bijvoorbeeld vooraf ophalen, pijplijnvoering).

Een ander voorbeeld; bij gebruik van directe poortuitlezing is het mogelijk om de status van meerdere pinnen tegelijkertijd te lezen.

Met eenvoudige samenwerkende multi-tasking is het mogelijk om context te schakelen tussen verschillende functies (taken) op vertraging of opbrengst. Dit kan gedaan worden met een planner .

4
toegevoegd

Hoe kunnen drie functies worden geïmplementeerd die in dezelfde tijd kunnen worden uitgevoerd (functie van willekeurige invoervariabelen)?

heb drie executives/Arduinos, één voor elke functie.

3
toegevoegd

Als het resultaat van elke functie kan worden uitgedrukt als een enkele byte (dat wil zeggen een geheel getal tussen 0 en 255), kunt u:

  • Verbind 3 schuifregisters (bijvoorbeeld 74595 ic) met 3 pinnen op uw Arduino
  • Wijs één pin toe aan elke functie
  • Gebruik de shiftOut-functie om het resultaat van elke functie één bit tegelijk uit te voeren op de bijbehorende pin
  • Gebruik een 4de pin verbonden met alle 3 de schuifregisters als een gemeenschappelijke latch - wanneer deze pin HOOG is ingesteld, zullen de outputs van de 3 schuifregisters allemaal tegelijkertijd veranderen.
3
toegevoegd
Of zet de drie SR's in serie, met 2 pinnen minder
toegevoegd de auteur Martin C. Martin, de bron