Aversive/Devguide/AddModuleAndProject.FR

De Wikidroids

Retourner à Aversive/Devguide

Comment ajouter un nouveau module dans aversive

Imaginons que l'on désire rajouter à aversive un module assurant une meilleur gestion de la loutre sur les AVR.

La première étape consiste à créer un dossier qui contiendra les sources de notre module.

 $ mkdir ./aversive/modules/hardware/loutre

On place notre gestionnaire de loutre dans le dossier hardware car il s'agit bien ici de gérer ce matériel si particulier et sensible qu'est la loutre.

 $ cd ./aversive/modules/hardware/loutre

Une fois le dossier créé il faut encore placer à l'intérieur un Makefile qui va bien. Il suffit de recopier un Makefile de n'importe quel autre projet et de le placer dans le notre.

 $ cp ../pwm/Makefile ./

Profitons en pour ajouter les fichiers sources de notre module ou créons en des vides si l'on commence tout juste le développement.

 $ touch loutre.c loutre.h

Éditons ensuite le Makefile en question pour qu'il utilise les sources de notre module.

 $ vi Makefile

Le Makefile devra alors ressembler à quelque chose de ce genre :

 TARGET = loutre
 # List C source files here. (C dependencies are automatically generated.)
 SRC = loutre.c

 include $(AVERSIVE_DIR)/mk/aversive_module.mk


Comme l'indique le commentaire il ne faut pas ajouter ici les .h sous peine d'avoir des ennuis et un bug tout poilu sur les bras.

Il reste encore à ajouter un fichier de configuration par défault à notre loutre pour qu'elle puisse voler de ses propres ailes. Un fichier de configuration est un .h qui sera copié directement dans le répertoire de tout projet qui utilisera la loutre. Ce point .h permettra par exemple le réglage de la loutre suivant l'utilisation que chaque projet en fait.

Le fichier de configuration est toujours nommé : module_config.h et toujours placé dans le dossier module/config/.

Pour notre loutre adorée celà donne :

 $ mkdir config
 $ cd config
 $ touch loutre_config.h

Nous avons maintenant un module loutre avec tout ce qu'il faut pour être inclu dans nos projets. Toutefois à ce point il n'exploite pas la toute puissance d'aversive : j'ai nommé ... le make menuconfig ! (tataaaaa!). Configurer le bazar pour le make menuconfig c'est, bien évidement, une autre histoire. (Bahh oui ça serait pas drôle sinon...)

Commençons par nous rendre dans l'antre de la bêêêêête:

 $ cd ../../../../../../aversive/config

Et éditons le fichier config.in qui s'occupe de coder les menus de make menuconfig.

 $ vi config.in

L'avantage de ce fichier est de suivre l'organisation des modules du make menuconfig et par conséquent il est facile de trouver où dans ce fichier on va ajouter notre loutre puisqu'il nous suffit de savoir dans quel menu on va la loger. Pour l'instant notre loutre crêche dans ./aversive/modules/hardware/loutre, une bonne tenue en société et l'assurance de garder des relations amicales avec les programmeurs d'aversive consistant a garder dans les menus une hiérarchie semblable à celle des dossiers me pousse donc à loger notre loutre dans le menu "Hardware modules".

Commençons par trouver l'endroit du fichier contenant ce passage :

 mainmenu_option next_comment
 comment 'Hardware modules'
 
 comment 'Hardware modules depend on utils module'
 
 #### PWM
 dep_bool 'PWM' CONFIG_MODULE_PWM \
   $CONFIG_MODULE_UTILS
 
 dep_bool ' Create Default pwm config' CONFIG_MODULE_PWM_CREATE_CONFIG \
   $CONFIG_MODULE_PWM
 
 
 #### ADC (not yet)
 dep_bool 'ADC' CONFIG_MODULE_ADC \
   $CONFIG_MODULE_UTILS
 
 dep_bool ' Create Default adc config' CONFIG_MODULE_ADC_CREATE_CONFIG \
   $CONFIG_MODULE_ADC
 

