FR 2756069 A1 19980522 FR 9714309 A 19971114 La présente invention concerne un appareil de commande, notamment pour une utilisation dans un véhicule automobile, comprenant un calculateur, une mémoire de programmes, une mémoire de données et des horloges au moyen desquelles sont produits des signaux d'horloge servant à l'exécution de programmes de calculateur. De tels appareils de commande sont par exemple installés dans des véhicules automobiles, en tant que commande de boîte de vitesses, commande de moteur ou analogue, mais peuvent aussi être utilisés à d'autres fins. Les appareils de commande contiennent un calculateur, par exemple sous forme d'un microcontrôleur ou micro- ordinateur, qui exécute des programmes d'application relatifs à chaque utilisation considérée. Dans l'appareil de commande, des durées doivent être mesurées et des déroulements dans le temps commandés. Du fait de l'utilisation aujourd'hui courante de systèmes de fonctionnement dans la technique des microcontrôleurs, il n'existe souvent plus de durées de cycle fixes, ou bien elles varient souvent. De ce fait, la mesure de durées et la commande de déroulements dans le temps sont difficiles. Dans des appareils classiques de commande, ou bien on utilise les durées de cycle en tant que impulsion d'horloge, ou bien ce sont des horloges (timers) externes ou internes au calculateur qui servent à produire les impulsions d'horloge. On utilise aussi des variables de compteur ou champs de compteur d'horloge qui sont cadencés par l'un des types d'impulsions d'horloge précédemment cités. Une variable d'horloge propre est nécessaire pour chaque application dans les programmes à exécuter. Par ailleurs, la mesure des durées dépend de la durée de cycle ou de la résolution de l'horloge. Dans un appareil connu de commande qui est réalisé en tant que système de commande d'allumage pour véhicule automobile, le début et la fin de d'excitation des bobines d'allumage sont déterminés en fonction de plusieurs paramètres de fonctionnement du moteur au moyen d'un microprocesseur, à des intervalles de temps déterminés. Le programme principal peut être interrompu par trois sauts différents ayant respectivement des priorités différentes (US 4 347 570). L'invention a pour but de fournir un appareil de commande dans lequel la mesure de durées et la commande du déroulement dans le temps sont indépendantes de durées de cycle. A cet effet, l'invention a pour objet un appareil de commande, du type générique considéré, caractérisé en ce qu'il comprend: - une horloge pilotée par quartz ayant une fréquence d'horloge prédéterminée; - une horloge qui est cadencée par l'horloge commandée par quartz et par laquelle une impulsion d'horloge globale est délivrée en tant que durée de référence pour toutes les parties de programme du calculateur, et plusieurs horloges commandées par programme qui sont gérées de manière dynamique et sont appelées par le programme de calculateur respectivement pour chaque mesure de durée associée à une tâche et qui, une fois la tâche achevée, sont disponibles pour d'autres tâches. L'appareil de commande conforme à l'invention peut aussi présenter une ou plusieurs des particularités suivantes: - le calculateur réalisé sous forme d'un microcontrôleur est pourvu d'une horloge interne libre dont l'impulsion d'horloge présente une résolution d'approximativement une milliseconde, - l'impulsion d'horloge globale couvre un intervalle de temps de zéro à 65535 millisecondes avec une résolution d'approximativement une milliseconde, - les horloges commandées par programme sont gérées de façon dynamique avec plusieurs fonctions C (blocs de fonction). Les avantages de l'invention résident notamment dans le fait que les programmes d'application (appelés aussi ci-après logiciels d'application ou SW d'application) peuvent plus facilement être "portables" et peuvent s'assembler d'une manière modulaire. La gestion dynamique d'horloges commandées par programme permet un gain de place de mémoire RAM, étant donné qu'une horloge ou timer propre n'a pas à être disponible pour chaque application, mais qu'au contraire, les horloges peuvent être partagées avec d'autres applications d'une manière décalée dans le temps. En effet, une fois terminée chaque tâche à exécuter, une horloge est disponible pour d'autres parties de programme. Des exemples de mise en oeuvre de l'invention sont exposés ci-après en regard des dessins. On voit: à la figure 1, un appareil de commande conforme à l'invention installé pour commander une boîte de vitesses automatique de véhicule automobile, à la figure 2, l'intervalle de temps couvert par une horloge commandée par programme de l'appareil de commande de la figure 1, à la figure 3, une représentation schématique de la gestion dynamique de plusieurs horloges commandées par programme présentes dans l'appareil de commande de la figure 1, à la figure 4, un tableau comportant une association de numéros d'horloge avec des identifications d'horloge, à la figure 5, une horloge libre de l'appareil de commande de la figure 1 qui produit une impulsion d'horloge globale et, aux figures 6 à 8, différentes sections partielles de la figure 3 servant à exposer la gestion dynamique d'horloges dans l'appareil de commande de la figure 1. Un appareil de commande 1, qui est réalisé ici en tant qu'appareil de commande de boîte de vitesses, est relié à une boîte de vitesses automatique 3 par plusieurs lignes de données ou un bus 2. L'appareil de commande 1 contient un microcontrôleur ou microprocesseur 4, une mémoire de programmes 5, qui est réalisée sous forme d'une mémoire morte, une mémoire de données ou RAM 6, plusieurs étages d'attaque de sortie 7 assemblés en un bloc et plusieurs horloges dynamiques 8 (au nombre de huit dans le présent exemple de réalisation). Un bus interne 10 relie les composantes citées 4 à 8 de l'appareil de commande 1 entre eux et à une sortie de signaux 11. La boîte de vitesses automatique 3 contient quatre actionneurs 12 représentés schématiquement, par exemple des valves électrohydrauliques, qui sont commandés par l'appareil de commande 1 et qui exécutent des opérations de commutation dans la boite de vitesses en engageant et libérant différents embrayages et actionnant et libérant différents freins. La boîte de vitesses automatique 3 est connue d'une manière générale et n'est pas décrite ici plus en détail. L'intervalle de temps qui est couvert par des horloges prévues dans l'appareil de commande 1 est représenté d'une manière schématique à la figure 2. Dans le cas d'une résolution, c'est-à-dire de la plus petite unité de temps mesurable, de 1 ms, une horloge commandée par programme 18 comptant librement, qui est encore à exposer, peut couvrir un intervalle de temps de 65535 ms. Elle contient un compteur à 16 bits. Les programmes d'application respectifs - ci- après appelés logiciels d'application ou applicatifs - sont représentés dans leur totalité par un bloc 14 (figure 3). Entre celui-ci et une interface interne de programme d'entrées/sorties (aussi: interface I/O) 15, les signaux suivants sont échangés sur des lignes d'interface 16, tmr représentant toujours l'horloge commandée par programme: tmr #: est le numéro d'une horloge qui a été prescrite par une partie de programme. Si ce numéro est transmis par l'interface 15 à l'applicatif 14, cela signifie que l'association ou demande de cette horloge a eu lieu avec succès. unique id: est une identification unique (ci- après id) d'une horloge qui ne peut être affectée qu'une fois pour une application et ne peut pas être utilisée en double. tmr val: est l'intervalle de temps ou valeur de comptage de temps préfixé pour une horloge prescrite. Une id constitue un numéro qui est affecté non seulement pour des horloges, mais aussi pour une durée de surveillance (par exemple de 100 à 500 ms), pour un compteur, etc.. L'appareil de commande 1 comprend les horloges commandées par programme suivantes qui sont réalisées dans le microcontrôleur 4: - un assez grand nombre d'horloges commandées par programme (appelés aussi ci-après horloges logicielles) qui sont identifiées par des contenus d'emplacement de mémoire 20 et qui sont cadencées par une horloge pilote à quartz (aussi: horloge matérielle) 17 et - une horloge commandée par programme tournant ou comptant librement 18 qui est cadencée par l'horloge pilote à quartz 17. Une fonction dry visrtmr3 (bloc de fonction 21 aux figures 6, 7 et 8) correspond à l'horloge pilote 17; pour être complet, elle est représentée au dessin sous forme d'une fonction comportant une interface vers le logiciel d'application. Dans l'exemple de réalisation ici décrit, il existe huit horloges logicielles 20, mais il est possible d'augmenter leur nombre à volonté: il doit être adapté aux besoins de chaque cas. D'une manière avantageuse, il est prévu autant d'horloges logicielles qu'il en est au maximum besoin simultanément dans un cas d'application. C'est ainsi qu'il est par exemple prévu 32 horloges logicielles dans un autre cas d'application. Pour appeler une horloge libre pour une tâche à mettre en oeuvre par un programme d'application, la déterminer et l'occuper, on utilise quatre fonctions représentées par des blocs de fonction 22 à 25 (figure 3). Ces fonctions sont réalisées sous forme de fonctions C dans le présent exemple de réalisation. L'affectation d'une horloge à l'aide d'une fonction drv tmr _id (bloc de fonction 25) a lieu comme suit: Avant qu'une horloge puisse être utilisée, une id d'horloge unique doit être interrogée avec la fonction dry tmr id. La fonction utilise une variable statique qui, à chaque appel, est incrémentée et produit alors une identification id unique qui est retournée à la zone de programmes d'application affectée. Cette id doit être utilisée en tant que référence pour tous les autres accès à l'horloge associée. Comme variante à cette façon de procéder, d'autres identifications peuvent par exemple être utilisées comme id ou ids de tâches qui sont générées par l'application. En tout état de cause, on doit dans ce cas prendre soin que chaque id reste unique, c'est-à-dire qu'elle ne soit affectée qu'une seule fois. Le déclenchement d'une horloge logicielle à l'aide d'une fonction drytmrset (bloc de fonction 22) s'effectue en trois étapes: - première étape (figure 6): le programme d'application transmet une id unique et la durée de comptage prévue à la fonction de prescription d'horloge. -7 La fonction de prescription d'horloge détermine alors la prochaine horloge logicielle libre. Celui-ci est par exemple l'horloge logicielle numéro 7 (hexadecimal: 80). Les horloges logicielles sont identifiées par les contenus de mémoire 20 qui sont représentés aux figures 3 à 8 par des cases comportant les numéros de compteur. Deux emplacements de mémoire sont associés à chaque horloge logicielle: un premier emplacement de mémoire 26, dans lequel est inscrite la valeur de comptage de durée, c'est-à-dire l'intervalle de temps à décompter, et un second emplacement de mémoire 27 dans lequel est inscrite l'id d'horloge lors de l'association d'une horloge à une tâche. La fonction de prescription d'horloge détermine alors la prochaine horloge logicielle 20 libre. Il s'agit ici de l'horloge numéro 7 (hexadecimal: 80). Les données devant alors être transmises par l'applicatif 14 à l'interface 15 sont indiquées à la figure 6 par un rectangle en lignes en pointillés. deuxième étape (figure 7): la fonction d'horloge fixe l'id unique pour l'horloge tmrlOid, le bit de statut d'horloge correspondant tmr_stt_byt = 10 et l'intervalle de temps à décompter tmrlOval. Le numéro de l'horloge associée tmr # est retourné à l'applicatif, ainsi que cela est indiqué au dessin par un rectangle en lignes en pointillés. - 3ème étape (figure 8): un sous-programme de service IR (interruption) dry isr tmr3 déclenché d'une manière continue (bloc de fonction 21: correspond, comme indiqué, au générateur de durée d'impulsion 17) vérifie le bit de statut d'horloge. Si un bit est forcé, la valeur de comptage de temps associée est comparée à zéro. Si elle est différente de zéro, elle est réduite de un. Si elle est égale à zéro, le bit de statut est effacé. i2756069 Le rechargement d'une horloge au moyen de la fonction drv_tmr_rel a lieu de la manière qui suit (bloc de fonction 23): - l'applicatif transmet une id unique à la fonction de rechargement d'horloge. Cette id doit être la même que celle qui a été utilisée pour le premier déclenchement de l'horloge. Le numéro d'horloge, qui a été retourné par la fonction de déclenchement drytmr_set, doit également être envoyé à la fonction de rechargement. Par ailleurs, le nouvel intervalle de temps pendant lequel l'horloge doit tourner doit être transmis à la fonction de rechargement. - la fonction de rechargement d'horloge interroge l'horloge correspondant au numéro d'horloge et vérifie l'id unique. Si les deux valeurs ne coïncident pas, l'horloge est déjà utilisée pour une autre tâche et un délai d'attente (en anglais timeout) a eu lieu. Par ailleurs, la fonction vérifie si la valeur de comptage de temps est égale à zéro. Dans ce cas, la valeur de comptage de temps "0" est retournée à la fonction qui appelle et le rechargement de l'horloge a été sans succès. Si le numéro d'horloge et l'id unique coïncident et si l'horloge tourne encore, elle est rechargée à la valeur voulue de comptage de temps. L'interrogation d'un statut d'horloge à l'aide de la fonction drytmrstt (bloc de fonction 24) a lieu de la manière suivante: - l'applicatif transmet une id unique à la fonction d'interrogation d'horloge. Cette id doit être la même que celle qui a été utilisée lors du premier déclenchement de l'horloge. Par ailleurs, le numéro d'horloge qui a été retourné par la fonction drv_tmr_set doit être transmis à la fonction d'interrogation. La figure 4 représente l'association des numéros de bit des différentes horloges commandées par programme aux identifications d'horloge (id) qui correspondent aux contenus de mémoire 20. L'horloge commandée par programme comptant librement 18 (figure 5) contient une variable qui sert de référence de temps globale et qui est augmenté de un à chaque appel d'un sous-programme d'interruption (IR). Cette valeur de comptage de temps s'écoulant librement est initialisée à la valeur zéro à chaque démarrage de programme et compte alors vers le haut jusqu'à sa valeur maximale (65535 ms). Le sous-programme servant d'horloge pilote 17 (ou d'horloge matérielle) est commandé par matériel, à savoir commandé par un quartz, et il a une durée de période de une ms. D'une manière correspondante, la résolution dans le temps de l'horloge logicielle s'écoulant librement 18 vaut une ms, ce qui signifie qu'une valeur de comptage vaut une ms. Dans le cas des horloges dynamiques commandées par programme décrites précédemment, chaque horloge est disponible, après l'achèvement de la tâche à laquelle elle été associée, pour une autre tâche quelconque. Cela réduit les besoins en capacité de mémoire RAM pour un appareil de commande. REVENDICATIONS 1. Appareil de commande (1), notamment pour une utilisation dans un véhicule automobile, comprenant un calculateur (4), une mémoire de programmes (5), une mémoire de données (6) et des horloges au moyen desquelles sont produits des signaux d'horloge servant à l'exécution de programmes de calculateur, caractérisé en ce qu'il comprend: - une horloge pilotée par quartz (17) ayant une fréquence d'horloge prédéterminée, - une horloge (18) qui est cadencée par l'horloge pilotée par quartz (17) et par laquelle une impulsion d'horloge globale est délivrée en tant que durée de référence pour toutes les parties de programme du calculateur, et plusieurs horloges commandées par programme (20) qui sont gérées de manière dynamique et sont appelées par le programme de calculateur respectivement pour chaque mesure de durée associée à une tâche et qui, une fois la tâche achevée, sont disponibles pour d'autres tâches. 2. Appareil de commande suivant la revendication 1, caractérisé en ce que le calculateur (4) réalisé sous forme d'un microcontrôleur est pourvu d'une horloge interne libre (18) dont l'impulsion d'horloge présente une résolution d'approximativement une milliseconde. 3. Appareil de commande suivant l'une des revendications précédentes, caractérisé en ce que l'impulsion d'horloge globale couvre un intervalle de temps de zéro à 65535 millisecondes avec une résolution d'approximativement une milliseconde. 4. Appareil de commande suivant l'une des revendications précédentes, caractérisé en ce que les horloges commandées par programme (20) sont gérées de façon dynamique avec plusieurs fonctions C (blocs de fonction 22 à 25).