Herunterladen Inhalt Inhalt Diese Seite drucken

Beispiel Eines Mappings; Out.controlword = 1; U08 Tmpvar = In.statusword; Inout.modeofoperation = Tmpvar; Systemcalls Im Nanoj-Programm; Zugriff Auf Das Objektverzeichnis - Nanotec C5-E serie Technisches Handbuch

Vorschau ausblenden Andere Handbücher für C5-E serie:
Inhaltsverzeichnis

Werbung

Technisches Handbuch C5-E (EtherNet/IP, USB)
9 Programmierung mit NanoJ

9.2.2 Beispiel eines Mappings

Beispiel eines Mappings und der zugehörigen Variablenzugriffe:
map U16 controlWord as output 0x6040:00
map U08 statusWord as input 0x6041:00
map U08 modeOfOperation as inout 0x6060:00
#include "wrapper.h"
void user()
{
[...]
Out.controlWord = 1;
U08 tmpVar = In.statusword;
InOut.modeOfOperation = tmpVar;
[...]
}
9.2.3 Möglicher Fehler bei od_write()
Eine mögliche Fehlerquelle ist ein schreibender Zugriff mittels der Funktion od_write() (siehe
Systemcalls im NanoJ-Programm) auf ein Objekt im Objektverzeichnis, welches gleichzeitig als
Mapping angelegt wurde. Nachfolgend aufgelisteter Code ist fehlerhaft:
map U16 controlWord as output 0x6040:00
#include " wrapper.h"
void user()
{
[...]
Out.controlWord = 1;
[...]
od_write(0x6040, 0x00, 5 ); // der Wert wird durch das Mapping
überschrieben
[...]
}
Die Zeile mit dem Befehl od_write(0x6040, 0x00, 5 ); ist wirkungslos. Wie in der Einleitung
beschrieben, werden alle Mappings am Ende jeder Millisekunde in das Objektverzeichnis kopiert.
Damit ergibt sich folgender Ablauf:
1. Die Funktion od_write schreibt den Wert 5 in das Objekt 6040
2. Am Ende des 1 ms-Zyklus wird das Mapping geschrieben, welches ebenfalls das Objekt 6040
beschreibt, allerdings mit dem Wert 1.
3. Somit wird - aus Sicht des Benutzers - der od_write-Befehl wirkungslos.

9.3 Systemcalls im NanoJ-Programm

Mit Systemcalls ist es möglich, in der Firmware eingebaute Funktionen direkt aus einem
Benutzerprogramm aufzurufen. Eine direkte Code-Ausführung ist nur in dem geschützten Bereich der
Sandbox möglich und wird über sogenannte Cortex-Supervisor-Calls (Svc Calls) realisiert. Dabei wird
mit dem Aufruf der Funktion ein Interrupt ausgelöst und die Firmware hat so die Möglichkeit, temporär
eine Code-Ausführung außerhalb der Sandbox zuzulassen. Der Entwickler des Benutzerprogramms
muss sich jedoch um diesen Mechanismus nicht kümmern - für ihn sind die Systemcalls wie ganz
normale C-Funktionen aufrufbar. Lediglich die Datei wrapper.h muss - wie üblich - eingebunden
werden.

9.3.1 Zugriff auf das Objektverzeichnis

void od_write (U32 index, U32 subindex, U32 value)
Diese Funktion schreibt den übergebenen Wert an die angegebene Stelle in das Objektverzeichnis.
Version: 1.0.0 / FIR-v1748
:00
.
h
h
:00
h
h
129

Werbung

Inhaltsverzeichnis
loading

Diese Anleitung auch für:

C5-e-1-11C5-e-2-11

Inhaltsverzeichnis