FR 3081070 A1 20191115 FR 1853980 A 20180511 La présente invention concerne de manière générale le domaine du contrôle moteur. Elle vise en particulier un procédé d'échange de données entre tâches apériodiques sensiblement synchrones. Il est connu pour un logiciel, tel un contrôle commande de moteur à combustion interne, de découper le logiciel complet en tâches. Une tâche est un morceau de logiciel qui s'exécute séquentiellement sur une unique unité de traitement. Ainsi dans un système multi unité de traitement, tel un processeur multi-cceurs, une tâche est une unité élémentaire de répartition du logiciel sur les multiples unités. Dans un tel logiciel une tâche est souvent récurrente en ce qu'une occurrence 10 de la tâche s'exécute chaque fois qu'un événement se produit. Une tâche est alors périodique si l'événement récurrent est périodique, et apériodique si l'événement récurrent est apériodique. Dans le cas d'un contrôle moteur il existe les deux types de tâches : des tâches périodiques séquencées par une horloge selon une période fixe et des tâches 15 apériodiques séquencées par un événement récurrent mais non périodique. Un exemple de tâche apériodique est une tâche synchrone à la rotation du moteur, telle qu'une tâche liée au régime moteur, comme par exemple une tâche séquencée par les fronts d'un capteur arbre à cames. Un découpage d'un morceau de logiciel, initialement séquentiel, pour le 20 répartir sur plusieurs unités de traitement, produit plusieurs tâches. Ces tâches, bien qu'exécutées sur des unités de traitement distinctes, doivent être exécutées dans le même ordre que dans le morceau de logiciel découpé. Pour cela les tâches successives sont typiquement chainées : une tâche amont dans la séquence ou tâche mère déclenche l'exécution d'une tâche avale ou tâche fille. 25 De plus ces tâches doivent échanger des données. Il est alors défini des tâches productrices de données et des tâches consommatrices de données. Typiquement, une tâche amont est productrice de données pour une tâche avale. Pour cela, pour chaque donnée ainsi échangée, il est disposé une case mémoire apte à stocker temporairement la donnée. La tâche productrice écrit la donnée produite dans 30 ladite case mémoire, où la tâche consommatrice vient l'y lire. Si le morceau de logiciel découpé est récurrent, les tâches issues de la découpe sont récurrentes aussi. Il convient que les tâches issues de la découpe d'un morceau de logiciel soient sensiblement synchrones. Il est entendu ici par sensiblement synchrone, pour un morceau découpé par exemple en une tâche amont et une tâche 35 avale, que la tâche avale s'exécute après la tâche amont, mais encore que la tâche avale s'exécute avant qu'une nouvelle occurrence de la tâche amont ne s'exécute. 2 La mise au point et l'ordonnancement d'un logiciel ainsi découpé en tâches doit ainsi optimiser la répartition des tâches sur les unités de traitement et garantir la bonne synchronicité. Cependant tout ne peut être prévu, en termes de charge des unités de 5 traitement, et il peut advenir que la synchronicité ne soit pas toujours respectée. Ceci est d'autant plus critique avec des tâches apériodiques, synchronisées sur le régime moteur, à mesure que ledit régime moteur augmente. En effet, aux hauts régimes, la pseudopériode de telles tâches se réduit, augmentant le risque de non synchronicité. Le problème rencontré va maintenant être illustré en se basant sur un exemple simplifié comprenant deux tâches récurrentes TA et TB, s'exécutant sur deux unités de traitement C1, C2. Le chronogramme de la figure 1 montre une situation nominale. La tâche productrice TA dans sa première occurrence TA #1 produit une donnée V, de valeur égale à V#1, et l'écrit E dans une case dédiée à la donnée V en mémoire d'échange M. La tâche consommatrice TB, dans sa première occurrence TB #1, lit L la valeur V#1 de la donnée V et l'utilise. La tâche TB est exécutée après la tâche TA afin de pouvoir disposer de la donnée V produite par la tâche TA. Ceci est par exemple obtenu par un chainage A par lequel la première occurrence TA #1 de la tâche productrice TA actionne la première occurrence TB #1 de la tâche consommatrice TB. Dans une situation nominale, le délai D dans lequel la première occurrence TB #1 démarre suite à son activation A reste suffisamment faible pour que la première occurrence TB #1 s'exécute avant une nouvelle occurrence, ici la deuxième occurrence TA #2, de la tâche productrice TA. Cependant si le délai D s'allonge, il peut survenir la situation problématique illustrée par le chronogramme de la figure 2. A l'instar de la situation nominale, la première occurrence TA #1 produit une donnée V, égale à V#1, et l'écrit E en mémoire d'échange M. Ici, le délai D est allongé et la première occurrence TB #1 est en retard. La donnée V#1 produite par la première occurrence TA #1 n'est pas lue par la première occurrence TB #1. Une deuxième occurrence TA #2 de la tâche productrice TA s'exécute, avant la première occurrence TB #1, et produit une nouvelle donnée V, égale à V#2. Selon l'art antérieur, une unique case mémoire est affectée à la donnée V. Aussi la nouvelle valeur V#2 écrase l'ancienne valeur V#1, qui est perdue. A l'issue du délai D, la première occurrence TB #1 de la tâche consommatrice TB lit L la donnée V et donc une valeur erronée V#2 au lieu de la valeur V#1 prévue. L'allongement du délai D peut provenir d'une surcharge d'au moins une des 35 unités de traitement et/ou d'une réduction du temps entre deux occurrences TA #1, TA #2 de la tâche productrice TA, par exemple dans le cas où cette tâche est déclenchée par un événement lié au régime moteur, tel qu'un front arbre à cames. Aussi le problème décrit 3 ci-dessus peut, par exemple, se produire dans un logiciel de contrôle moteur lorsque le régime moteur augmente. L'objectif de l'invention est de proposer un procédé d'échange d'au moins une donnée entre une tâche productrice récurrente et une tâche consommatrice récurrente ne 5 présentant pas les inconvénients de l'art antérieur, soit un procédé d'échange d'au moins une donnée, sans perte de valeur et permettant l'attribution à chaque occurrence de la tâche consommatrice de la valeur correcte de ladite au moins une donnée. Cet objectif est atteint grâce à un procédé d'échange d'au moins une donnée entre une tâche productrice récurrente et une tâche consommatrice récurrente 10 comprenant au moins une étape consistant en la mise en place, pour chaque au moins une donnée, dans une mémoire partagée entre la tâche productrice et la tâche consommatrice, d'une file d'attente de type FIFO, apte recevoir de la tâche productrice toutes les occurrences de ladite au moins une donnée produite, et à les stocker jusqu'à leur consommation par la tâche consommatrice. 15 Selon une autre caractéristique, la tâche productrice et la tâche consommatrice sont apériodiques. Selon une autre caractéristique, la tâche productrice et la tâche consommatrice sont exécutées dans un environnement multi unité de traitement, préférentiellement sur des unités de traitement différentes. 20 Selon une autre caractéristique, l'exécution de la tâche consommatrice est déclenchée par la tâche productrice, préférentiellement par chaînage. Selon une autre caractéristique, la file d'attente est implémentée au moyen d'une structure comprenant n emplacements mémoire ordonnés, chaque emplacement étant dimensionné pour stocker une occurrence de ladite au moins une donnée produite, 25 le procédé stockant la ième plus ancienne occurrence de ladite au moins une donnée dans le ième emplacement et maintenant un moyen différentiel, incrémenté à chaque occurrence de la tâche productrice et décrémenté à chaque occurrence de la tâche consommatrice, la valeur du moyen différentiel étant utilisée par la tâche consommatrice comme index pour retrouver l'occurrence de la donnée à consommer dans ladite 30 structure. Selon une autre caractéristique, le procédé décale les occurrences de la donnée stockées dans la structure, d'un emplacement, vers un rang supérieur, avant chaque stockage d'une nouvelle occurrence de donnée produite. Selon une autre caractéristique, n est compris entre 2 et 10, 35 préférentiellement égal à 4. Selon une autre caractéristique, le procédé est implémenté dans un contrôle moteur, où la tâche productrice est synchrone à un événement lié au régime moteur. 4 Selon une autre caractéristique, la tâche productrice est une tâche de détection d'un front arbre à cames et la tâche consommatrice est une tâche exécutant des traitements suite à une telle détection. Ainsi, cette solution permet d'atteindre l'objectif précité. En particulier, grâce à 5 la file d'attente qui permet de ne perdre aucune occurrence de la donnée et qui permet de délivrer à chaque occurrence de la tâche consommatrice son occurrence de la donnée. D'autres caractéristiques et avantages innovants de l'invention ressortiront à la lecture de la description ci-après, fournie à titre indicatif et nullement limitatif, en référence aux dessins annexés, dans lesquels : 10 - la figure 1, déjà décrite, montre un chronogramme illustrant une situation nominale, selon l'art antérieur, - la figure 2, déjà décrite, montre un chronogramme illustrant une situation problématique, selon l'art antérieur, - la figure 3 montre un chronogramme illustrant une solution au problème, 15 selon l'invention. Pour plus de clarté, les éléments identiques ou similaires sont repérés par des signes de référence identiques sur l'ensemble des figures. L'invention concerne un procédé d'échange d'au moins une donnée V entre une tâche productrice TA récurrente et une tâche consommatrice TB récurrente. 20 Selon l'invention, afin de pallier au problème décrit précédemment, il est mis en place, pour chaque au moins une donnée V une file d'attente F. Cette file d'attente F, de type FIFO (de l'anglais First In First Out : la première valeur à sortir est la première à être entrée) est disposé dans une mémoire partagée M entre la tâche productrice TA et la tâche consommatrice TB. 25 Là où, selon l'art antérieur, une case mémoire unique stockant la donnée V ne peut stocker qu'une unique valeur, la file d'attente F est apte à stocker plusieurs valeurs de la donnée V. Elle peut ainsi recevoir de la tâche productrice TA toutes les occurrences V#1, V#2, ... de ladite au moins une donnée produite V, évitant toute perte d'occurrence. La file d'attente F stocke ces occurrences jusqu'à leur consommation par la tâche 30 consommatrice TB. En régime nominal la tâche productrice TA et la tâche consommatrice TB sont sensiblement synchrone. Le problème décrit consiste en une rupture de ce synchronisme. Selon une autre caractéristique du procédé, la tâche productrice TA et la tâche consommatrice TB sont apériodiques. Selon une autre caractéristique du procédé, la tâche productrice TA et la tâche consommatrice TB sont exécutées dans un environnement multi unité de traitement C1, C2, préférentiellement sur des unités de traitement C1, C2 différentes. 5 Selon une autre caractéristique, l'exécution de la tâche consommatrice TB est déclenchée par la tâche productrice TA, préférentiellement par chaînage A. Ceci permet de garantir la synchronicité de la tache productrice TA vers la tâche consommatrice TB. La file d'attente F peut être implémentée par tout moyen. Selon une autre 5 caractéristique, la file d'attente F est avantageusement implémentée au moyen d'une structure F comprenant n emplacements mémoire ordonnés. Chacun de ces emplacements mémoire est dimensionné pour stocker une occurrence V#1, V#2, ..., de ladite au moins une donnée produite V. Selon un mode de réalisation, le procédé stocke la ième plus ancienne occurrence de ladite au moins une donnée V dans le ième 10 emplacement. De plus le procédé maintient un moyen différentiel I, compteur de l'écart du nombre d'occurrences entre la tâche productrice TA et la tâche consommatrice TB. Pour cela, le moyen différentiel I est incrémenté à chaque occurrence TA #1, TA #2 de la tâche productrice TA, par exemple par une instruction d'incrémentation incluse dans la tâche 15 productrice TA. Le moyen différentiel I est encore décrémenté à chaque occurrence TB #1, TB #2, de la tâche consommatrice TB, par exemple par une instruction de décrémentation incluse dans la tâche consommatrice TB. La valeur du moyen différentiel I peut alors être utilisée par la tâche consommatrice TB comme index pour retrouver l'occurrence V#1, V#2 de la donnée à consommer V dans ladite structure F. Ainsi, si le 20 moyen différentiel I vaut 3, ce qui signifie que la tâche consommatrice TB est en retard de 3 occurrences relativement à la tâche productrice TA, l'occurrence en cours de la tâche consommatrice TB lira la Sème valeur dans la structure/file d'attente F. Selon une autre caractéristique, le procédé décale les occurrences V#1, V#2 de la donnée V stockées dans la structure F, d'un emplacement, vers un rang supérieur, 25 avant chaque stockage d'une nouvelle occurrence de la donnée V. En référence à la figure 3 est illustré la situation problématique de la figure 2 et son traitement amélioré par l'invention. La tâche productrice TA dans sa première occurrence TA #1 produit une donnée V, de valeur égale à V#1, et l'écrit E en mémoire d'échange M dans la structure F 30 en première position. La première occurrence TA #1 incrémente encore le moyen différentiel I qui vaut ainsi 1. La première occurrence TB #1 de la tâche consommatrice est en retard relativement à la première occurrence TA #1 de la tâche productrice TA. Aussi la deuxième occurrence TA #2 s'exécute et produit une nouvelle occurrence V#2 de la 35 donnée V. Elle réalise un décalage des occurrences présentes dans la structure, d'un rang vers la droite. La première occurrence V#1 passe alors au rang 2. Elle écrit E la 6 deuxième occurrence V#2 dans la structure F en première position. La deuxième occurrence TA #2 incrémente encore le moyen différentiel I qui vaut ainsi 2. Suite à cela, la première occurrence TB #1 de la tâche consommatrice TB s'exécute. Elle retrouve, au cours d'une première lecture L1, son occurrence de la donnée 5 V en utilisant le moyen différentiel I comme index dans la structure. I vaut 2, aussi l'occurrence qui se trouve en 2éme position dans la structure F est déterminée, soit l'occurrence V#1, qui est bien la valeur attendue par la première occurrence TB #1, celle produite par la première occurrence TA #1. A l'issue la première occurrence TB #1 décrémente le moyen différentiel I, qui vaut maintenant 1. La deuxième occurrence TB #2 10 s'exécute ensuite. Au cours d'une deuxième lecture L2, elle utilise le moyen différentiel I, qui vaut 1, comme index, aussi l'occurrence qui se trouve en 1 éme position dans la structure F est déterminée, soit l'occurrence V#2, qui est bien la valeur attendue par la deuxième occurrence TB #2, celle produite par la deuxième occurrence TA #2. Selon une autre caractéristique, la dimension n de la structure, soit l'écart 15 maximum entre les occurrences de la tâche productrice TA et les occurrences de la tâche consommatrice TB que l'invention peut accommoder, est avantageusement comprise entre 2 et 10. Dans la pratique il est considéré que le problème de synchronisation décrit est sporadique et que les occurrences de la tâche consommatrice TB ne tardent pas à 20 rattraper un retard. Aussi il est supposé qu'il ne se produit pas plus de deux occurrences d'écart. En considérant une marge de sécurité, il est préférentiellement retenu n égal à 4. Selon une autre caractéristique, le procédé est implémenté dans un contrôle moteur, avec une tâche productrice TA synchrone à un événement lié au régime moteur. Selon une autre caractéristique, la tâche productrice TA est une tâche de 25 détection d'un front arbre à cames et la tâche consommatrice TB est une tâche exécutant des traitements suite à une telle détection. Ainsi selon un mode de réalisation possible, la tâche productrice est générée lors de la détection d'un front arbre à cames. Elle produit en conséquence un numéro d'ordre/rang de ce front nommé IDX_CAM. Ce rang est consommé/utilisé par la tâche 30 consommatrice, par exemple, pour contrôler le déphasage de l'ouverture des soupapes ou pour contrôler la pompe à carburant, en fonction de la position de l'arbre à cames, donnée par la donnée échangée IDX_CAM. L'invention est décrite dans ce qui précède à titre d'exemple. Il est entendu que la personne de l'art est à même de réaliser différentes variantes de réalisation de 35 l'invention, en associant par exemple les différentes caractéristiques ci-dessus prises seules ou en combinaison, sans pour autant sortir du cadre de l'invention. REVENDICATIONS1. Procédé d'échange d'au moins une donnée (V) entre une tâche productrice (TA) récurrente et une tâche consommatrice (TB) récurrente, caractérisé en ce qu'il comprend au moins une étape consistant en la mise en place, pour chaque au moins une donnée (V), dans une mémoire partagée (M) entre la tâche productrice (TA) et la tâche consommatrice (TB), d'une file d'attente (F) de type FIFO, apte recevoir de la tâche productrice (TA) toutes les occurrences (V#1, V#2) de ladite au moins une donnée produite (V), et à les stocker jusqu'à leur consommation par la tâche consommatrice (TA). 2. Procédé selon la revendication 1, où la tâche productrice (TA) et la tâche consommatrice (TB) sont apériodiques. 3. Procédé selon l'une quelconque des revendications 1 ou 2, où la tâche productrice (TA) et la tâche consommatrice (TB) sont exécutées dans un environnement multi unité de traitement (C1, C2), préférentiellement sur des unités de traitement (C1, C2) différentes. 4. Procédé selon l'une quelconque des revendications 1 à 3, où l'exécution de la 15 tâche consommatrice (TB) est déclenchée par la tâche productrice (TA), préférentiellement par chaînage (A). 5. Procédé selon l'une quelconque des revendications 1 à 4, où la file d'attente (F) est implémentée au moyen d'une structure comprenant n emplacements mémoire ordonnés, chaque emplacement étant dimensionné pour stocker une 20 occurrence (V#1, V#2) de ladite au moins une donnée produite (V), le procédé stockant la ième plus ancienne occurrence de ladite au moins une donnée (V) dans le ième emplacement et maintenant un moyen différentiel (I), incrémenté à chaque occurrence (TA #1, TA #2) de la tâche productrice (TA) et décrémenté à chaque occurrence (TB #1, TB #2) de la tâche consommatrice (TB), la valeur du moyen 25 différentiel (I) étant utilisée par la tâche consommatrice (TB) comme index pour retrouver l'occurrence (V#1, V#2) de la donnée à consommer (V) dans ladite structure. 6. Procédé selon la revendication 5, où le procédé décale les occurrences (V#1, V#2) de la donnée (V) stockées dans la structure, d'un emplacement, vers un rang supérieur, avant chaque stockage d'une nouvelle occurrence de donnée 30 produite. 7. Procédé selon l'une quelconque des revendications 5 ou 6, où n est compris entre 2 et 10, préférentiellement égal à 4. 8 8. Procédé selon l'une quelconque des revendications 1 à 7, implémenté dans un contrôle moteur, où la tâche productrice (TA) est synchrone à un événement lié au régime moteur. 9. Procédé selon la revendication 8, où la tâche productrice (TA) est une tâche 5 de détection d'un front arbre à cames et la tâche consommatrice (TB) est une tâche exécutant des traitements suite à une telle détection.