FAQ: RoboPro

Prozesseinstellungen im Eigenschaftsfenster:

Anders als LLWin arbeitet ROBOPro wie übliche prozedurale Programmiersprachen (zum Beispiel C++ oder Pascal) und benötigt für jeden laufenden Prozess einen so genannten Stackspeicher. Man kann in ROBOPro nur so viele Prozesse gleichzeitig laufen lassen, wie Stackspeicher vorhanden sind. Da die Stackspeicher viel Speicherplatz benötigen kann es insbesondere im Downloadmodus eng werden, da dort nur etwa 40kByte Speicher für Stacks vom Prozessor adressiert werden können.

Normalerweise legt ROBOPro 5 Stacks an, so dass 5 Prozesse gleichzeitig laufen können. Die Standardgröße der Stacks beträgt 4kByte im Downloadmodus und 64kByte im Onlinemodus. Im Downloadmodus wird durch die Stacks mit 5x4kByte die Hälfte des für Stacks und Variablen adressierbaren RAMs verbraucht.

Wenn man mehr als 5 Prozesse gleichzeitig laufen lassen möchte, muss man die “Mindestzahl Prozesse” im Eigenschaftsfenster eines Unterprogramms vergrößern. Es spielt dabei keine Rolle in welchem Unterprogramm man die Einstellung vornimmt. ROBOPro verwendet den Maximalwert der “Mindestanzahl Prozesse” von allen Unterprogrammen. Auf diese Weise kann man Bibliotheksunterprogrammen, die sehr viele Prozesse erzeugen, bereits eine geeignete “Mindestzahl Prozesse” mitgeben.

Die Einstellung “Zusätzliche Prozesse” ist nur für Bibliotheksunterprogramme gedacht, die globale Prozesse anlegen, die auch laufen, wenn das Unterprogramm selbst gar nicht ausgeführt wird. Die Summe der “Zusätzlichen Prozesse” aller Unterprogramme wird zum Maximalwert der “Mindestzahl Prozesse” hinzugezählt um die benötigte Anzahl von Prozessen zu ermitteln.

Ein Beispiel:

Hauptprogramm
Mindestzahl. Prozesse: 7
Zusätzliche. Prozesse: 0

Unterprogramm.A.
Mindestzahl. Prozesse: 5
Mindestzahl. Prozesse: 2

Unterprogramm.B.
Mindestzahl. Prozesse: 5
Zusätzliche. Prozesse: 1

Maximalwert= 7
Summe= 3

In diesem Beispiel werden insgesamt 7+3=10 Stacks angelegt, so dass maximal 10 Prozesse gleichzeitig laufen können.

Wie viele Prozesse gleichzeitig laufen kann erst festgestellt werden, wenn das Programm läuft. Im Onlinemodus erhält man eine entsprechende Fehlermeldung, wenn die Anzahl an Prozessen zu klein ist. Im Downloadmodus bricht das Programm ab und die rote Error Lampe blinkt 1-mal, wenn ein Prozess gestartet werden soll, aber kein Stack mehr frei ist.

Da im Downloadmodus der Speicher für Stacks und Variablen nur 40kByte beträgt, wird es im Downloadmodus mit 10 Stacks zu je 4kByte schon sehr eng. Die meisten Programme benötigen jedoch nicht so viel Stackspeicher. In den meisten Fällen reichen auch 2kByte Stackspeicher pro Prozess aus. Wie viel Stackspeicher benötigt wird kann erst festgestellt werden, wenn das Programm läuft. Im Onlinemodus erhält man eine entsprechende Fehlermeldung, wenn der Stack zu klein ist. Im Downloadmodus bricht das Programm ab und die Errorlampe blinkt 2-mal wenn der Stackspeicher zu klein ist.

Die Größe des Stackspeichers kann man im Eigenschaftsfenster für den Online- und den Downloadmodus getrennt einstellen. Die Stackgröße im Onlinemodus wird man in der Regel bei 64kByte belassen, außer man möchte Programme mit tief rekursiven Funktionen oder großen lokalen Listen laufen lassen. Die Größe des Stackspeichers im Downloadmodus kann man verkleinern, wenn man viele Prozesse benötigt (das Minimum sind etwa 1280 Bytes) oder für komplexe rekursive Funktionen auch vergrößern.

Mindestspeicher pro Prozess (download) = Stackgröße im Download Modus Mindestspeicher pro Prozess (online) = Stackgröße im Online Modus

Initialisierung von globalen Variablen und Listen

Nachdem alle globalen Variablen oder Listen mit gleichen Namen sich auf dieselbe Variable oder Liste beziehen, kann man nur einen Initialisierungswert angeben. Daher werden die Initialisierungswerte an alle gleichnamigen und gleichartigen Elemente automatisch übertragen, wenn man Initialisierungseigenschaften für globale Variablen oder Listen ändert.

Gibt es bei der Anzahl der Timer eine Limitierung ?

Nein. Jeder Timer hängt sich in eine seiner Zeitauflösung entsprechende Eventwarteschlange ein. Die größe dieser Warteschlangen ist nur durch den zur Verfügung stehenden Speicher begrenzt. Es können also ziemlich viele Timervariablen angelegt werden.

Wie viel Speicher steht für Arrays zur Verfügung ?

Bisher nutzen die Arrays, Variablen und Stacks zusammen den direkt 16-bit addressierbaren Speicherbereich. Davon läßt die Firmware etwa 40kByte übrig. In der Regel werden 20kByte mit Stacks belegt, so dass nur 20 kByte übrig bleiben. Es ist jedoch geplant die Arraydaten zumindest von gloabeln Arrays auch in den erweiterten RAM legen zu können, so daß praktisch der ganze RAM (256 kByte) zur Verfügung steht. (Bei RAM Programmen gehen noch 64kByte für das Programm ab, bei Flash Programmen nicht).

Im Onlinemodus steht für globale Arrays der gesamte Speicher des PC zur Verfügung.

Kann man .csv Dateien in mehreren Stücken laden ?

Nein, dass ist nicht möglich. Das Array wird mit den Daten aus der .csv Datei initialisiert. Die .csv Datei wird sozusagen nicht vom Programm, sondern vom Compiler gelesen und in Initialsierungen umgewandelt. Das ist notwendig, da die .csv Initialisierung ja auch im Download Modus funktionieren muss.

Demnächst wird es aber möglich sein, die serielle Schnittstelle des Interface vom Programm aus anzusprechen und so das Programm mit Daten zu versorgen, bzw Daten vom Interface an den PC zu senden.


Erstellt von Christopher Wecht (ffcoe).
Hochgeladen von ffcoe am 8.7.2007.

Hinweis: Wir vertrauen auf die Sachkunde und Sorgfalt unserer Nutzer. Trotzdem könnten sich Fehler eingeschlichen haben. Eine Haftung für die Richtigkeit der Inhalte können wir nicht übernehmen.