Archive 07/10/2020.

Initialisation des drivers, &driver_name_params[0], ou driver_name_params?

michel_billaud

Bonjour,

Dans le 3.4.4, il est indiqué d’initialiser les drivers par

driver_name_init(&device,  &driver_name_params[0]);

et dans le TP on trouve la forme

driver_name_init(&device,  driver_name_params);

qui est équivalente au niveau de C (pour le compilateur, le nom d’un tableau se “dégrade” en adresse de son premier élément), mais plus concise.

Y a-t-il une raison “philosophique” de préférer la première forme ?

Quelle est l’intention de l’adresse fournie à driver_name_init ? l’adresse d’un “paramètre de configuration”, ou d’une suite de paramètres ?

aabadie2

Bonjour,

Et merci pour toutes vos remarques pertinentes.
L’utilisation de &driver_name_params[0] au lieu de driver_name_params est pour moi l’approche à priviligier. Bien que les 2 notations soient équivalentes, comme vous le faites remarquer, la premirère notation est plus explicite sur le faite que driver_name_params doit contenir un tableau de struct de configuration.

En effet, le design des driver dans RIOT permet de gérer (et donc de configurer) plusieurs capteurs du même type et driver_name_params est censé contenir les structure d’initialisation de chaque device.

Vous pouvez trouver de la documentation sur le design des drivers de RIOT (qu’on pourrait rajouter au contenu du Mooc…) ici: http://doc.riot-os.org/driver-guide.html

J’espère que ça répond à vos interrogations :slight_smile:

michel_billaud

Ah ok, je n’avais pas pensé qu’il pouvait y avoir plusieurs “instances” avec des configurations initiales légèrement différentes, qu’on pourrait initialiser par

device_t dev0;
device_t dev1;
device_init(& dev0, & device_params[0]);
device_init(& dev1, & device_params[1]);

voire même se configurer un truc “exotique” avec

device_param_t  my_param {  .x = ... };
device_init(&dev, & my_param);

J’ai essayé de me faire une idée en piochant au hasard dans la doc des modules http://doc.riot-os.org/group__drivers.html, mais je ne suis tombé que des tableaux de “param” avec un seul élément. Mais je n’ai pas cherché longtemps, il faut savoir garder une part de mystère :slight_smile:

Merci de votre aide !