493 | | }}}}}} |
494 | | |
495 | | |
| 493 | }}} |
| 494 | }}} |
| 495 | 1. Dans ce qui précède, l'exécution de l'ISR du Timer est fatale puisqu'elle stoppe l'application après l'affichage de "Game Over!". Nous vous proposons de modifier l'ISR afin d'avoir un comportement un peu plus réaliste. Dans cette nouvelle version, l'ISR du timer décrémente un compteur alloué dans une variable globale du noyau puis elle revient dans l'application tant que ce compteur est différent de 0. Donc, dans l'ISR du timer si le compteur est différent de 0, elle affiche un message avec la valeur du compteur, sinon elle affiche "game over!" et stoppe l'application, comme dans l'exercice précédent.\\\\Par exemple, au lieu d'afficher: |
| 496 | {{{ |
| 497 | _ ___ __ |
| 498 | | |__ /'v'\ / / |
| 499 | | / /( )/ _ \ |
| 500 | |_\_\ x___x \___/ |
| 501 | |
| 502 | Tapez votre nom : Moi |
| 503 | Donnez un nombre entre 1 et 99: 45 |
| 504 | 45 est trop grand: 20 |
| 505 | 20 est trop grand: |
| 506 | 0 est trop petit: |
| 507 | Game Over |
| 508 | [105002991] EXIT status = 1 |
| 509 | }}} |
| 510 | l'application pourrait afficher: |
| 511 | {{{ |
| 512 | _ ___ __ |
| 513 | | |__ /'v'\ / / |
| 514 | | / /( )/ _ \ |
| 515 | |_\_\ x___x \___/ |
| 516 | |
| 517 | Tapez votre nom : Moi |
| 518 | Donnez un nombre entre 1 et 99: 45 |
| 519 | 45 est trop grand: 20 |
| 520 | 20 est trop grand: |
| 521 | ..3 : 12 |
| 522 | 12 est trop petit: 15 |
| 523 | 15 est trop petit: |
| 524 | ..2 : |
| 525 | ..1 : |
| 526 | Game Over |
| 527 | [115002778] EXIT status = 1 |
| 528 | }}} |
| 529 | 1. Dans cet usage du TIMER, les ISR ne sont pas fatales, sauf la dernière. En utilisant le mode debug (make debug) et le fichier `label0.S`, déterminez la durée en cycles du traitement par le noyau d'une IRQ du timer. Ce n'est pas exactement la même durée pour toutes les IRQ. |