[Programmation] Problème de compilation d'un calcul sur XC8
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

Problème de compilation d'un calcul sur XC8



  1. #1
    scaypapa

    Problème de compilation d'un calcul sur XC8


    ------

    Bonjour,

    Je rencontre encore un problème de compilation d'un calcul sur XC8. Peut-être que ce sujet serait mieux en programmation, mais vu que ça concerne un calcul de timer, je ne sais pas trop...
    Je calcule un Timer2 en fonction d'un Tempo lu dans un fichier Midi. Le tempo est en µs/noire, redivisé par la variable DivisionTps.
    Mon Timer doit générer une interruption toutes les Tempo/DivisionTps µs.
    Un compteur (baseDelay) est utilisé si le Timer lui-n'est pas suffisant pour atteindre la durée recherchée.
    Je fais des calculs pour rechercher la valeur la plus proche possible de l'objectif.

    Code:
    #include <xc.h>
    #include <math.h>
    #define _XTAL_FREQ 16000000
    #define MIN(x,y)        x < y ? x : y
    #define MAX(x,y)        x > y ? x : y
    
    void Config_Tmr(void) {
    float frequence, denominateur, presc = 0.25, postsc[3], base[3], limite[3], calcul[3];
        char i = -1;
            frequence = _XTAL_FREQ / 4000000;
            
            do {
                // balayages des prescalers 1, 4 ou 16.
                presc *= 4; i++;
    
                // Calcul du Postscaler
                denominateur = 256 * presc * (long)DivisionTps;
                postsc[i] = MAX(0, MIN(16, round(Tempo * frequence / denominateur)));
    
                // Calcul du multiplicateur baseDelay
                denominateur *= postsc[i];
                base[i] = ceil(Tempo * frequence / denominateur);
    
                // Calcul de la limite
                denominateur *= base[i] / 256;
                limite[i] = round (Tempo * frequence / denominateur);
    
                // Calcul de l'erreur
                calcul[i] = presc * postsc[i] * base[i] * limite[i] / frequence;
                calcul[i] = fabs((calcul[i] - (Tempo/(long)DivisionTps)) * (long)DivisionTps / Tempo);
            }
            while (calcul[i] > 0.0001 && presc < 16.0);
            
            // Recherche du plus petit
            if (presc > 4.0)
            {
                if (MAX(calcul[0],calcul[1]) == calcul[0]) {
                    if (MAX(calcul[1],calcul[2]) == calcul[1])
                        i = 2;
                    else i = 1;
                } else {
                    if (MAX(calcul[0],calcul[2]) == calcul[0])
                        i = 2;
                    else i = 0;
                }
            } else if (presc > 1.0) {
                if (MAX(calcul[0],calcul[1]) == calcul[0])
                    i = 1;
                else i = 0;
            } else i = 0;
            
            // Configuration finale
            T2CONbits.T2CKPS = i;
            T2CONbits.T2OUTPS = (int)postsc[i] - 1;
            baseDelay = (int)base[i];
            PR2 = (int)limite[i] - 1;
    }
    Le calcul en lui-même fonctionne très bien (j'obtiens bien les valeurs attendues et le Timer fonctionne très bien). J'ai lancé des simulations via le PicKit3 et tout fonctionne comme attendu.
    Mais XC8 me génère un warning :
    warning: (1257) local variable "_Config_Tmr" is used but never given a value
    Savez-vous d'où peut venir cet avertissement ?

    -----
    Dernière modification par scaypapa ; 05/12/2016 à 12h24.

Discussions similaires

  1. Calcul de la taille d'une chaine à la compilation C
    Par jojo150393 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 17/10/2016, 18h14
  2. problème de compilation
    Par pouic13 dans le forum Électronique
    Réponses: 0
    Dernier message: 12/01/2015, 17h54
  3. problème de compilation
    Par Khalil_ dans le forum Électronique
    Réponses: 4
    Dernier message: 12/01/2015, 12h23
  4. Problème de compilation
    Par DADYCOKE dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 22/02/2013, 09h12
  5. problème compilation C
    Par inviteb6dc9791 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 06/04/2010, 22h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.