- 1 - L'environnement de développement
- 2 - Premier programme
- 3 - Les variables
- 4 - Les structures de contrôle
- 5 - Les attributs, les énumerations
- 6 - Les tableaux
- 7 - Les sous-programmes
- 8 - Les types
- 9 - Les packages
- 10 - Le multi-tache
- 11 - Ecrire un programme pour le robot
- 12 - Utilisation de la lib PNG_Interface
- 13 - Exercice : SimpleForth
- 14 - Exercice : Startup_Manager
- 15 - Exercice : Gestion des déplacements
IntroductionPour continuer à faire de l'Ada, mais en rentrant un peu plus dans le vif du sujet, on va s'occuper de la procédure de démarrage du robot. Lorsqu'on démarre le robot, le programme principale se lance automatiquement. Il attend que l'utilisateur suive une procédure bien précise avant de lancer le match, puis coupe tout 90s plus tard. L'objectif de cet exercice est d'écrire un package qui va gérer ça. Comme entrées, on dispose de 2 boutons : le bouton rouge (power_switch) et le jack de démarrage (startup_switch). La procédure de demarrage consiste à enfoncer le bouton rouge, mettre le jack de démarrage, poser le robot sur la table, quand tout est prêt, on retire le bouton rouge, finalement, au top de l'arbitre, on retire le jack. Il y a donc 3 états importants : "en vrac", au début : on ne sais pas du tout où est le robot (en l'air, dans les mains du porteur, sur la table, ou n'importe où), "prêt à partir", et "en match". Pour le programmeur qui va écrire une stratégie, il faut que notre package lui permette d'exécuter une fonction de son choix lorsque le robot est "prêt à partir" et une autre pour gérer le match. L'ads de notre package va donc être le suivant: package Startup_Manager is type Main_Function is access procedure; type Init_Function is access procedure; procedure Start_Match (Init : Init_Function; Main : Main_Function); end Statup_Manager; Squelette de basePour commencer, on va récupérer le squelette de base du programme : pour cela, entrer la commande suivante dans un terminal (pour des explications sur hg, c'est ici). hg clone <a> cd" title="http://bitbucket.org/telrob/startup<br /> cd">http://bitbucket.org/telrob/startup<br /> cd</a> startup hg update -r 0 Voici la liste des fichiers important :
Première versionQuestion 1: Ecrire un "protected" pour l'état du robot. L'état du robot est une variable qui va être manipulé par plusieurs threads. Il faut donc la proteger avec un protected. Ce protected contiendra une fonction pour obtenir l'état courante et une procédure pour le définir. Question 2: Ecrire une tache qui met à jour l'état du robot en fonction des boutons (ma solution: Question 3:Ajouter une famille d'"entry" à notre protected qui attend d'être dans un état donné. Ensuite, on peut écrire une 1ère version de Start_Match: procedure Start_Match (Init : Init_Function; Main : Main_Function) is begin State.Wait_For (Ready_For_Match); Init.all; State.Wait_For (In_Match); Main.all; end Start_Match; Deuxième versionCette 1ère version est pas mal mais si jamais Clement est abscent, on risque de se retrouver avec une personne un peu a la rue devant le robot. Ce qui serait bien, c'est que
Question 4 : Changer la procedure "Start_Match" pour interrompre le travail en cours lors d'un changement d'état et lancer la nouvelle procédure. Note : On appréciera la puissance du "select ... then abort ... end select" de l'Ada... (ma solution: Question 5 : Gérer la fin du match au bout de 30s. Note: On pensera à stopper le timer si on change d'état avant la fin du match.
|
|||



