IOMaps

De Wikinxt-fr.

Aller à : Navigation, rechercher


Sommaire

[modifier] Qu'est-ce que c'est ?

IOMap est un diminutif pour Input/Output map addresses. Concrètement ce sont des adresses mémoires de la brique dédiés aux variables nécessaires pour le fonctionnement des entrées (capteurs) et des sorties (moteurs). Mais ce n'est pas tout, ils permettent aussi de contrôler :

Ces IOMaps s'utilisent de deux façons : l'écriture et la lecture. L'écriture d'une valeur dans une IOMap permet de contrôler facilement un paramètre de la brique. La lecture permet de récupérer tout aussi facilement la valeur de ce paramètre.

[modifier] Les avantages et inconvénients

[modifier] Les avantages

Very true! Makes a cahgne to see someone spell it out like that. :)

[modifier] Quand utiliser les IOMaps ?

L'utilisation des fonctions dédiés permet de remplir quasiment toutes les tâches voulus. Si l'on ne veut guère s'embêter et garder un code facilement intelligible il vaut mieux alors passer par elles.

Cependant il arrive que nous ayons besoin de récupérer rapidement certaines valeurs ou de les changer , ou par exemple de vérifier qu'un moteur tourne, qu'un capteur mesure ... Ces cas arrivent notamment si vous utiliser des codes multi-threads ou si vous avez un code qui doit s'exécuter depuis l'ordinateur. Dans ces cas, passer par les Iomaps permet de se simplifier la tâche.

[modifier] Les IOMaps en NXC

[modifier] Lire une IOMAP

Pour lire une IOMAP, il faut utiliser cette fonction : IOMA(const n)

Par exemple :

x = IOMA(InputIORawValue(S3));

Les adresses valides sont recensés dans le guide NXC (page 60).

Il existe aussi une fonction de bas niveau mais qui ouvre plus de possibilité :

SysIOMapRead(IOMapReadType & args)

IOMapReadArgs désigne ici une structure :
struct IOMapReadType { 
 char Result; 
 string ModuleName; 
 unsigned int Offset; 
 unsigned int Count; 
 byte Buffer[]; 
}; 

Par exemple :

IOMapReadType args; 
args.ModuleName = CommandModuleName; 
args.Offset = CommandOffsetTick; 
args.Count = 4; // this value happens to be 4 bytes long 
SysIOMapRead(args); 
if (args.Result == NO_ERR) { /* do something with data */ } 

Les liste des « offset » et les noms de modules sont disponibles dans le guide NXC.

Il existe aussi la fonction : SysIOMapReadByID(IOMapReadByIDType & args) La seule différence est que le module est désigné ici par son ID :

struct IOMapReadByIDType {
 char Result;
 unsigned long ModuleID;
 unsigned int Offset;
 unsigned int Count;
 byte Buffer[];
};


[modifier] Ecrire une IOMAP

Il n'y a guère de différence, pour une approche facile, il faut utiliser cette fonction : SetIOMA(const n, value)

Par exemple :

SetIOMA(OutputIOPower(OUT_A), x);

Les offsets sont les mêmes que pour la lecture, fort heureusement !

Comme pour la lecture, il existe une fonction de plus bas niveau : SysIOMapWrite(IOMapWriteType & args)

La structure permettant de passer les arguments est défini comme suit :

struct IOMapWriteType {
 char Result;
 string ModuleName;
 unsigned int Offset;
 byte Buffer[];
};

Voici un exemple d'utilisation :

IOMapWriteType args;
args.ModuleName = SoundModuleName;
args.Offset = SoundOffsetSampleRate;
args.Buffer = theData;
SysIOMapWrite(args);

Comme pour la lecture il existe une fonction SysIOMapWriteByID(IOMapWriteByIDType & args) qui permet d'utiliser l'ID du module plutôt que son nom.


[modifier] Les IOMaps avec NXT_Python

Deux méthodes de la classe Brick sont disponibles pour lire et écrire les IOMaps en NXT_Python :

Brick.write_io_map(IDModule,offset,value) Brick.read_io_map(IDModule,offset,nbByte)

Ces valeurs peuvent être trouvé dans le guide nxc ou alors en tâtonnant comme dans le cas de nbByte.

Exemple d'utilisation :

   import nxt.locator
   sock = nxt.locator.find_one_brick()
   brick = sock.connect()
   #Change the PID parameters for motor A >>> set_PID(motor,120,90,90)
   brick.write_io_map(131073,22,chr(P))
   brick.write_io_map(131073,23,chr(I))
   brick.write_io_map(131073,24,chr(D))
   update(motor,Update.PID_VALUES)
   # read the PID parameters
   print brick.read_io_map(131073,22,1)
   print brick.read_io_map(131073,23,1)
   print brick.read_io_map(131073,24,1)
Outils personnels
Espaces de noms
Variantes
Actions
Navigation
Boîte à outils