Grundlagen ( Parrallele code Abarbeitung) Anfängerfrage

Hallo,

was ihr da diskutiert, hat oben im englischen Forum jemand, der wohl der Entwickler der FAT-Library war, mit Bezug auf 32-Bit Controller angesprochen:
http://forum.arduino.cc/index.php?PHPSESSID=e1f6kgr8ae6vn2bh3824qvevk7&topic=253582.msg1804696#msg1804696

The Arduino system software is not adequate for these new chips. You really need priority based pre-emptive scheduling to take full advantage of the features of these chips. Most chip manufactures are now providing a free RTOS solution. ST and Atmel provide FreeRTOS ports, Freescale has MQX, and there are other great systems like ChibiOS.

Ja, es gibt reichlich Lösungen. Aber wohl keine fertigen für Arduino Sketch, das einzig scheint HaWes Problem zu sein. ChibiOS läuft laut Webseite auch auf dem Mega.

ja, danke, das gibt mir ja doch irgendwie Recht:
es geht, es wird sogar empfohlen, aber es geht offenbar nicht mit Sketch.

@serenify:
ich habe den Eindruck, du hast nicht verstanden, warum ich prempt. MT will, v.a. wann und wofür:

ich will es zunächst v.a. für größere Programme (ab Mega oder Due aufwärts, evtl. Tre), die vielschichtige Aufgaben in Echtzeit-Umgebungen leisten müssen, obwohl Einzel-Tasks teilweise viele hundert millis für eine Berechnung brauchen, u.U. sogar einige Sekunden bis Minuten:

  • z.B. eine Fast Fourier-Transformation eines "gehörten" Schallsignals samt Vergleich mit gespeicherten Schallmustern, z.B. für eine Spracherkennung mit Sprachsteuerung,
  • oder ein Neuronales Netz, das ein Muster lernt oder versucht wiederzuerkennen,
  • oder ein Astar, der im Hintergrund arbeitet um den kürzesten Weg in einer Labyrinth-Umgebung zu finden und damit den laufenden Roboter in "real-time" trotz frisch auftretender Hindernisse zu steuern
    (alle 3 Programme laufen z.B. auf meinen NXTs).

In allen diesen Fällen dürfen Sensor-Abfrage -und Motorsteuerung nicht behindert werden, und die laufende Odometrie und Navigation dürfen auch nicht behindert werden.

Für kleine Dinge komme ich mit meinem Uno und Timern zurecht , auch wenn es sehr umständlich in der Handhabung ist - ich wollte nur längerfristig aber auch die großen Programme auf Arduinos portieren.

Allerdings, wenn die Arduinos das können, besteht in diesen Arduino-Umgebungen überhaupt kein Grund, nicht auch für kleinere Projekte das absolut super-komfortable preempt. MT einzusetzen, denn es ist einfach nur praktisch, sicher, bewährt und absolut Klasse!

Also ich kann die Argumente beider Seiten verstehen.

Erstmal ist es richtig, auf 8-Bit Controllern macht man das traditionell anders als mit Threads. Und Arduinos sind primär (noch ?) 8-Bit Controller.

Aber es ist auch richtig, auf vielen 32-Bit Plattformen geht das eleganter. Ich komme von der C++ Programmierung auf "richtigen" Computern und gehe deshalb 8-Bit Spezialitäten nach Möglichkeit aus dem Wege.

Und es ist richtig, es gibt sehr einfache und intuitive Lösungen für Multithreading bei Microcontrollern.

Beispiel, bei denen hier
http://mbed.org/platforms/
legt man einfach ein Projekt an, geht dann auf diese Seite
http://mbed.org/handbook/RTOS
klickt "Import Library" und schon hat man Multithreading zur Verfügung (und etwa 4 kB Ram weniger).

Sowas wäre für den Due natürlich auch schön. Im Moment nehm ich halt was anderes, wenn ich das brauche. Aber das ist bei anderen Dingen wie z.B. CAN oder LIN auch so.

jep, exakt sowas suche ich auch - zunächst v.a. für den Mega, mit dem ich gerade kämpfe...

übrigens geht es mit pthread bei gpp C für Linux ganz genau so:

#include <pthread.h>

...und schon kann's losgehen!

(ok, ins makefile muss es auch noch rein, zum dynamischen Verlinken der pthread files: LDFLAGS= ... -lpthread)