20 | | L'interruption signalant la fin de l'opération d'entrée/sortie n'est pas destinée à la tâche en cours d'exécution. Elle n'est pas destinée non plus à la tâche qui a demandé l'opération d'entrée/sortie. Elle est destinée au système d'exploitation qui a déclenché l'opération d'entrée/sortie. Celui-ci va ''voler'' quelques centaines de cycles à la tâche en cours d'exécution, qui peut être A ou B, peut importe. |
21 | | Pendant ces quelques cycles volés, le processeur va exécuter l'ISR DMA, associée à l'interruption DMA, qui va notifier au système d'exploitation la fin du transfert DMA en écrivant la valeur 0 dans la variable _dma_busy, qui n'appartient ni à la tâche A, ni à la tâche B. |
22 | | La variable _dma_busy appartient au système d'exploitation. Quand la tâche A exécutera l'appel système (bloquant) _ioc_completed(), |
23 | | elle sera débloquée et pourra continuer son exécution. |
| 20 | L'interruption signalant la fin de l'opération d'entrée/sortie n'est pas destinée à la tâche en cours d'exécution. Elle n'est pas destinée non plus à la tâche qui a demandé l'opération d'entrée/sortie. Elle est destinée au système d'exploitation, qui a déclenché l'opération d'entrée/sortie. L'interruption va ''voler'' quelques centaines de cycles à la tâche en cours d'exécution, qui peut être A ou B, peut importe. |
| 21 | Pendant ces quelques cycles volés, le processeur va exécuter l'ISR DMA, associée à l'interruption DMA, qui va notifier au système d'exploitation la fin du transfert DMA en écrivant la valeur 0 dans la variable _dma_busy, qui n'appartient ni à la tâche A, ni à la tâche B, |
| 22 | mais appartient au système d'exploitation. Quand la tâche A exécutera l'appel système (bloquant) _ioc_completed(), elle sera débloquée et pourra continuer son exécution. |