--- rpl/src/gestion_interruptions.c 2010/01/27 22:22:10 1.2 +++ rpl/src/gestion_interruptions.c 2010/07/14 14:19:34 1.12 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 + RPL/2 (R) version 4.0.18 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -43,6 +43,7 @@ affectation_interruptions_logicielles(st sig_atomic_t registre; volatile struct_liste_chainee *l_element_courant; + struct_liste_chainee *l_element; struct_objet *s_objet_processus; @@ -155,6 +156,8 @@ affectation_interruptions_logicielles(st return; } + // Pile LIFO + if (empilement(s_etat_processus, &((*s_etat_processus) .pile_origine_interruptions[interruption - 1]), s_objet_processus) == d_erreur) @@ -169,6 +172,27 @@ affectation_interruptions_logicielles(st (*s_etat_processus).queue_interruptions[interruption - 1]++; (*s_etat_processus).nombre_interruptions_en_queue++; + // Transformation en FIFO + + if ((*s_etat_processus).queue_interruptions + [interruption - 1] > 1) + { + l_element = (*s_etat_processus) + .pile_origine_interruptions[interruption - 1]; + + while((*l_element).suivant != NULL) + { + l_element = (*l_element).suivant; + } + + (*l_element).suivant = (*s_etat_processus) + .pile_origine_interruptions[interruption - 1]; + (*s_etat_processus).pile_origine_interruptions + [interruption - 1] = + (*(*l_element).suivant).suivant; + (*(*l_element).suivant).suivant = NULL; + } + if ((*s_etat_processus).debug == d_vrai) if (((*s_etat_processus).type_debug & d_traitement_interruption) != 0)