Herunterladen Inhalt Inhalt Diese Seite drucken

Siemens RMOS3 Bedienungsanleitung Seite 62

Echtzeit-betriebssystem rmos3 rmos3 v3.50 benutzerhandbuch
Inhaltsverzeichnis
Praxisteil: Erstellen einer RMOS3-Task
6.2 Hinweise zum Programmieren und Laden von Tasks
Applikation als dynamische Task
Neben der oben erläuterten Methode kann mit Hilfe des CLI, des relocatiblen Taskladers
oder des Debuggers eine Task (in Form einer Datei) auch während der Laufzeit dynamisch
nachgeladen werden. Die nachgeladene Task kann nach ihrem Start wie eine statische Task
weitere dynamische Tasks erzeugen.
Für eine dynamische Task wird der TCD–Block erst durch einen Systemaufruf zur Laufzeit
angelegt, und durch einen weiteren Systemaufruf kann er wieder gelöscht werden. Dabei
wird auch die Task–ID vergeben bzw. freigegeben. Ansonsten unterscheiden sich
dynamische und statische Tasks nicht. Die Task kann über ihren Namen im Katalogeintrag
identifiziert und bezeichnet werden. Die Identifizierung einer Task über ihre ID ist aus
Kompatibilitätsgründen möglich.
Allgemeine Betrachtungen
Bei der Konfigurierung von Tasks sind einige Punkte zu beachten:
1. Beim Anlegen eines TCD in der Konfigurierung müssen alle Startdaten der statischen
2. Alle Hochsprachentasks müssen einen _FAR Einsprung besitzen. Die Einsprungstelle für
Stackgröße einer Task
Jede Task besitzt zur Laufzeit einen eigenen Stack. Die Größe dieses Stacks muss für jede
Task gesondert ermittelt und beim Funktionsaufruf
angegeben werden. Dies ist auch beim Kreieren von dynamischen Tasks zu beachten. Die
Größe eines Taskstacks errechnet sich aus vier Einflussgrößen:
1. Stackbedarf einer Task:
2. Stackbedarf des Betriebssystems pro Task:
3. Werden von der Task CRUN–Funktionen (z.B.
4. Zusätzlichen Stack für Interrupthandler im DI–Zustand. Maßgeblich ist der
62
Tasks definiert werden (Konstanten): die Einsprungstelle der Task, die Anfangswerte
bestimmter Register und die Werte, die die Priorität festlegen. Symbole, die zu diesen
Werten gehören, müssen während des Bindens zugänglich gemacht werden.
eine Task ist der Beginn einer PUBLIC–Prozedur. Es wird die Prozedur beim Taskstart
angesprungen, deren Name als UserTaskEntry im Funktionsaufruf angegeben ist. Beim
Start bekommt die Prozedur zwei uint–Parameter auf dem Stack übergeben, die optional
ausgewertet werden können. Die Parameter sind die Komponenten TCD.EAX und
TCD.EBX aus dem TCD–Block.
Der taskeigene Stackbedarf setzt sich zusammen aus dem Speicherbereich, der
erforderlich ist für den allgemeinen Gebrauch (automatische Variablen), den Aufruf von
Unterprogrammen und der Übergabe der Argumente. Die Bestimmung des Stackbedarfs
ist nicht trivial, wenn rekursive oder stark verschachtelte Unterprogrammaufrufe
verwendet werden. Ein zu klein dimensionierter Stack kann zu scheinbar unerklärlichen
Systemabstürzen führen. Auch ein Sicherheitszuschlag ist nicht verkehrt.
Wenn eine Zustandsänderung einer Task eintritt, rettet RMOS3 die Prozessorregister auf
dem taskeigenen Stack. Dafür werden 40 Byte benötigt.
KByte Stack benötigt.
Interrupthandler des Systems, der im DI–Zustand den größten Stack benötigt, denn im
DI–Zustand verwenden die Interrupthandler den aktuellen Taskstack.
bzw.
RcInitUserTask
RmCreateTaskEx
,
) benutzt, wird zusätzlich 4
printf
scanf
RMOS3 V3.50 Benutzerhandbuch
Bedienhandbuch, 07/2012, A5E03692290-01
Inhaltsverzeichnis
loading

Inhaltsverzeichnis