Analyse et conception des Programmes

publicité
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
Téléchargement