Herunterladen Inhalt Inhalt Diese Seite drucken

Beispiel Eines Mappings; Out.controlword = 1; U16 Tmpvar = In.statusword; Inout.modeofoperation = Tmpvar; Nanoj-Funktionen Im Nanoj-Programm - Nanotec N5 Technisches Handbuch

Vorschau ausblenden Andere Handbücher für N5:
Inhaltsverzeichnis

Werbung

9 Programmierung mit NanoJ

9.2.2 Beispiel eines Mappings

Beispiel eines Mappings und der zugehörigen Variablenzugriffe:
// 6040
:00
is UNSIGNED16
h
h
map U16 controlWord as output 0x6040:00
// 6041
:00
is UNSIGNED16
h
h
map U16 statusWord as input 0x6041:00
// 6060
:00
is SIGNED08 (INTEGER8)
h
h
map S08 modeOfOperation as inout 0x6060:00
#include "wrapper.h"
void user()
{
[...]
Out.controlWord = 1;
U16 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 NanoJ-
Funktionen im NanoJ-Programm
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 NanoJ-Funktionen im NanoJ-Programm

Mit NanoJ-Funktionen 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
geschützten Ausführungsumgebung 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 geschützten Ausführungsumgebung zuzulassen.
Der Entwickler des Benutzerprogramms muss sich jedoch um diesen Mechanismus nicht kümmern - für ihn
sind die NanoJ-Funktionen wie ganz normale C-Funktionen aufrufbar. Lediglich die Datei wrapper.h muss -
wie üblich - eingebunden werden.
Version: 3.3.0 / FIR-v2213
) auf ein Objekt im Objektverzeichnis, welches gleichzeitig als Mapping
:00
.
h
h
:00
h
h
142

Werbung

Inhaltsverzeichnis
loading

Diese Anleitung auch für:

N5-1-4N5-2-4

Inhaltsverzeichnis