mercredi 19 mars 2014

PICvision, module HardwareProfile

Le profil matériel (hardware profile) est utilisé pour 2 raisons. La première est pour faciliter les modifications logicielles en cas de changement du schéma électronique et la deuxième pour rendre le projet plus facile à adapter à une autre plateforme.

Entre le premier schéma que j'ai dessiné et la version finale il y a eu des modifications au niveau de l'affectation des périphériques au broches du MCU. Par exemple au départ les lignes DATA1 et DATA2 des contrôleurs SNES étaient sur RB14 et RB15 et par la suite ont été transférés sur RA0, RA1. En créant les définitions suivantes dans le fichier HardwareProfile.h

// SNES paddles i/o
#define PADDLES_DATA_PORT PORTA
#define P_PDL1_DAT LATAbits.LATA0 // paddle 1 data input
#define P_PDL1_DAT_TRIS TRISAbits.TRISA0 // paddle 1 TRIS bit
#define P_PDL1_ANDIS AD1PCFGbits.PCFG0 // disable ANx disable bit
#define P_PDL2_DAT LATAbits.LATA1 // paddle 2 data input
#define P_PDL2_ANDIS AD1PCFGbits.PCFG1 // paddle 2 ANx disable bit
#define P_PDL2_DAT_TRIS TRISAbits.TRISA1 // paddle 2 TRIS bit
#define P_PDL_CLK LATBbits.LATB0 // paddles clock output signal
#define P_PDL_CLK_TRIS TRISBbits.TRISB0 // paddles clock TRIS bit
#define P_PDL_LATCH LATBbits.LATB1 // paddles data latch output signal
#define P_PDL_LATCH_TRIS TRISBbits.TRISB1 // paddles latch TRIS bit
Je n'ai eu qu'à modifier ces définitions sans chercher ailleurs pour que la modification s'applique partout dans le projet. Ce concept de profil matériel s'avère utile dans tous les projets le moindrement complexes. De plus on peut choisir des noms plus significatifs dans le cadre du projet.

La raison pour laquelle j'ai modifié le schéma électronique initial est justement pour faciliter l'adaptation du projet à un autre microcontrôleur. Actuellement je pourrais enlever le PIC24FJ64GA002 de la carte et le remplacer par un PIC32MX150F128B sans avoir à modifier quoi que ce soit au montage électronique. Tout ce que j'aurais à faire est de modifier le hardwareProfile et faire quelques adaptation au niveau du code. Bref avec seulement quelques heures de programmation j'aurais un PICvision fonctionnant avec un MCU 32 bits avec 32Ko de RAM plutôt qu'un MCU 16 bits avec 8Ko de RAM.

Le principe du profile matériel est simple on substitue des symboles par d'autres:

#define PADDLES_DATA_PORT PORTA
Ainsi chaque fois que dans le code je veux lire les lignes DATA des contrôleurs SNES j'utilise le symbole PADDLES_DATA_PORT au lieu de PORTA et si mon montage est modifié et que c'est sur PORTB plutôt que PORTA je n'ai qu'à changer la définition:
#define PADDLES_DATA_PORT PORTB
Tout ce qui est spécifique à la configuration matériel est centralisé dans HardwareProfile.h et HardwareProfile.c sauf les bits de configurations du MCU, qui eux doivent-être dans le fichier qui contient la fonction main(). Il semble que le pré-processeur s'attend à trouver ces directives dans le fichier principal.

conclusion

La modularisation d'un projet facilite sa gestion, les modifications et l'adaptation à d'autres plateformes. Centraliser les informations spécifique à la plateforme matérielle dans un seul fichier ou groupe de fichiers est un aspect important de la modularisation.

Aucun commentaire:

Publier un commentaire