Table de "saut" en C
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 44

Table de "saut" en C



  1. #1
    flolarajasse

    Table de "saut" en C


    ------

    Bonjour à tous,

    Petite question ; dans mon code en C, j'ai 2 variables : ma variable d'entrée peut prendre 256 valeurs différentes (0 à 255). En fonction de cette valeur, mon autre variable aura une valeur (0 à 128). Le problème est qu'il n'y a aucune formule mathématique entre les 2 variables.
    J'ai vu qu'en assembleur, on pouvait faire une table de saut, est ce que c'est possible de faire pareil en langage C?Ou bien il faut passer par un switch case (ce qui serait très long à mon avis).

    Merci de vos réponses, et bonne journée à tous

    -----
    Java is the best!

  2. #2
    DAUDET78

    Re : Table de "saut" en C

    J'y connais rien en C ....
    Mais tu peux certainement utiliser une LookUp table
    Tu as une table en mémoire de 258 octets
    Avec la valeur d'entrée, tu viens lire la valeur correspondante dans la table .
    Dernière modification par DAUDET78 ; 20/11/2014 à 07h48.
    J'aime pas le Grec

  3. #3
    flolarajasse

    Re : Table de "saut" en C

    Salut Daudet,

    C'est ce que je cherche à faire, je vais regarder si je trouve des exemples d'application.

    Merci
    Java is the best!

  4. #4
    DAUDET78

    Re : Table de "saut" en C

    Citation Envoyé par flolarajasse Voir le message
    je vais regarder si je trouve des exemples d'application.
    Lire une valeur dans une table avec un index... tu sais pas faire ?
    J'aime pas le Grec

  5. A voir en vidéo sur Futura
  6. #5
    terriblement

    Re : Table de "saut" en C

    Le problème est de savoir ou stocker ta table, selon la mémoire disponible, et les temps d'accès/de traitement nécessaire.

    Le plus simple est de faire un énorme tableau en RAM, l'accès est rapide, mais tu risque d'avoir des temps d'accès variables (si le microcontrolleur doit changer de bank entre deux lectures). Bien sur, il faut avoir la place disponible.

    Tu as la possibilité d'utiliser l'EEPROM de ton micro si il y en a une, ou encore de stocker directement dans la mémoire flash.

    Bien sur, tu pourras retrouver toutes ces mémoires (et plus) dans des modules externes. Ne connaissant pas ton appli, difficile de se prononcer.

  7. #6
    flolarajasse

    Re : Table de "saut" en C

    Citation Envoyé par DAUDET78 Voir le message
    Lire une valeur dans une table avec un index... tu sais pas faire ?
    Tu veux parler d'aller chercher une valeur dans un tableau genre :

    Code:
    Tableau[5] = 12;  //avec 5 la 5ème case du tableau
    Tableau[9] = 26;
    Le problème est de savoir ou stocker ta table, selon la mémoire disponible, et les temps d'accès/de traitement nécessaire.
    J'ai vu sur internet qu'il disait de stocker le tableau dans la flash, donc d'utiliser l'instruction :

    Code:
    const uint8_t the_table[256] = { ... }
    Bien sur, tu pourras retrouver toutes ces mémoires (et plus) dans des modules externes. Ne connaissant pas ton appli, difficile de se prononcer.
    Si tu veux, j'utilise des interruptions, et à chaque interruption Timer (durée fixe), en fonction de ma variable d'entrée, je dois affecter une valeur à ma variable de sortie.
    Java is the best!

  8. #7
    flolarajasse

    Re : Table de "saut" en C

    J'ai regardé, j'ai 256 valeurs en entrées, et environ 45 en sorties. Pour plusieurs d'entrées qui se suivent, j'aurais la même valeur de sortie ; exemple:
    Code:
    Tableau[0] = 1;
    Tableau[1] = 1;
    Tableau[2] = 1;
    Tableau[3] = 2;
    Tableau[4] = 2;
    Tableau[5] = 2;
    Tableau[6] = 2;
    Tableau[7] = 3;
    Tableau[8] = 13;
    ...
    Java is the best!

  9. #8
    flolarajasse

    Re : Table de "saut" en C

    Je n'arrive pas à voir comment procéder.
    Faut il que je créé 2 tableaux?

    Code:
    static const unsigned char valeur_entrée[256] = {0};
    static const unsigned char valeur_sortie[46] = {je déclare mes 46 valeurs};
    Et ensuite, comment faire le lien entre les 2?
    Java is the best!

  10. #9
    DAUDET78

    Re : Table de "saut" en C

    Un seul tableau de 256 octets !
    • Tu as la valeur de 45 (par exemple)
    • Tu viens lire la case 45 du tableau
    • Tu y trouves la correspondance (13 par exemple)

    C'est terminé
    J'aime pas le Grec

  11. #10
    flolarajasse

    Re : Table de "saut" en C

    Ok, tu est donc obligé de déclarer les valeurs de toutes tes cases de ton tableau, même si il y en a plusieurs à la suite qui sont égales?
    Java is the best!

  12. #11
    terriblement

    Re : Table de "saut" en C

    Tout dépends de l'application dont on ne sait rien !
    Faut il optimiser la vitesse de traitement ?
    Faut il optimiser l'espace en RAM occupé ?

    Si tu optimises l'un tu devras obligatoirement faire des concessions sur l'autre.

  13. #12
    flolarajasse

    Re : Table de "saut" en C

    Citation Envoyé par terriblement Voir le message
    Tout dépends de l'application dont on ne sait rien !
    Faut il optimiser la vitesse de traitement ?
    Faut il optimiser l'espace en RAM occupé ?

    Si tu optimises l'un tu devras obligatoirement faire des concessions sur l'autre.
    Réponse 1, optimiser la vitesse de traitement.
    Java is the best!

  14. #13
    terriblement

    Re : Table de "saut" en C

    Alors tu fais un grand tableau de 256 en RAM.

  15. #14
    flolarajasse

    Re : Table de "saut" en C

    Il suffit donc juste d'enlever const?
    Java is the best!

  16. #15
    terriblement

    Re : Table de "saut" en C

    La méthode à appliquer est décrite dans ton mode d'emploi du compilateur.
    Tu utilises quel compilateur ?

  17. #16
    Bluedeep

    Re : Table de "saut" en C

    Citation Envoyé par flolarajasse Voir le message
    J'ai vu qu'en assembleur, on pouvait faire une table de saut, est ce que c'est possible de faire pareil en langage C?Ou bien il faut passer par un switch case (ce qui serait très long à mon avis).
    Un switch est, en général, traduit à la compilation par une jump table, justement (sauf quand certaines optim sont appliquées concernant des switchs à faible nombre de choix).

  18. #17
    DAUDET78

    Re : Table de "saut" en C

    Citation Envoyé par terriblement Voir le message
    Alors tu fais un grand tableau de 256 en RAM.
    Tu dois modifier la valeur de conversion en cours d’exécution ? sinon en Flash
    J'aime pas le Grec

  19. #18
    terriblement

    Re : Table de "saut" en C

    Effectivement il faudrait jeter un coup d'oeil au code assembleur généré pour en etre sur. si c'est le cas, ce sera largement plus pratique à apporter des modifications au code, sans parler de l'économie mémoire.

  20. #19
    paulfjujo

    Re : Table de "saut" en C

    bonjour,

    pourquoi un tableau de sortie ?
    c'est bien le tableau d'entree qui fait la correspondance de valeur de sortie ?
    il manque une notion d'entree .. pour connaitre l'indice dans le tableau ..


    Code:
    static const unsigned char valeur_en_entrée[256] ;   // pre rempli avec les 46 valeurs possibles
    unsigned char valeur_sortie; // la valeur de sortie selectionnee
    const unsigned char *p; // pointeur sur le tableau d'entree
    unsigned char Entree; // indice de recherche (0 à 255)
    
    p= valeur_en_entrée;   // pointe sur le debut du tableau 
    valeur_sortie= *(p +Entree);  // recupere une des 46 valeurs

  21. #20
    terriblement

    Re : Table de "saut" en C

    Citation Envoyé par DAUDET78 Voir le message
    Tu dois modifier la valeur de conversion en cours d’exécution ? sinon en Flash
    L'accès flash sera plus lent que l'accès RAM, me trompe-je ?

  22. #21
    flolarajasse

    Re : Table de "saut" en C

    Citation Envoyé par terriblement Voir le message
    La méthode à appliquer est décrite dans ton mode d'emploi du compilateur.
    Tu utilises quel compilateur ?
    J'utilise XC8.
    Java is the best!

  23. #22
    DAUDET78

    Re : Table de "saut" en C

    Citation Envoyé par terriblement Voir le message
    L'accès flash sera plus lent que l'accès RAM, me trompe-je ?
    C'est à voir (et on ne connait pas le µC cible !)...... mais pour remplir la table en RAM, il faut avoir une image en Flash .....

    PS : et faut pas faire de la parano vitesse ! Un accès Flash à chaque conversion ..... sinon, il écrit l'interruption en assembleur .
    Dernière modification par DAUDET78 ; 20/11/2014 à 09h54.
    J'aime pas le Grec

  24. #23
    flolarajasse

    Re : Table de "saut" en C

    Citation Envoyé par DAUDET78 Voir le message
    C'est à voir (et on ne connait pas le µC cible !)...... mais pour remplir la table en RAM, il faut avoir une image en Flash .....
    Il s'agit d'un PIC18F4431.
    Java is the best!

  25. #24
    flolarajasse

    Re : Table de "saut" en C

    J'ai fait un tableau de 256 cases, en mettant une par une les 256 valeurs (46 valeurs différentes), ensuite il suffit que j'aille piocher dans mon tableau avec un indice, mais est-ce la meilleure solution?
    Java is the best!

  26. #25
    DAUDET78

    Re : Table de "saut" en C

    Citation Envoyé par flolarajasse Voir le message
    mais est-ce la meilleure solution?
    Tu mets en doute ma réponse ?
    Mais tu peux certainement utiliser une LookUp table
    Tu as une table en mémoire de 258 octets
    Tu as raison ! 256 octets
    J'aime pas le Grec

  27. #26
    flolarajasse

    Re : Table de "saut" en C

    Citation Envoyé par DAUDET78 Voir le message
    Tu mets en doute ma réponse ?
    Non DAUDET, je n'oserais pas
    Java is the best!

  28. #27
    flolarajasse

    Re : Table de "saut" en C

    Code:
    static const unsigned char valeur_tableau[256] = ...
    J'ai regardé dans la datasheet de XC8 :
    -Si l'on met const, le tableau est placé dans la mémoire programme, libérant ainsi la RAM.

    As a consequence of this, any variables (except for auto variables or function parameters) qualified const are placed in program memory, thus freeing valuable data RAM
    Si je veux optimiser la vitesse de traitement, il faut donc que j'écrive en RAM?!

    Code:
    static unsigned char valeur_tableau[256] = ...
    Tu dois modifier la valeur de conversion en cours d’exécution ? sinon en Flash
    Qu'entends tu par valeur de conversion? Chaque valeur en entrée aura sa valeur correspondante en sortie, et cela ne changera pas durant le programme.
    Java is the best!

  29. #28
    DAUDET78

    Re : Table de "saut" en C

    Citation Envoyé par flolarajasse Voir le message
    et cela ne changera pas durant le programme.
    Donc en Flash
    J'aime pas le Grec

  30. #29
    flolarajasse

    Re : Table de "saut" en C

    Ok, merci Daudet!
    Java is the best!

  31. #30
    terriblement

    Re : Table de "saut" en C

    Ta variable sera chargée en RAM avant de pouvoir la traiter, tu perdras donc un peu de temps en stockant ton tableau dans la mémoire flash.
    A voir si ce temps est critique pour toi ou non.

    J'ai un petit doute,
    en déclarant ton tableau static, il ne sera pas rechargé en re-rentrant dans la fonction qui l'a déclaré.
    Cela implique intrinsèquement que le tableau restera en RAM.
    à confirmer.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Il est erroné d'utiliser les symboles "1" et "0" dans une table de vérité.
    Par biltis dans le forum Epistémologie et Logique (archives)
    Réponses: 27
    Dernier message: 22/08/2013, 07h21
  2. [Biologie Cellulaire] "Saut" d'un potentiel d'action
    Par Sha0 dans le forum Biologie
    Réponses: 1
    Dernier message: 30/12/2011, 15h52
  3. "Saut de dents" et brin mou, sur courroies
    Par invite5abc169e dans le forum Bricolage et décoration
    Réponses: 5
    Dernier message: 11/08/2009, 07h43
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...