Il ne reste plus qu'a rajouter les lignes de codes qui ajouterons notre loutre dans le menu.

 comment 'Hardware modules'
 
 comment 'Hardware modules depend on utils module'
 
 #### LOUTRE
 dep_bool 'Loutre' CONFIG_MODULE_LOUTRE \
   $CONFIG_MODULE_UTILS
 
 dep_bool ' Create Default loutre config' CONFIG_MODULE_LOUTRE_CREATE_CONFIG \
   $CONFIG_MODULE_LOUTRE
 
 #### PWM
 dep_bool 'PWM' CONFIG_MODULE_PWM \
   $CONFIG_MODULE_UTILS
 
 dep_bool ' Create Default pwm config' CONFIG_MODULE_PWM_CREATE_CONFIG \
   $CONFIG_MODULE_PWM


On remarque que les lignes qui suivent chaque déclaration de modules permettent de spécifier des dépendances à nos modules. Ici par exemple nous déclarons que notre loutre est dépendante au module Utils. Imaginons que notre loutre soit addict' à la fraise et on se retrouve donc avec les lignes suivantes : (oui les loutres sont facilement dépendantes aux substances hallucilogènes telles que les fraises)

 #### LOUTRE
 dep_bool 'Loutre' CONFIG_MODULE_LOUTRE \
   $CONFIG_MODULE_UTILS
   $CONFIG_MODULE_FRAISE

Votre oeil attentif et perspicasse a bien évidement repéré que l'on risque de ne pas aller loin si on ne définit pas la constante $CONFIG_MODULE_LOUTRE. C'est ce que l'on va s'empresser de faire en éditant le fichier suivant :

$ vi generate_aversive_config

On remarque la déclaration d'une graaaande chaine : MODULES_LIST.

  MODULES_LIST = " CONFIG_MODULES_BRUSHLESS_3PHASE_DIGITAL ....
 									....
 									....
 									.... "

Il ne reste plus qu'à ajouter dans cette liste l'adresse de notre loutre pour que le gentil make menuconfig puisse aller la chercher au besoin. Un bref coup d'oeil aux commentaires laisse apparaitre un commandement quasi divin :

  # order is important !! High level modules first

La loutre étant quelque chose de fondamental il convient donc de la mettre très haut dans la liste :p.

On se retrouve donc avec :

  MODULES_LIST = " CONFIG_MODULE_BRUSHLESS_3PHASE_DIGITAL ....
 									....
                   CONFIG_MODULE_LOUTRE, hardware/loutre
 									....
 									.... "

Notre loutre a maintenant un logis pour l'hiver et nous en sera éternellement reconnaissante. D'ailleurs on pourra voir son joli petit nez tout poilu faire "nif! nif!" de bonheur en lui rendant visite en faisant simplement :

 $ make menuconfig

dans un des projets aversive.

Comment ajouter un nouveau projet

Une fois que l'on dipose de tous les modules possibles et imaginables on peut enfin démarrer le développement de notre caftière Wifi/Bluetooth.

On commence donc par créer un joli dossier pour contenir les sources :

 $ cd ./aversive/projects
 $ mkdir coffee_over_ip
 $ cd ./coffee_over_ip

On place maintenant les sources de notre projet dans le dossier :

 $ touch main.c coffee.h nescafe.c nescafe.h

On va chercher un Makefile qui va bien d'un autre projet pour le copier dans notre projet à nous.

 $ cp ../<projet qui va bien>/Makefile ./

Editons maintenant le Makefile :

 $ vi Makefile

Si le fichier contenant le point d'entrée du programme, à savoir le int main(), s'appelle main.c alors la ligne :

  TARGET = main

ne change pas.

Toutefois nos sources contiennent un autre fichier .c que le main.c. Il faut donc le préciser au Makefile en éditant la ligne :

  SRC = $(TARGET).c

en, pour notre exemple, la ligne suivante :

  SRC = $(TARGET).c nescafe.c

Le reste du Makefile propose de rajouter directement des fichiers au format assembleur ce qui, je vous le souhaite, ne vous arrivera que rarement.

À ce point précis votre projet est théoriquement prêt à être utilisé il ne manque plus qu'un petit make clean puis make pour que ça commence à rouler.

Boîte à outils
LANGUAGES