Multitasking Arduino?

  • Hallo,
    ich habe 2 Sketche für meinen Arduino, ich würde diese jetzt gerne miteinander vereinen,
    Das Problem ist dabei das der Arduino kein Multitasking unterstützt, ich habe mir schon verschiedenste Scheduler Büchereien angesehen und bin immer noch nicht schlauer wie ich diese 2 Sketche miteinander vereinen soll.
    Eines dieser Sketche wartet auf ein LOW Signal und verschickt daraufhin ein HTTP post.
    Das andere holt sich die Zeit von einem Zeitserver und versendet immer zur vollen Stunde ein HTTP post.
    Die Sketche funktionieren unabhängig voneinander ohne Probleme.
    Hat irgendwer von euch eine Idee wie ich da am besten rangehen kann um das Problem zu lösen?
    Vielen Dank im voraus ;):^^:

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • ist doch leicht, du hast ein loop,

    in dem loop

    loop()
    {
    zeit abholen;
    if volle Stunde
    HTTP senden
    if in = low
    HTTP senden
    }

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Petit_miner,



    Das Problem ist dabei das der Arduino kein Multitasking unterstützt

    Das ist soo nicht ganz korrekt. Es gibt einen User in diesemForum, der im vergangenen Monat in der Richtung etwas programmiert hat. Vielleicht äußert er sich dazu.

    Ansonsten funktioniert es so, wie Jar es angedeutet hat. Auf diese Weise kannst Du Hunderte von Sketches zusammen in eine loop() bringen, bis der Speicher voll läuft.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (2. März 2016 um 17:11)


  • Es gibt einen User in diesemForum, der im vergangenen Monat in der Richtung etwas programmiert hat. Vielleicht äußert er sich dazu.

    Andreas: Ok, Äußerung :)

    Ich hab' einen RTK für den Atmega 328 (Arduino Nano/Uno) in C++ programmiert. Multitasking geht, ein Mutex, Sleep, Suspend und Resume, Tickcount und ein wenig Stacküberwachung auch. Derzeit läuft der Scheduler nur in RR. Prioritäten fehlen noch, die muß ich noch implementieren. Der Footprint liegt bei etwa 3k Flash und 150 Byte RAM + Stacksize*#Task. Die minimale Stackgröße liegt bei 35 Byte (32 Register+SREG+Ret). Mit ein wenig Serial.print liegt man üblicherweise aber bei 150Byte/Task.

    petit_miner: Alles Weitere per PN.

  • Kurz und Knapp: Nein, ein Arduino kann kein Multitasking. Das hast du also korrekt recherchiert.

    Ein Arduino kann nur Sachen nacheinander abarbeiten. Es gibt zwar Pseudo-Multitasking Bibliotheken aber das ist kein echtes Multitasking sondern arbeitet die Sachen ebenfalls nacheinander ab, niemals parallel. Dabei realisiert man es so das man mithilfe von millis() prüft wann als nächstes etwas gesetzt werden soll und vermeidet so künstliche Verzögerungen, also auf keinen Fall delay() verwenden. Das sieht dann so aus als würde er es gleichzeitig abarbeitet, liegt dann aber nur daran das der loop ziemlich schnell rotiert. Ein anderer Ansatz wird beim Scheduler gemacht: schnelles hin und her switchen zwischen Tasks. Aber auch das ist keine echte Parallelisierung.

    Ich denke aber in Deinem Fall kannst du auf Multitasking verzichten und arbeitest einfach mit millis() , so wie es zB hier beschrieben wird: https://learn.adafruit.com/multi-tasking-…ll-together-now


    schnasseldag: Etwas weniger Fachchinesisch wäre lobenswert sodass es auch unge'stack'te verstehen :fies:

  • meigrafd: Nun, wer in der Lage ist, parallel zu programmiern, der versteht auch sicher meine Zeilen. Da mache ich mir keine Sorgen. Dennoch, danke für den freundlichen Hinweis. Über die Frage der Definition des Multitasking auf einem Single-Core Prozessors läßt sich natürlich trefflich debattieren - beim Raspbian bezeichnet man einen Kernel mit 100µs Latenz jedoch schon als RT. Mein Kernel ist jedenfalls ein preemptiver und landläufig bezeichnet man das glaube ich auch als "Multitasking". Die 100µs habe ich auch schon scheduled - bei 16MHz, nicht 800MHz versteht sich" :)
    Reentranz (bzw. Nicht-Reentranzfähigkeit) der Arduino-Bibliotheken ist natürlich ein anderes Thema...

  • meigrafd: Nun, wer in der Lage ist, parallel zu programmiern, der versteht auch sicher meine Zeilen.

    Da petit_miner höchst wahrscheinlich noch nicht parallel programmiert hat, da er sonst diese Frage nicht gestellt hätte, versteht er's also eher nicht. Weiter könnte man davon ausgehen das er jedes 3.Wort deines Beitrags nicht wirklich versteht, was vermutlich auch nur auf eine Handvoll von Personen die hier im Forum aktiv unterwegs sind, zutreffend wäre.

    Wieso du dann auch noch ein Geheimnis draus machst ("Alles Weitere per PN") finde ich aber auch strange.


  • ...
    Wieso du dann auch noch ein Geheimnis draus machst ("Alles Weitere per PN") finde ich aber auch strange.


    vielleicht weil das OT im Zusammenhang mit dem Raspi (und damit diesem Forum) ist und er zudem lästige Grundsatz-Debatten (die zudem eh nicht zielführend sind) vermeiden möchte? ;)
    cu,
    -ds-

  • Hallo Meigrafd,

    jeder Fachbereich nutzt seine eigene Fachsprache.

    Wenden Fachleute die in ihrem Fachbereich üblichen Termini technici an, dann werden sie in ihrem Fachbereich verstanden - nicht unbedingt auch akzeptiert.

    Mitglieder anderer Fachbereiche oder Außenstehende verstehen dann nur Bahnhof. Ich verstehe z.B. keinen Arztbericht, ich kann keinem Börsenanalysten folgen, wenn er sein Fach-Vokabular verwendet etc. Ich kann kein Verständnis aufbringen, dass Ansätze, die zu einer erfolgreichen Betriebswirtschaft führen, in einer Volkswirtschaft so zu versagen scheinen, dass sie gar nicht erst eingesetzt werden. ... ... ...

    Schnasseldag hat seinen Ansatz, der im übrigen funktioniert, in treffenden Worten beschrieben. Jeder, der sich damit auskennt, wird die Bedeutung seiner Aussagen problemlos verstehen. Wer den Aussagen nicht folgen kann, sollte sich mit den entsprechenden Grundlagen beschäftigen - wobei dies mangels breiter Masse in diesem speziellen Fachgebiet entsprechend schwieriger wird. Aber auch das ist ein anderes Thema - weit OT eines RPi-Forums.

    In einem meiner Icon-Tutorials bin ich auch mal in einem Teil auf die Parallel-Programmierung eingegangen. Dies ist in der Tat für Leute, die "konventionell" denken und programmieren, eine heftige Umstellung. Ein Erfolg ist dabei nie garantiert.

    Ich halte das Angebot von Schnasseldag, alles Weitere per PN zu klären, auch wesentlich sinnvoller, als dies in einem Thread am Rande zu erwähnen. Würden technische Details zur Umsetzung "verraten" werden, würden - da hast Du sicher Recht - vielleicht nur 5 User folgen und Anregungen geben können. Der Rest würde mit störenden Kommentaren jegliche Motivation abbauen, auch mal einen Beitrag auf deutlich höherem Niveau zu verfassen.

    Ich verstehe von Amibilight nichts, von Hyperion auch nichts. Solange das so bleibt, werde ich in keinem der zahllreichen Threads auch nur einen einzigen Kommentar ablassen. Aber Nichtwissen und Nichtwissenwollen ist für einige kein Hinderungsgrund, Threads mit bedeutendem Inhalt ins Sinnlose zu verkehren.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Leute Leute Leute... Langsam is doch mal gut.

    Ich hab das was schnasseldag durch aus verstanden also lasst endlich mal gut sein - oder möchte sich noch ein Fachsimpler darüber auslassen das ich um etwas weniger Fachchinesisch bat?


    ...komisch... immer die selben die sich auch dann noch mal äußern müssen obwohl bereits alles gesagt war... und dann auch noch so herablassend... als sei man mit dem wissen geboren worden und jeder andere der es erlernen wolle solle gefälligst wo anders um hilfe ersuchen... aber hey, lasst uns künstig sämtliche details nur noch per PN abhandeln, schließlich könnte es jemanden geben der mit den informationen überfordert wäre. und wer brauch schon ein "Elektronik -> Mikrocontroller" unterforum in einem PI forum, soll ps915 gefälligst wieder löschen, was fällt dem überhaupt ein sowas zu erstellen!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!