Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Architecture
Architecture Forum d'entraide sur les choix d'architectures logicielles, de patterns architecturaux, ainsi que la gouvernance des Systèmes d'Information (Urbanisation, Interopérabilité, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/08/2012, 11h28   #1
JuanLuis
Invité de passage
 
Homme JeanLouis
Ingénieur développement matériel électronique
Inscription : juillet 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme JeanLouis
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2012
Messages : 26
Points : 3
Points : 3
Par défaut Architecture d'une couche d'abstraction ?

Bonjour à tous,

Je suis actuellement sur un projet qui vise à concevoir une couche d'abstraction matérielle.
Je m'explique. J'ai aujourd'hui un programme applicatif qui tourne sur une plateforme PIC18. Cette applicatif dans son fonctionnel comporte des communications avec un autre PIC par liaison SPI, il comporte aussi une communication en RS232. L'architecture actuelle en permet pas d'évolutivité, si par exemple on veut changer de type de communication (de SPI à I2C par exemple) on doit modifier directement la partie applicatif du code.

Mon objectif est donc de créer une nouvelle couche entre mon fonctionnel et mes drivers afin qu'en cas de changement de matériel je n'ai plus à changer mon fonctionnel. Cela doit rendre donc la fonctionnel plus générique et plus lisible.
Je veut suivre une démarche de conception plutot rigoureuse et penser a tout mon architecture avant de coder.

J'aimerai donc savoir si je m'engage dans la bonne direction avec mes choix.
Je pensais faire comme suit :

---------- Applicatif : Utilisation de fonction générique de base ------------
----------------- Init(nom_du_périphérique_utilisé) -------------
----------------- Lecture(nom_du_périphérique_utilisé, ...) ------
----------------- Ecrire(nom_du_périphérique_utilisé, ...) --------
----------------- Stop(nom_du_périphérique_utilisé) ------------

---------- Ma couche : Contient les fonctions génériques de base, celles-ci renseignent les éléments utiles, et appellent les fonctions des driver ---------------


---------- Mes drivers : Contiennent les routines d'utilisation des liaisons --------------

Le tout avec un fichier de configuration qui comportera les informations liées au projet, du style quelles sont les types de liaisons utilisées, les noms des périphériques associés, etc...

Ce que je me dis c'est que c'est trop simple
Le but serai par la suite de pouvoir externaliser cette nouvelle couche pour l'utiliser comme une bibliothèque. Elle comportera les appels pour plein de liaison différentes.

Donc voila j'aimerai avoir votre avis sur ce que j'ai marqué là , mais aussi savoir si j'ai une bonne démarche, si je ne loupe pas des étapes pour faire une conception propre ??? Et si j'ai tout faux dite moi comment je dois m'y prendre, quelles sont les étapes!?

Merci d'avance JL
JuanLuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2012, 11h06   #2
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 651
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 651
Points : 12 081
Points : 12 081
Bonjour

ton applicatif pourrait-il (devrait-il) gérer plusieurs drivers en parallèle ?
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2012, 11h44   #3
JuanLuis
Invité de passage
 
Homme JeanLouis
Ingénieur développement matériel électronique
Inscription : juillet 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme JeanLouis
Âge : 25
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2012
Messages : 26
Points : 3
Points : 3
Qu'entend tu par gérer plusieurs driver en parallèle??
Je pense pouvoir répondre OUI ! Le système comporte plusieurs types de communication. Par exemple il communique avec un périphérique par SPI, et avec un autre par RS232. les communications s’exécute les unes après les autres, il n'y en aura pas 2 en même temps.

J'ai revu un peu ma solution :
---------------
mon applicatif //ici on a des appel de fonction générique
---------------
---------------
ma couche // ici on a des appels de fonction spécifique
---------------
--------------- -------------- --------------- --------------
-----driver1 ------- driver2 -------- driver3 ------- driver_N
--------------- -------------- --------------- --------------
ensuite je pensais mettre un couche "transverse" à l'applicatif et a la couche d'abstraction qui sera spécifique au projet et qui permettra de regrouper les fonctions d'un même genre. Par exemple on pourra trouver dedans une fonction init_PIC() qui contiendra les appels des fonctions d'initialisation des PIC. Par exemple set_générique_PIC() qui elle sera implémenté dans la couche d'abstraction, et qui permettra de lancer la routine d'init pour le PIC spécifié en argument !
JuanLuis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2012, 12h06   #4
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 651
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 651
Points : 12 081
Points : 12 081
moi je ferais :

applicatif

couche fonctionnelle

couche driver générique


couche driver générique :

à base de fonctions enregistrées (comme les "OnClick" pour des boutons dans une IHM)


Pour fabriquer/ajouter un driver, remplir les 4 fonctions spécifiques, avec une API standard (générique)

Dans la couche fonctionnelle :

if ( Driver_Is_Registered ( READ ) )
Call_Registered_Driver ( READ, ....)
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web