Deklaration des Mappings
Die Deklaration des Mappings gliedert sich dabei folgendermaßen:
map <TYPE> <NAME> as <input|output|inout> <INDEX>:<SUBINDEX>
Dabei gilt:
<TYPE>
•
Der Datentyp der Variable, also U32, U16, U08, S32, S16 oder S08.
<NAME>
•
Der Name der Variable, wie sie später im Benutzerprogramm verwendet wird.
<input|output|inout>
•
Die Schreib- und Leseberechtigung einer Variable: Eine Variable kann entweder als input, output
oder inout deklariert werden. Damit wird festgelegt, ob eine Variable lesbar (input), schreibbar
(output) oder beides ist (inout) und über welche Struktur sie im Programm angesprochen werden
muss.
<INDEX>:<SUBINDEX>
•
Index und Subindex des zu mappenden Objektes im Objektverzeichnis.
Jede deklarierte Variable wird im Benutzerprogramm über eine der drei Strukturen "In", "Out" oder
"InOut" angesprochen, je nach definierter Schreib- und Leserichtung.
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;
[...]
}
Eventuelle Fehlerquelle
Eine mögliche Fehlerquelle ist ein schreibender Zugriff mittels der Funktion od_write() 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
[...]
}
Version 1.1.7 / 10.09.2014 / FIR-v1436
HandbuchPD4-C (USB)
10 Programmierung mit NanoJ
59