FR 3065550 A1 20181026 FR 1759092 A 20170929 1 La présente invention concerne de manière générale les procédés de traitement d'information dans un système temps réel multicceur, et plus particulièrement le problème de l'échange de données de manière protégée entre deux tâches s'exécutant sur des coeurs différents. Les systèmes ou processeurs multi coeurs sont de plus en plus répandus dans tous les domaines techniques. Ils permettent des performances chaque jour augmentées et surpassant nettement celles des processeurs mono-coeurs. Aussi convient-il d'adapter les applications à ces systèmes. Pour cela une application est découpée en tâches, chaque tâche étant apte à être exécutée sur un coeur, permettant ainsi de distribuer une application sur plusieurs coeurs. Cependant, le plus souvent, une tâche (consommatrice) nécessite des données produites par une autre tâche (productrice), et produit elle-même des données utiles à d'autres tâches (consommatrices), pouvant inclure la tâche précédemment productrice. Aussi convient-il de mettre en place des mécanismes d'échanges de données, mono ou bidirectionnels, entre tâches. Pour cela il est connu d'utiliser une mémoire d'échange, dans laquelle la tâche productrice vient écrire les données à échanger. La tâche consommatrice vient ensuite lire ces données. Afin de garantir la consistance des données, il est impératif que lecture/récupération et écriture/sauvegarde ne s'effectuent pas simultanément. Selon un mode de réalisation proposé par US 20150212952, la consistance est garantie en imposant une relation temporelle entre les tâches. Ceci est typiquement réalisé par découpage du temps (en anglais : time slicing) : le temps est découpé en intervalles consécutifs, eux-mêmes découpés en créneaux (en anglais : slots) et en allouant de manière périodique un créneau à chacune des tâches. Ainsi, une première tâche peut se voir allouer un premier créneau, une deuxième tâche peut se voir allouer un deuxième créneau, etc. Durant ce premier créneau et seulement durant ce premier créneau et ce à chaque intervalle de temps, la première tâche est seule autorisée à accéder en lecture et/ou écriture à la mémoire d'échange. De même, durant ce deuxième créneau, la deuxième tâche est seule autorisée à accéder en lecture et/ou écriture à la mémoire d'échange. Ainsi tout risque de collision est évité. Un inconvénient de cette approche est qu'il est nécessaire de disposer d'une horloge qui puisse être partagée par les deux tâches, ce qui n'est pas toujours le cas. Un autre inconvénient est que les durées des créneaux alloués à chaque tâche sont constantes et immuables, alors que le besoin peut évoluer. Un autre inconvénient est que la tâche elle-même contrôle ses accès et rien n'empêche une tâche d'accéder à la mémoire d'échange hors de son créneau. Ainsi, si une horloge dérive, 3065550 2 une tâche peut accéder en dehors de son créneau, de « bonne foi », alors même qu'elle pense être dans son créneau. Selon un autre mode de réalisation de l'art antérieur, la consistance est garantie, en réalisant l'accès à la mémoire d'échange en exclusion mutuelle. Pour cela, la 5 tâche productrice et la tâche consommatrice se partagent un moyen unique, appelé sémaphore ou jeton (en anglais token), qui peut être pris ou relâché par une tâche. Ce sémaphore ne peut être possédé que par une seule tâche à la fois à un instant donné, et cette possession est obligatoire pour accéder, en lecture et/ou en écriture à la mémoire partagée. 10 Un inconvénient de cette approche est qu'elle nécessite un moyen commun, accessible par les différentes tâches, afin d'implémenter le sémaphore. De plus, dans le cas où la tâche consommatrice est à son tour productrice pour la tâche anciennement productrice et qui devient alors consommatrice, il est nécessaire d'implémenter deux mémoires de partage chacune assortie de son sémaphore, et donc deux sémaphores, un 15 pour chaque sens d'échange de données. L'objectif de l'invention est de proposer un procédé d'échange protégé de données mono- ou bidirectionnel entre tâches ne présentant pas les inconvénients de l'art antérieur. Cet objectif est atteint grâce à un procédé, pour un système multicceur, 20 d'échange protégé de données, entre une première tâche s'exécutant sur un premier coeur et une deuxième tâche s'exécutant sur un deuxième coeur, différent du premier coeur, comprenant les étapes suivantes réalisées en séquence : lancement de la première tâche, récupération, par la première tâche, des données produites par la deuxième tâche, production, par la première tâche de données, écriture, par la première tâche, des données 25 produites, déclenchement, par la première tâche, de l'exécution d'une première tâche intermédiaire par chaînage, lecture, par la première tâche intermédiaire, des données écrites, et écriture par la première tâche intermédiaire, des données, pour la deuxième tâche. Selon une autre caractéristique, la première tâche intermédiaire s'exécute sur 30 le même coeur que la deuxième tâche, et ce coeur est configuré pour interdire toute préemption de la deuxième tâche sur la première tâche intermédiaire et de la première tâche intermédiaire sur la deuxième tâche. Selon une autre caractéristique, le procédé comprend encore les étapes suivantes réalisées en séquence : lancement de la deuxième tâche, lecture, par la deuxième tâche, des données écrites par la première tâche intermédiaire, production, par la deuxième tâche, de données, écriture, par la deuxième tâche, des données produites, déclenchement, par la deuxième tâche, de l'exécution d'une deuxième tâche intermédiaire 3065550 3 par chaînage, lecture, par la deuxième tâche intermédiaire, des données écrites et écriture, par la deuxième tâche intermédiaire, des données, pour la première tâche. Selon une autre caractéristique, la deuxième tâche intermédiaire s'exécute sur le même coeur que la première tâche, et ce coeur est configuré pour interdire toute 5 préemption de la première tâche sur la deuxième tâche intermédiaire et de la deuxième tâche intermédiaire sur la première tâche. Selon une autre caractéristique, le procédé, comprend encore les étapes suivantes réalisées en séquence : lancement de la deuxième tâche, lecture, par la deuxième tâche, des données écrites par la première tâche intermédiaire, production, par 10 la deuxième tâche, de données, sauvegarde, par la deuxième tâche des données produites, où l'étape de récupération, par la première tâche, et l'étape de sauvegarde, par la deuxième tâche, sont réalisées en exclusion mutuelle, préférentiellement par utilisation d'un sémaphore unique commun. Selon une autre caractéristique, la première tâche et la deuxième tâche 15 présentent des niveaux de sécurité différents. Selon une autre caractéristique, le procédé comprend encore les étapes de : adaptation de niveau de sécurité des données, par la tâche intermédiaire, entre les étapes de lecture et d'écriture par la première tâche intermédiaire ou par la deuxième tâche, entre les étapes de récupération/lecture et de production par la deuxième tâche, et adaptation de 20 niveau de sécurité des données, par la deuxième tâche intermédiaire, entre les étapes de lecture et d'écriture par la deuxième tâche intermédiaire ou par la première tâche, entre les étapes de récupération/lecture et de production par la première tâche ou par la deuxième tâche, entre les étapes de production et de sauvegarde/écriture par la deuxième tâche. Selon une autre caractéristique, le procédé comprend encore les étapes de : 25 conversion des données, par la première tâche intermédiaire, entre les étapes de lecture et d'écriture par la première tâche intermédiaire ou par la deuxième tâche, entre les étapes de production et de sauvegarde/écriture par la deuxième tâche, conversion des données, par la deuxième tâche intermédiaire, entre les étapes de lecture et d'écriture par la deuxième tâche intermédiaire ou par la première tâche, entre les étapes de récupération/lecture et de 30 production par la première tâche ou par la deuxième tâche, entre les étapes de production et de sauvegarde/écriture par la deuxième tâche. Selon une autre caractéristique, le lancement de la première tâche est réalisé par un premier séquenceur selon une première récurrence, et le lancement de la deuxième tâche est réalisé par un deuxième séquenceur selon une deuxième récurrence. 35 Selon une autre caractéristique, la première récurrence et/ou la deuxième récurrence est de type régulier ou irrégulier. 3065550 4 Selon une autre caractéristique, la première récurrence et la deuxième récurrence sont de même type. Selon une autre caractéristique, la première récurrence et la deuxième récurrence sont de type régulier, préférentiellement de fréquences multiples, encore 5 préférentiellement de fréquences sensiblement identiques. Selon une autre caractéristique, la deuxième tâche encapsule un logiciel existant non modifiable. Selon une autre caractéristique, le procédé est appliqué à un contrôle moteur. D'autres caractéristiques et avantages innovants de l'invention ressortiront à 10 la lecture de la description ci-après, fournie à titre indicatif et nullement limitatif, en référence aux dessins annexés, dans lesquels : - la figure 1 illustre un synoptique d'un échange de données entre deux tâches, selon un premier mode de réalisation, - la figure 2 illustre un synoptique d'un échange de données entre deux tâches, selon un 15 autre mode de réalisation. 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é, pour un système multicceur, d'échange protégé de données D12, D21, entre une première tâche 11 s'exécutant sur un premier 20 coeur Cl et une deuxième tâche 12 s'exécutant sur un deuxième coeur 02, différent du premier coeur Cl. On note D12 les données produites par la première tâche 11 et, selon un premier flux, transmises à la deuxième tâche 12 et consommées par cette dernière. On note D21 les données produites par la deuxième tâche 12 et, selon un deuxième flux, transmises à la première tâche 11 et consommées par cette dernière. Sur les figures, les 25 activités réalisées par le premier coeur Cl apparaissent sous l'accolade Cl à gauche et les activités réalisées par le deuxième coeur 02 apparaissent sous l'accolade 02 à droite. Chacune des deux tâches 11, 12 est lancée par exemple au moyen d'un séquenceur propre Ki, K2. Chacune des tâches 11, 12 peut être asynchrone ou posséder sa propre récurrence, qui peut être de type ou de caractéristique différents. Ainsi, par 30 exemple, une tâche 11 peut être asynchrone et exécutée selon un évènement unique ou rare. Une tâche peut encore être une tâche irrégulière, par exemple lancée selon un évènement pseudopériodique, tel un passage au point mort haut d'un moteur thermique, tandis qu'une deuxième tâche 12 peut être une tâche régulière, lancée par une horloge, et caractérisée par sa fréquence. Selon un autre exemple, les deux tâches 11, 12 peuvent 35 être régulières, mais de caractéristique fréquentielle différente. Selon un autre exemple, les deux tâches 11, 12 peuvent être régulières, et de même fréquence, mais séquencées par des horloges indépendantes, l'une pouvant dériver relativement à l'autre. 3065550 5 Ainsi il est considéré dans tous les cas que les deux tâches 11, 12 ne sont pas nécessairement corrélées temporellement. Aussi est-il important de protéger les données, afin de garantir leur consistance en évitant notamment qu'une tâche 11, 12 puisse lire ou écrire dans une mémoire d'échange en même temps que l'autre tâche 12, 11 5 vient y écrire ou y lire. Pour obtenir cette protection, deux mécanismes différents sont utilisés. Un premier mécanisme utilise une tâche intermédiaire déclenchée par chaînage par une tâche sur le coeur où s'exécute l'autre tâche. Un deuxième mécanisme utilise une exclusion mutuelle. Ces deux mécanismes peuvent être combinés à loisir. 10 Ainsi, selon un premier mode de réalisation illustré à la figure 1, la protection des données dans un premier sens, entre la première tâche 11 et la deuxième tâche 12, est réalisée par utilisation d'une première tâche intermédiaire 13 et chaînage, tandis que la protection dans l'autre sens, entre la deuxième tâche 12 et la première tâche 11, est réalisée par exclusion mutuelle. 15 Selon le premier mode de réalisation, illustré à la figure 1, le premier sens d'échange, soit entre la première tâche 11 et la deuxième tâche 12, qui échange les données D12, est protégé au moyen d'une première tâche intermédiaire 13 qui est en charge de récupérer/lire les données D12 produites par la première tâche 11. Le mode de lancement de la première tâche intermédiaire 13 garantit que cette récupération/lecture ne 20 s'effectue pas pendant que la première tâche 11 écrit/sauvegarde ces données D12 dans la mémoire d'échange. Une fois que la première tâche intermédiaire 13 a récupéré les données D12, elle crée une copie qu'elle écrit/tient à disposition de la deuxième tâche 12. Du fait qu'il s'agit d'une copie, la deuxième tâche 12 peut venir lire/récupérer ces données à tout moment. Comme décrit pus avant, le coeur sur lequel s'exécute la première tâche 25 intermédiaire 13 assure que la lecture/récupération par la deuxième tâche 12 ne risque pas de venir en conflit avec la recopie/mise à jour réalisée par la première tâche intermédiaire 13 durant la mise à disposition. Dans le deuxième sens d'échange, soit entre la deuxième tâche 12 et la première tâche 11, qui échange les données D21, un mécanisme de protection par 30 sémaphore S est utilisé. Ainsi, si l'on observe d'abord du côté de la première tâche 11, le procédé comprend les étapes suivantes réalisées en séquence. Une première étape comprend le lancement 10 de la première tâche 11. Pour travailler, la première tâche 11 a besoin des données D21 en provenance de la deuxième tâche 12. Aussi une deuxième étape 35 comprend une récupération 20, par la première tâche 11, des données D21 produites par la deuxième tâche 12. L'étape suivante comprend le principal de la première tâche 11 qui réalise effectivement sa fonction. Au cours de cette étape est réalisée la production 30 des 3065550 6 données D12 à l'attention de la deuxième tâche 12. Ces données D12 produites peuvent ensuite, au cours d'une étape d'écriture 40, être écrites par la première tâche 11. Une fois cette étape d'écriture 40 réalisée, une étape de déclenchement 50, réalisant un lancement de la première tâche intermédiaire 13 est réalisée, par exemple par la première tâche 11. 5 La première tâche 11 est alors terminée. Alternativement, le déclenchement 50 de la première tâche intermédiaire 13 peut être réalisé par le système d'exploitation lorsque la première tâche 11 se termine. Ce qui est important est que le déclenchement 50 soit postérieur à la fin de l'étape d'écriture 40. Cette condition assure que la lecture 60 n'est pas en collision avec l'écriture 40. 10 Après son lancement la première tâche intermédiaire 13 procède à la lecture 60 des données D12 écrites et à leur écriture pour mise à disposition pour la deuxième tâche 12. Pour cela la première tâche intermédiaire 13 réalise une copie des données D12. Ensuite la première tâche intermédiaire 13 se termine. Il convient de noter que la première tâche intermédiaire 13 est volontairement 15 réduite afin que son temps d'exécution reste court. Ceci facilite son intégration en ce qu'elle arrive mieux à « s'intercaler » et risque ainsi moins de perturber les équilibres temps réels entre les autres tâches. Selon une caractéristique, le déclenchement 50 de la première tâche intermédiaire 13 est réalisé par un mécanisme appelé chaînage. Un tel mécanisme, 20 s'apparente au lancement d'un programme ou d'un sous-programme, s'applique ici à une tâche et peut être réalisé y compris entre des coeurs différents. Un tel chaînage débute l'exécution de la première tâche intermédiaire 13 au plus tôt après avoir été déclenché. Ceci garantit une condition temporelle pour l'exécution de la première tâche intermédiaire 13: strictement postérieure à l'écriture 40, garantissant la protection des données D12 et 25 donc la non collision entre l'écriture 40 par la première tâche 11 et la lecture 60 par la première tâche intermédiaire 13. Selon une autre caractéristique importante, afin d'éviter toute collision entre la première tâche intermédiaire 13 et la deuxième tâche 12, la première tâche intermédiaire 13 s'exécute sur le même coeur C2 que la deuxième tâche 12, et ce coeur C2 est configuré 30 en mode non préemptif. Ce mode non préemptif peut être global. A minima, il convient que soit interdite toute préemption de la deuxième tâche 12 sur la première tâche intermédiaire 13 et réciproquement toute préemption de la première tâche intermédiaire 13 sur la deuxième tâche 12. Le chaînage permet un déclenchement sur un coeur différent. Un coeur Cl, C2 35 est par définition mono tâche, en ce qu'il ne peut exécuter qu'une partie de programme ou tâche, à la fois. Aussi la première tâche intermédiaire 13 et la deuxième tâche 12 ne peuvent s'exécuter en même temps. Le fait que le coeur C2 soit configuré pour empêcher 3065550 7 toute préemption mutuelle entre la première tâche intermédiaire 13 et la deuxième tâche 12 assure de plus que la deuxième tâche 12 ne peut pas interrompre l'exécution de la première tâche intermédiaire 13. Ainsi lorsque la première tâche intermédiaire 13 réalise l'écriture/mise à disposition 70, la deuxième tâche 12 est nécessairement dormante. De 5 même, lorsque la deuxième tâche 12 réalise une lecture 90 des données, la première tâche intermédiaire 13 est nécessairement dormante. Aussi les opérations concurrentes d'écriture 70, par la première tâche intermédiaire 13, et de lecture 90, par la deuxième tâche 12, ne peuvent entrer en collision. Observons maintenant du côté de la deuxième tâche 12, toujours sur la 10 figure 1. Le procédé comprend les étapes suivantes réalisées en séquence. Une première étape comprend le lancement 80 de la deuxième tâche 12. Pour travailler, la deuxième tâche 12 a besoin des données D12 en provenance de la première tâche 11. Aussi une deuxième étape comprend une lecture 90, par la deuxième tâche 12, des données D12 produites par la première tâche 11 ou plus précisément une copie des données D12, 15 réalisée par la première tâche intermédiaire 13 et écrites 70. L'étape suivante comprend le principal de la deuxième tâche 12 qui réalise effectivement sa fonction. Au cours de cette étape est réalisée la production 100 des données D21 à l'attention de la première tâche 11. Ces données D21 produites peuvent ensuite, au cours d'une étape de sauvegarde 110, être sauvegardées/écrites par la deuxième tâche 12. 20 Selon une autre caractéristique, la non collision entre la sauvegarde/écriture 110 par la deuxième tâche 12 et la récupération/lecture 20 par la première tâche 11 des données D21 est obtenue en réalisant ces deux étapes 20, 110, en exclusion mutuelle. Une telle exclusion est mise en oeuvre de manière préférentielle au moyen d'un sémaphore S unique commun. 25 Le sémaphore S est un moyen unique, nécessaire à une opération d'accès à la mémoire partagée, en lecture ou en écriture, et qui ne peut être détenu, à un instant donné, que par une seule tâche et donc par une seule parmi les tâches réalisant les opérations de lecture ou d'écriture. Ainsi l'étape de récupération 20 doit posséder le sémaphore S pour accéder en lecture à la mémoire partagée. Aussi préalablement à 30 l'exécution de l'étape de récupération 20, le procédé vérifie au moyen du test 01 que le sémaphore S est libre. Si le sémaphore S n'est pas libre, le test 01 reboucle sur lui-même et réalise ainsi une attente. Dès que le sémaphore S est libre la première tâche 11 le prend, le rendant ainsi indisponible pour une autre tâche, particulièrement la deuxième tâche 12. La détention du sémaphore S autorise la première tâche 11 à réaliser l'étape de 35 récupération 20. A l'issue, le sémaphore S est libéré. Ainsi l'étape de récupération 20 est réalisée dans une zone d'exclusion mutuelle, figurée par une accolade, et s'étendant de la prise à la libération du sémaphore S. 3065550 8 De manière duale, l'étape de sauvegarde 110, par la deuxième tâche 12, doit posséder le sémaphore S pour accéder en écriture à la mémoire partagée. Aussi préalablement à l'exécution de l'étape de sauvegarde 110, le procédé vérifie au moyen du test 02 que le sémaphore S est libre. Si le sémaphore S n'est pas libre, le test 02 reboucle 5 sur lui-même et réalise ainsi une attente. Dès que le sémaphore S est libre la deuxième tâche 12 le prend, le rendant ainsi indisponible pour une autre tâche, particulièrement la première tâche 11. La détention du sémaphore S autorise la deuxième tâche 12 à réaliser l'étape de sauvegarde 110. A l'issue, le sémaphore S est libéré. Ainsi l'étape de sauvegarde 110 est réalisée dans une zone d'exclusion mutuelle, figurée par une accolade, 10 et s'étendant de la prise à la libération du sémaphore S. Selon un autre mode de réalisation illustré à la figure 2, la protection des données est réalisée, dans les deux sens, de la première tâche 11 vers la deuxième tâche 12, et réciproquement de la deuxième tâche 12 vers la première tâche 11, au moyen de tâches intermédiaires 13, 14 déclenchées par chaînage. 15 Selon cet autre mode de réalisation, illustré à la figure 2, le premier sens d'échange, soit entre la première tâche 11 et la deuxième tâche 12, qui échange les données D12, est protégé au moyen d'une première tâche intermédiaire 13, comme dans le premier mode de réalisation. De manière symétrique, le deuxième sens d'échange, soit entre la deuxième 20 tâche 12 et la première tâche 11, qui échange les données D21, est protégé au moyen d'une deuxième tâche intermédiaire 14. Ainsi, si l'on observe d'abord du côté de la première tâche 11, le procédé comprend les étapes suivantes réalisées en séquence. Une première étape comprend le lancement 10 de la première tâche 11. Pour travailler, la première tâche 11 a besoin des 25 données D21 en provenance de la deuxième tâche 12. Aussi une deuxième étape comprend une lecture 20, par la première tâche 11, des données D21 produites par la deuxième tâche 12. L'étape suivante comprend le principal de la première tâche 11 qui réalise effectivement sa fonction. Au cours de cette étape est réalisée la production 30 des données D12 à l'attention de la deuxième tâche 12. Ces données D12 produites peuvent 30 ensuite, au cours d'une étape d'écriture 40, être écrites par la première tâche 11. Une fois cette étape d'écriture 40 réalisée, une étape de déclenchement 50, réalisant un lancement de la première tâche intermédiaire 13 est réalisée, par exemple par la première tâche 11. La première tâche 11 est alors terminée. Alternativement, le déclenchement 50 de la première tâche intermédiaire 13 peut être réalisé par le système d'exploitation lorsque la 35 première tâche 11 se termine. Ce qui est important est que le déclenchement 50 soit postérieur à la fin de l'étape d'écriture 40. Cette condition assure que la lecture 60 n'est pas en collision avec l'écriture 40. 3065550 9 Après son lancement la première tâche intermédiaire 13 procède à la lecture 60 des données D12 écrites et à leur écriture pour mise à disposition pour la deuxième tâche 12. Pour cela la première tâche intermédiaire 13 réalise une copie des données D12. Ensuite la première tâche intermédiaire 13 se termine. 5 Il convient de noter que la première tâche intermédiaire 13 est volontairement réduite afin que son temps d'exécution reste court. Ceci facilite son intégration en ce qu'elle arrive mieux à « s'intercaler » et risque ainsi moins de perturber les équilibres temps réels entre les autres tâches. Selon une caractéristique, le déclenchement 50 de la première tâche 10 intermédiaire 13 est réalisé par un mécanisme appelé chaînage. Un tel mécanisme, s'apparente au lancement d'un programme ou d'un sous-programme, s'applique ici à une tâche et peut être réalisé y compris entre des coeurs différents. Un tel chaînage débute l'exécution de la première tâche intermédiaire 13 au plus tôt après avoir été déclenché. Ceci garantit une condition temporelle pour l'exécution de la première tâche intermédiaire 15 13: strictement postérieure à l'écriture 40, garantissant la protection des données D12 et donc la non collision entre l'écriture 40 par la première tâche 11 et la lecture 60 par la première tâche intermédiaire 13. Selon une autre caractéristique importante, afin d'éviter toute collision entre la première tâche intermédiaire 13 et la deuxième tâche 12, la première tâche intermédiaire 20 13 s'exécute sur le même coeur C2 que la deuxième tâche 12, et ce coeur C2 est configuré en mode non préemptif. Ce mode non préemptif peut être global. A minima, il convient que soit interdite toute préemption de la deuxième tâche 12 sur la première tâche intermédiaire 13 et réciproquement toute préemption de la première tâche intermédiaire 13 sur la deuxième tâche 12. 25 Le chaînage permet un déclenchement sur un coeur différent. Un coeur Cl, C2 est par définition mono-tâche, en ce qu'il ne peut exécuter qu'une partie de programme ou tâche, à la fois. Aussi la première tâche intermédiaire 13 et la deuxième tâche 12 ne peuvent s'exécuter en même temps. Le fait que le coeur C2 soit configuré pour empêcher toute préemption mutuelle entre la première tâche intermédiaire 13 et la deuxième tâche 12 30 assure de plus que la deuxième tâche 12 ne peut pas interrompre l'exécution de la première tâche intermédiaire 13. Ainsi lorsque la première tâche intermédiaire 13 réalise l'écriture/mise à disposition 70, la deuxième tâche 12 est nécessairement dormante. De même, lorsque la deuxième tâche 12 réalise une lecture 90 des données, la première tâche intermédiaire 13 est nécessairement dormante. Aussi les opérations concurrentes 35 d'écriture 70, par la première tâche intermédiaire 13, et de lecture 90, par la deuxième tâche 12, ne peuvent entrer en collision. 3065550 10 Observons maintenant du côté de la deuxième tâche 12, toujours sur la figure 2. Le procédé comprend les étapes suivantes réalisées en séquence. Une première étape comprend le lancement 80 de la deuxième tâche 12. Pour travailler, la deuxième tâche 12 a besoin des données D12 en provenance de la première tâche 11. Aussi une 5 deuxième étape comprend une lecture 90, par la deuxième tâche 12, des données D12 produites par la première tâche 11 ou plus précisément une copie des données D12, réalisée par la première tâche intermédiaire 13 et écrites 70. L'étape suivante comprend le principal de la deuxième tâche 12 qui réalise effectivement sa fonction. Au cours de cette étape est réalisée la production 100 des données D21 à l'attention de la première tâche 11. 10 Ces données D21 produites peuvent ensuite, au cours d'une étape d'écriture 110, être sauvegardées/écrites par la deuxième tâche 12. Une fois cette étape d'écriture 110 réalisée, une étape de déclenchement 120, réalisant un lancement de la deuxième tâche intermédiaire 14 est réalisée, par exemple par la deuxième tâche 12. La deuxième tâche 12 est alors terminée. Alternativement, le 15 déclenchement 120 de la deuxième tâche intermédiaire 14 peut être réalisé par le système d'exploitation lorsque la deuxième tâche 12 se termine. Ce qui est important est que le déclenchement 120 soit postérieur à la fin de l'étape d'écriture 110. Cette condition assure que la lecture 130 n'est pas en collision avec l'écriture 110. Après son lancement la deuxième tâche intermédiaire 14 procède à la 20 lecture 130 des données D21 écrites et à leur écriture 140 pour mise à disposition pour la première tâche 11. Pour cela la deuxième tâche intermédiaire 14 réalise une copie des données D21. Ensuite la deuxième tâche intermédiaire 14 se termine. Il convient de noter que la deuxième tâche intermédiaire 14 est volontairement réduite afin que son temps d'exécution reste court. Ceci facilite son intégration en ce qu'elle 25 arrive mieux à « s'intercaler » et risque ainsi moins de perturber les équilibres temps réels entre les autres tâches. Selon une caractéristique, le déclenchement 120 de la deuxième tâche intermédiaire 14 est réalisé par un mécanisme appelé chaînage. Un tel mécanisme, s'apparente au lancement d'un programme ou d'un sous-programme, s'applique ici à une 30 tâche et peut être réalisé y compris entre des coeurs différents. Un tel chaînage débute l'exécution de la deuxième tâche intermédiaire 14 au plus tôt après avoir été déclenché. Ceci garantit une condition temporelle pour l'exécution de la deuxième tâche intermédiaire 14: strictement postérieure à l'écriture 110, garantissant la protection des données D21 et donc la non collision entre l'écriture 110 par la deuxième tâche 12 et la lecture 130 par la 35 deuxième tâche intermédiaire 14. Selon une autre caractéristique importante, afin d'éviter toute collision entre la deuxième tâche intermédiaire 14 et la première tâche 11, la deuxième tâche intermédiaire 3065550 11 14 s'exécute sur le même coeur Cl que la première tâche 11, et ce coeur Cl est configuré en mode non préemptif. Ce mode non préemptif peut être global. A minima, il convient que soit interdite toute préemption de la première tâche 11 sur la deuxième tâche intermédiaire 14 et réciproquement toute préemption de la deuxième tâche intermédiaire 14 sur la 5 première tâche 11. Le chaînage permet un déclenchement sur un coeur différent. Un coeur Cl, 02 est par définition mono-tâche, en ce qu'il ne peut exécuter qu'une partie de programme ou tâche, à la fois. Aussi la deuxième tâche intermédiaire 14 et la première tâche 11 ne peuvent s'exécuter en même temps. Le fait que le coeur Cl soit configuré pour empêcher 10 toute préemption mutuelle entre la deuxième tâche intermédiaire 14 et la première tâche 11 assure de plus que la première tâche 11 ne peut pas interrompre l'exécution de la deuxième tâche intermédiaire 14. Ainsi lorsque la deuxième tâche intermédiaire 14 réalise l'écriture/mise à disposition 140, la première tâche 11 est nécessairement dormante. De même, lorsque la première tâche 11 réalise une lecture 20 des données, la deuxième tâche 15 intermédiaire 14 est nécessairement dormante. Aussi les opérations concurrentes d'écriture 140, par la deuxième tâche intermédiaire 14, et de lecture 20, par la première tâche 11, ne peuvent entrer en collision. Une tâche intermédiaire 13, 14 chaînée, peut ainsi être utilisée pour protéger les échanges de données dans les deux sens. 20 Selon une autre caractéristique, le procédé peut être utilisé pour échanger des données entre une première tâche 11 et une deuxième tâche 12 présentant des niveaux de sécurité différents. Ainsi, par exemple dans l'automobile, la sécurité est définie par la norme ASIL (ISO 26262) qui détermine des niveaux de sécurité différents. Un niveau de sécurité est associé à des contraintes. Le procédé d'échange selon l'invention est particulièrement 25 adapté à interfacer deux tâches de niveaux de sécurité différents, en ce qu'il permet de bien encapsuler chaque niveau de sécurité au sein d'une tâche propre et que les échanges sont bien formalisés et protégés. De plus les étapes spécifiques d'échange entre les deux tâches 11, 12, permettent avantageusement de réaliser toute adaptation éventuellement nécessaire au 30 changement de niveau de sécurité des données D12, D21 et ce de manière définie et localisée. Ainsi pour les données D12 échangées entre les première et deuxième tâches 11, 12, une étape d'adaptation X1 peut être disposée à tout endroit entre leur production 30 par la première tâche 11 et leur consommation lors de l'étape de production 100 par la 35 deuxième tâche 12. Soit dans la première tâche 11, entre l'étape de production 30 et l'étape d'écriture 40, ou dans la deuxième tâche 12 entre l'étape de lecture 90 et l'étape de 3065550 12 production 100. De manière préférentielle une telle adaptation X1 peut être réalisée par la première tâche intermédiaire 13, entre les étapes de lecture 60 et d'écriture 70. De même pour les données D21 échangées entre la deuxième tâche 12 et la première tâche 11, une étape d'adaptation X2 peut être disposée à tout endroit entre leur 5 production 100 par la deuxième tâche 12 et leur consommation lors de l'étape de production 30 par la première tâche 11. Soit dans la deuxième tâche 12, entre l'étape de production 100 et l'étape de sauvegarde/écriture 110, ou dans la première tâche 11 entre l'étape de récupération/lecture 20 et l'étape de production 30. De manière préférentielle une telle adaptation X2 peut être réalisée, le cas échéant, par la deuxième tâche 10 intermédiaire 14, entre les étapes de lecture 130 et d'écriture 140. De même une éventuelle conversion des données peut être réalisée à l'occasion des échanges. Une telle conversion peut concerner un changement de type ou de format de données, ou encore un changement d'échelle des données. Les conversions sont figurées associées avec les adaptations, en ce que leurs 15 localisations possibles sont les mêmes. Les boites X1 ou X2 sont indiquées en pointillés car tant les opérations d'adaptation que de conversion sont optionnelles. De plus adaptation et conversion ne sont pas nécessairement situées au même endroit, leurs localisations sont indépendantes l'une de l'autre. Ainsi par exemple, une adaptation des données D12 peut être réalisée dans la boite X1 suivant la production 30 alors qu'une 20 conversion du même flux de données D12 peut être réalisée dans la boîte X1 située entre lecture 60 et écriture 70 dans la première tâche intermédiaire 13. Il a été vu que les deux tâches 11, 12, peuvent être ou non corrélées temporellement. Ainsi, selon une autre caractéristique, le lancement 10 de la première tâche 11 est réalisé par un premier séquenceur K1 selon une première récurrence, et le 25 lancement 80 de la deuxième tâche 12 est réalisé par un deuxième séquenceur K2 selon une deuxième récurrence. L'invention présente un avantage important en ce qu'elle permet de réaliser des échanges protégés de données, quelles que soient les récurrences respectives, en type et en fréquence, de la première tâche 11 et de la deuxième tâche 12. 30 Ainsi chacune des récurrences peut être indépendamment de type régulier ou irrégulier. Une récurrence de type régulier est une récurrence associée à un phénomène périodique régulier, selon une période constante. Une telle récurrence est typiquement séquencée par un séquenceur de type horloge. Une telle récurrence est encore caractérisée par sa période ou fréquence fixe. Une récurrence de type irrégulier est une 35 associée à un phénomène récurrent mais pas nécessairement périodique. Un exemple d'un tel phénomène, particulièrement important dans le domaine automobile et plus particulièrement du contrôle moteur, est un évènement associé à une position angulaire 3065550 13 particulière du moteur à explosion, tel le point mort haut (ou bas). Cet évènement est récurrent sans être périodique en ce que sa pseudo-période varie avec le régime moteur. Selon une autre caractéristique, la première récurrence et la deuxième récurrence sont de même type. 5 Selon une autre caractéristique, les première et deuxième récurrences sont de type régulier, préférentiellement de fréquences multiples l'une de l'autre. Avec un cas particulier où les fréquences sont sensiblement identiques. Ainsi selon un mode de réalisation, la première tâche 11 et la deuxième tâche 12 sont séquencées de manières régulières selon une même période, cependant que leur séquenceurs K1, K2 respectifs ne 10 sont pas nécessairement synchronisés et peuvent fonctionner chacun selon son horloge propre. Dans un tel cas la corrélation temporelle des deux tâches 11, 12 n'est pas garantie. Cependant la robustesse de l'invention permet de garantir la protection et ainsi la consistance des données D12, D21, y compris dans ce cas. Selon une autre caractéristique avantageuse, le procédé est particulièrement 15 adapté à l'intégration d'un logiciel non modifiable. On entend dans la présente, par le terme « logiciel non modifiable » une portion de logiciel que l'on ne peut ou que l'on ne souhaite pas modifier. Il peut s'agir d'un logiciel existant dont le code source est perdu et qu'il n'est pas possible de modifier. Il peut encore s'agir d'un logiciel que, pour une raison technique, commerciale, réglementaire ou autre, l'on ne souhaite pas modifier. Il s'agit alors d'intégrer 20 ce logiciel comme une boite noire. Le procédé selon l'invention permet une telle intégration en plaçant ledit logiciel dans la deuxième tâche 12, préférentiellement au sein de l'étape de production 100. Ceci est avantageusement possible y compris pour un logiciel initialement conçu pour un système mono-coeur. De même ceci est avantageusement possible y compris pour un logiciel initialement conçu pour un autre niveau de sécurité. 25 Le procédé selon l'invention est ainsi avantageusement un moyen d'intégration de modules hétéroclites. Le procédé selon l'invention est avantageusement appliqué à la réalisation d'un logiciel de contrôle moteur. L'invention est décrite dans ce qui précède à titre d'exemple. Il est entendu que la personne 30 de l'art est à même de réaliser différentes variantes de réalisation de 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é, pour un système multicceur, d'échange protégé de données (D12, D21), entre une première tâche (11) s'exécutant sur un premier coeur (Cl) et une deuxième tâche (12) s'exécutant sur un deuxième coeur (02), différent du premier 5 coeur (Cl), caractérisé en ce qu'il comprend les étapes suivantes réalisées en séquence : - lancement (10) de la première tâche (11), - récupération (20), par la première tâche (11), des données (D21) produites par la deuxième tâche (12), 10 - production (30), par la première tâche (11) de données (D12), - écriture (40), par la première tâche (11), des données (D12) produites, - déclenchement (50), par la première tâche (11), de l'exécution d'une première tâche intermédiaire (13) par chaînage, - lecture (60), par la première tâche intermédiaire (13), des données (D12) écrites et 15 - écriture (70), par la première tâche intermédiaire (13), des données (D12), pour la deuxième tâche (12). 2. Procédé selon la revendication 1, où la première tâche intermédiaire (13) s'exécute sur le même coeur (02) que la deuxième tâche (12), et ce coeur (02) est configuré pour interdire toute préemption de la deuxième tâche (12) sur la première tâche 20 intermédiaire (13) et de la première tâche intermédiaire (13) sur la deuxième tâche (12). 3. Procédé selon l'une quelconque des revendications 1 à 2, comprenant encore les étapes suivantes réalisées en séquence : - lancement (80) de la deuxième tâche (12), - lecture (90), par la deuxième tâche (12), des données (D12) écrites par la 25 première tâche intermédiaire (13), - production (100), par la deuxième tâche (12), de données (D21), - écriture (110), par la deuxième tâche (12), des données (D21) produites, - déclenchement (120), par la deuxième tâche (12), de l'exécution d'une deuxième tâche intermédiaire (14) par chaînage, 30 - lecture (130), par la deuxième tâche intermédiaire (14), des données (D21) écrites et 3065550 15 - écriture (140), par la deuxième tâche intermédiaire (14), des données (D21), pour la première tâche (11). 4. Procédé selon la revendication 3, où la deuxième tâche intermédiaire (14) s'exécute sur le même coeur (Cl) que la première tâche (11), et ce coeur (Cl) est 5 configuré pour interdire toute préemption de la première tâche (11) sur la deuxième tâche intermédiaire (14) et de la deuxième tâche intermédiaire (14) sur la première tâche (11). 5. Procédé selon l'une quelconque des revendications 1 à 2, comprenant encore les étapes suivantes réalisées en séquence : - lancement (80) de la deuxième tâche (12), 10 - lecture (90), par la deuxième tâche (12), des données (D12) écrites par la première tâche intermédiaire (13), - production (100), par la deuxième tâche (12), de données (D21), - sauvegarde (110), par la deuxième tâche (12), des données (D21) produites, - où l'étape de récupération (20), par la première tâche (11), et l'étape de 15 sauvegarde (110), par la deuxième tâche (12), sont réalisées en exclusion mutuelle, préférentiellement par utilisation d'un sémaphore (S) unique commun. 6. Procédé selon l'une quelconque des revendications 1 à 5, où la première tâche (11) et la deuxième tâche (12) présentent des niveaux de sécurité différents. 7. Procédé selon la revendication 6, comprenant encore les étapes de : 20 - adaptation (X1) de niveau de sécurité des données (D12), par la première tâche intermédiaire (13), entre les étapes de lecture (60) et d'écriture (70) par la première tâche intermédiaire (13) ou par la deuxième tâche (12), entre les étapes de récupération/lecture (90) et de production (100) par la deuxième tâche (12), - adaptation (X2) de niveau de sécurité des données (D21), par la deuxième tâche 25 intermédiaire (14), entre les étapes de lecture (130) et d'écriture (140) par la deuxième tâche intermédiaire (14) ou par la première tâche (11), entre les étapes de récupération/lecture (20) et de production (30) par la première tâche (11) ou par la deuxième tâche (12), entre les étapes de production (100) et de sauvegarde/écriture (110) par la deuxième tâche (12). 30 8. Procédé selon l'une quelconque des revendications 1 à 7, comprenant encore les étapes de : 3065550 16 - conversion (X1) des données (D12), par la première tâche intermédiaire (13), entre les étapes de lecture (60) et d'écriture (70) par la première tâche intermédiaire (13) ou par la deuxième tâche (12), entre les étapes de production (100) et de sauvegarde/écriture (110) par la deuxième tâche (12), - conversion (X2) des données (D21), par la deuxième tâche intermédiaire (14), entre les étapes de lecture (130) et d'écriture (140) par la deuxième tâche intermédiaire (14) ou par la première tâche (11), entre les étapes de récupération/lecture (20) et de production (30) par la première tâche (11) ou par la deuxième tâche (12), entre les étapes de production (100) et de sauvegarde/écriture (110) par la deuxième tâche (12). 9. Procédé selon l'une quelconque des revendications 1 à 8, où le lancement (10) de la première tâche (11) est réalisé par un premier séquenceur (K1) selon une première récurrence, et le lancement (80) de la deuxième tâche (12) est réalisé par un deuxième séquenceur (K2) selon une deuxième récurrence. 10. Procédé selon la revendication 9, où la première récurrence et/ou la deuxième récurrence est de type régulier ou irrégulier. 11. Procédé selon la revendication 10, où la première récurrence et la deuxième récurrence sont de même type. 12. Procédé selon l'une quelconque des revendications 9 à 11, où la première récurrence et la deuxième récurrence sont de type régulier, préférentiellement de fréquences multiples, encore préférentiellement de fréquences sensiblement identiques. 13. Procédé selon l'une quelconque des revendications 1 à 12, où la deuxième tâche (12) encapsule un logiciel existant non modifiable. 14. Procédé selon l'une quelconque des revendications 1 à 13, appliqué à un contrôle moteur.