1. Elevator
Architecture des syst`mes embarqu´s
e e
Caner Candan - caner@candan.fr
6 mars 2011
R´sum´
e e
Commen¸ons par un rappel des objectifs attendus du
c Load sample
rapport :
– pr´senter un graphe d’´tats illustrant tous les pro-
e e Loop on all
t(x)
cessus n´cessaire au fonctionnement de l’ascenseur,
e
– cr´er un simulateur d’ascenseur en langage C/C++.
e
Next t(x) ?
Elevator Le projet est un simulateur d’ascenseur
d´velopp´ en C++. N’ayant pas eu le temps d’´tudier
e e e
une impl´mentation de “SystemC”, un design a tout de
e
Manage simultanious
mˆme ´tait ´labor´ afin de g´n´raliser les diff´rents com-
e e e e e e e calls to elevator
posants que compte le projet. Le langage offrant des (Ordered or UpDown)
routines de g´n´ricit´, il est ainsi possible d’interchan-
e e e
ger certain processus. Ce qui rend le simulateur plus
robuste. Next call ?
1 Graphe d’´tats
e Move elevator
(Temporized or not)
De mani`re g´n´rale, le diagramme d’´tats d´finit l’en-
e e e e e
semble des ´tats couvert par un syst`me quelconque. Les
e e
param`tres, du syst`me, peuvent ˆtre modifi´s lors d’un
e e e e
Change elevator
changement d’´tat. Nous pr´sentons le graphe d’´tats du
e e e position
simulateur Elevator en figure 1. Change call state
2 Les composants
Figure 1 – Graphe d’´tats
e
Comme nous le disions, le simulateur Elevator est dot´
e
d’un design intuitif. On peut ainsi distinguer plusieurs
familles de composants au sein du projet. Ci-dessous une
liste non-exhaustive de composants d´taill´s.
e e Move Ce composant g`re les appels simultan´s `
e e a
l’ascenseur puis d´l`gue son d´placement vers une autre
ee e
famille de composant OneMove. Ci-dessous une liste de
Elevator Ce composant repr´sente l’ascenseur en ses composants.
e
lui mˆme. Il est possible d’int´grer plusieurs types
e e
d’ascenseurs en partant des plus simples aux plus
complexes. Ci-dessous la liste des ascenseurs. – OrderedMove, ce gestionnaire de mouvement effec-
tue les d´placements ` travers les ´tages demand´s
e a e e
– EasyElevator, un simple ascenseur. Il se limite ` a de mani`re ordonn´e.
e e
l’enregistrement de sa position.
– UpDownMove, une variante effectuant des
– OpenCloseElevator, une variante dot´ d’une porte
e d´placements, en premier lieu, vers le haut puis
e
a
` ouvrir et fermer. vers le bas. Il est possible de produire l’inverse.
1
2. 4 ´
L’EXECUTION 2
OneMove Ce composant effectue le d´placement Code 2 Exemple de code du simulateur assemblant
e
d’un ´tage initial vers un ´tage cible. Ci-dessous la liste diff´rents types de composants
e e e
des ses composants.
int main(void)
– DummyOneMove, un simple d´placeur d’ascenseur. {
e
ScheduleSampler sampler("hard1.sdl");
– TemporizedOneMove, une variante qui calcule la EasyElevator elevator;
distance entre l’´tage de d´part et d’arriv´e et tem-
e e e TemporizedOneMove onemove;
porise le d´placement. Il est possible de d´finir le
e e UpDownMove move(elevator, onemove);
temps de d´placement n´cessaire par pas d’´tage.
e e e Scheduler scheduler(move);
scheduler(sampler());
}
ScheduleSampler Ce composant permet la lecture
d’un fichier contenant le sc´nario ` jouer par le si-
e a
mulateur. Nous pr´sentons dans le code 1 un exemple
e
d’´chantillon.
e Par d´faut Certains param`tres ne sont pas d´finit
e e e
dans le code, ils restent toutefois d´finit avec des va-
e
Code 1 Exemple de fichier de sc´nario ex´cutable par leurs par d´faut, comme le pas de temps de d´placement
e e e e
le simulateur Elevator du composant TemporizedOneMove qui est d´finit par e
d´faut ` 1 seconde. De mˆme pour la position initiale de
e a e
0 10 20 -50 l’ascenseur d´finit ` l’´tage 0 par d´faut.
e a e e
-70 0 0 0 0
-9
-8 4 L’ex´cution e
-7
-6 -5 -4 -3 -2 -1 Le code 3 illustre des r´sultats d’ex´cution obtenus
e e
avec le mˆme ´chantillon pr´sent´ dans le code 1.
e e e e
Sur les premi`res lignes des r´sultats, apparaˆ un rap-
e e ıt
pel du sc´nario qui va ˆtre jou´ par le simulateur Ele-
e e e
Chaque ligne du fichier repr´sente un temps t et ` vator, chaque ligne repr´sentant une unit´ de temps t.
e a e e
chaque temps t il est possible de faire des appels simul- Commence alors la simulation. Comme nous utilisons le
tan´s ` l’ascenseur.
e a composant UpDownMove, nous pouvons confirmer, par
les r´sultats, que la simulation commence ` parcourir les
e a
Scheduler Il existe une composante principale du ´tages sup´rieurs demand´s. Puis apr`s avoir parcourut
e e e e
simulateur, il s’agit du Scheduler qui utilise l’ensemble tous les ´tages sup´rieurs, le simulateur s’attaque aux
e e
des composants cit´s pr´c´demment ` travers un jeu de
e e e a ´tages inf´rieurs. Les points interm´diaires entre ´tage
e e e e
param´trage, y compris le sc´nario ` jouer, et lance la
e e a sont g´n´r´s par le composant TemporizedOneMove pour
e ee
simulation. Ci-dessous la liste de ses composants. indiquer les coˆts en pas de temps entre deux ´tages.
u e
– LoopScheduler, juste une variante ex´cutant le
e 5 Conclusion
sc´nario en boucle.
e
Le simulateur Elevator a ´t´ con¸u de mani`re `
ee c e a
s’abstraire des sp´cifications du syst`me. Un langage
e e
3 L’assemblage plus appropri´, comme “SystemC”, aurait sˆrement
e u
apport´ un mod`le plus optimal. Toutefois nous avons
e e
L’assemblage consiste ` regrouper les diff´rents com-
a e vu, ` travers le design, qu’il est possible, en ayant
a
posants pr´sent´s et former le simulateur souhait´.
e e e une approche composant, d’interchanger les diff´rents
e
processus de notre syst`me.
e
Exemple d’assemblage des composants Le code Ainsi libre ` chacun de concevoir de nouveaux com-
a
2 donne un exemple d’assemblage des composants pour posants pour enrichir le simulateur avec de nouvelles
former le simulateur. fonctionnalit´s. L’ensemble du code du simulateur
e
Ce code illustre l’utilisation par le simulateur d’un n’´tant pas toute ` fait g´n´rique, il reste des zones
e a e e
´chantillon de sc´nario “hard1.sdl” 1 , d’un ascenseur
e e dans le code que l’on peut encore abstraire.
simple, d’une temporisation des d´placements de l’as-
e
censeur, d’un gestionnaire de d´placement privil´giant
e e Ce papier suit les termes de la licence “GNU Free
les d´placements vers le haut puis vers le bas puis fina-
e Documentation License 1.3” et peut ˆtre librement
e
lement d’une ex´cution du sc´nario.
e e t´l´charg´ 2 , utilis´ et modifi´.
ee e e e
1. Pr´sent´ dans le code 1
e e 2. https ://github.com/canercandan/elevator