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 PD2-C Technisches Handbuch

Vorschau ausblenden Andere Handbücher für PD2-C:
Inhaltsverzeichnis

Werbung

8 Programmierung mit NanoJ

8.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;
[...]
}
8.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) 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.

8.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.2.0 / FIR-v2139
:00
.
h
h
:00
h
h
113

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis