Electronique embarquée Analyse et conception des programmes Richard Grisel – Professeur des Universités – Université de Rouen Analyse et conception des Programmes “Chaîne” de conception Représentation des programmes “Assemblage” et édition de liens 1 Chaînes de conception Chaîne de conception: Description généralisée de la conception d’un certain type de programme. Le concepteur s’occupe des détails pour adapter la chaîne de conception à un problème particulier. I. Liste Liste create() add-element() delete-element() find-element() destroy() 1 * Elément avec liste Définir les temporisateurs de “Watch-Dog” et les séquences d’activation du moniteur 2 Eléments des chaînes de conception Diagrammes de classes Diagrammes d’état Diagrammes de séquences etc.. II. Machines d’état Les machines d’état sont très utiles dans beaucoup de contextes: Séparation des entrées utilisateur Réponses aux “stimuli” complexes Contrôle des entrées séquentielles 3 Exemple de machine d’état no seat/ buzzer off no seat/idle seat/timer on no seat/buzzer seated No belt/buzzer on belt/belt/ buzzer off no belt/timer on belted no belt and no timer/- Liste pour machine d’état Machine d’état Etat sorties (test des entrées) 4 Implantation en C #define IDLE 0 #define SEATED 1 #define BELTED 2 #define BUZZER 3 switch (state) { case IDLE: if (seat) { state = SEATED; timer_on = TRUE; } break; case SEATED: if (belt) state = BELTED; else if (timer) state = BUZZER; break; … } III. “Buffer” Circulaire x1 x2 x3 t1 x4 t2 x5 x6 t3 Chaîne de données x1 x5 x2 x6 x3 x7 x4 Buffer circulaire 5 Liste pour buffer circulaire Buffer circulaire init() add(data) data head() data element(index) Implantation d’un buffer circulaire: Filtre FIR int circ_buffer[N], circ_buffer_head = 0; int c[N]; /* coefficients */ … int ibuf, ic; for (f=0, ibuff=circ_buff_head, ic=0; ic<N; ibuff=(ibuff==N-1?0:ibuff++), ic++) f = f + c[ic]*circ_buffer[ibuf]; 6 Modèles de programmes Le code source n’est pas une bonne représentation pour les programmes Peu habile; Trop d’informations implicites. Les compilateurs donnent des représentations intermédiaires pour manipuler et optimiser les programmes Graphe “Flot de données” (DFG) DFG: data flow graph. Ne représente pas le contrôle. Modèles de blocs de base: code sans entrée ni sortie. Description des spécifications minimales (ordonnées) pour les opérations. 7 Exemple d’affectation simple x = a + b; y = c - d; z = x * y; y = b + d; x = a + b; y = c - d; z = x * y; y1 = b + d; Bloc de base d’origine Expressions d’affectation “Data flow graph” x = a + b; y = c - d; z = x * y; y1 = b + d; Affectations simples a b c + d - y x * + z y1 8 DFGs et l’ordre partiel a b c + d - y x * + z y1 Ordre partiel: a+b, c-d; b+d x*y Paires d’opérations pouvant être faites en n’importe quel ordre. Control-data flow graph CDFG: représente le contrôle et les données. Utilise les DFG comme composants. Deux types de noeuds: decision; Flot de données. 9 Noeud flot de donnée Encapsulation d’un graphe à flot de données x = a + b; y=c+d Les opérations d’écriture sous forme de bloc de base pour des raisons de simplicité. Contrôle Condition F T v1 v4 Valeur v2 v3 10 Exemple de CDFG if (cond1) bb1(); else bb2(); bb3(); switch (test1) { case c1: bb4(); break; case c2: bb5(); break; case c3: bb6(); break; } T cond1 bb1() F bb2() bb3() c1 bb4() c3 test1 bb5() c2 bb6() Boucle for for (i=0; i<N; i++) loop_body(); for loop i=0; while (i<N) { loop_body(); i++; } equivalent i=0 i<N F T loop_body() i++ 11 “Assemblage” et édition de liens Les différentes étapes: HLL HLL HLL compilation link assembly assembly assembleur executable assemble link Programmes avec modules multiples Un programme peut comporter plusieurs fichiers. Les adresses tendent vers une spécification pendant le traitement des fichiers : Les adresses relatives sont référencées par rapport au début du module; Les adresses absolues sont référencées par rapport au début de l’adresse de base du CPU. 12 L’assembleur Tâches principales: Génération du code binaire pour les instructions; Translation des labels en adresses; Gestion des opérandes (données, etc.). Translation générique généralement. Des directives spécifiques: ORG 100 label1 ADR r4,c Table des symboles ADD r0,r1,r2 xx ADD r3,r4,r5 CMP r0,r3 yy SUB r5,r6,r7 xx 0x8 yy 0x10 Code assembleur Table des symboles 13 Création de la table des symboles On utilise le compteur programme (PLC) pour déterminer les adresses. Le programme est balayé en prenant en compte le PLC. Les adresses sont générées lors de l’assemblage, pas pendant l’exécution. Exemple de table PLC=0x04 ADD r0,r1,r2 xx ADD r3,r4,r5 PLC=0x08 CMP r0,r3 PLC=0x0c yy SUB r5,r6,r7 PLC=0x10 xx 0x08 yy 0x10 14 Assemblage en deux phases Phase 1: Génération de la table des symboles Phase 2: Génération des instructions binaires (codes) Génération des adresses relatives Quelques étiquettes peuvent être inconnues lors de la phase d’assemblage. On peut laisser les étiquettes dans un module sous forme relative. Il faut garder une trace des étiquettes externes – On ne peut pas générer le binaire définitif pour les instructions qui utilisent des étiquettes (références) externes. 15 Directives Les directives ne génèrent pas de code : ORG par exemple donne une origine. EQU définit une référence dans la table des symboles sans modifier le PLC. Les directives de données définissent des blocs de donnés. Edition de lien Regroupement de plusieurs modules “objet” en un seul exécutable. Rôle: Mettre les modules dans l’ordre; Résoudre les étiquettes (labels) entre les différents module. 16 Référence externe et point d’entrée xxx yyy Point d’entrée a ADD r1,r2,r3 BRéférence a externe %1 ADR r4,yyy ADD r3,r4,r5 Ordre des modules Les modules de code doivent être placés dans des positions absolues par rapport à l’espace mémoire. La carte de chargement ou les paramètres de l’éditeur de lien contrôlent l’ordre des modules. module1 module2 module3 17 Edition de liens dynamique Certains systèmes d’exploitation lient les modules dynamiquement à l’exécution : Partage d’une copie des librairies pour tous les programmes exécutés; Les programmes peuvent être mis à jour avec de nouvelles versions des librairies. 18