IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Misra Rules 17.2 et 17.3


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut Misra Rules 17.2 et 17.3
    Bonjour à toutes et à tous,

    Je travaille sur un programme qui fonctionne déjà correctement, je suis en charge d'éliminer toutes les MISRA rules et autres warnings sans "altérer" l'exécutable...

    Je suis bloqué sur cette ligne de code notée LC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i_RingBuf = (uint8)((pCurRowStart-pRingBufStart)/ pRoiDescriptor->usModuloWidth);
    Elle me renvoie les deux lignes d'erreur suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error 946: (Note -- Relational or subtract operator applied to pointers [MISRA 2004 Rule 17.2, required], [MISRA 2004 Rule 17.3, required])
    error 947: (Note -- Subtract operator applied to pointers [MISRA 2004 Rule 17.2, required], [MISRA 2004 Rule 17.3, required])
    Les variables intervenant dans LC sont définies comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* En paramètres d'entrée de la fonction */
    const t_PixelData *const pRingBufStart, t_PixelData * pCurRowStart,  const t_RoiDescriptor *const pRoiDescriptor
     
    /* [...] */
     
     
    /* Au début de la fonction */
    uint8 i_RingBuf;
     
    /*La ligne "incriminée" LC vient juste après cette déclaration*/
    i_RingBuf = (uint8)((pCurRowStart-pRingBufStart)/ pRoiDescriptor->usModuloWidth);
    Comme vous le voyez, de nouveaux types ont été définis ailleurs dans le logiciel : t_PixelData et t_RoiDescriptor, entre autres...


    Alors voilà, je suis bloqué, j'ai tenté divers essais mais le compilateur renvoie des erreurs, sans parler de MISRA.

    Par exemple en définissant un pointeur "différence" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    t_PixelData *subtraction_of_pointers;
     
      subtraction_of_pointers = (uint8)(pCurRowStart-pRingBufStart);
     
      i_RingBuf = (uint8)(subtraction_of_pointers/ pRoiDescriptor->usModuloWidth);
    Décomposer le calcul en deux étapes intermédiaires ne donne pas plus de succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    uint8 i_RingBuf1;
    uint8 i_RingBuf2;
    uint8 i_RingBuf;
     
     
    i_RingBuf1 = ((uint8)(pCurRowStart))/ ((uint8)pRoiDescriptor->usModuloWidth);
      i_RingBuf2 = ((uint8)(pRingBufStart))/ ((uint8)pRoiDescriptor->usModuloWidth);
      i_RingBuf = i_RingBuf1 - i_RingBuf2;

    Auriez-vous des idées pour me débloquer s'il vous plaît ?

    Je vous remercie de m'avoir lu.

    Bonne journée.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    En continuant à chercher, j'ai pu améliorer un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      uint32 pt1 = (uint32)pCurRowStart;
      uint32 pt2 = (uint32)pRingBufStart;
      i_RingBuf = (uint8)((pt1-pt2)/ pRoiDescriptor->usModuloWidth);
    Le compilateur est toujours mécontent mais un peu moins, et l'erreur me semble plus "abordable" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error 923: (Note -- cast from pointer to unsigned long [Encompasses MISRA 2004 Rule 11.1, required], [MISRA 2004 Rule 11.3, advisory])
    error 923: (Note -- cast from pointer to unsigned long [Encompasses MISRA 2004 Rule 11.1, required], [MISRA 2004 Rule 11.3, advisory])
    La même erreur pour chacune des deux premières lignes.

    Le calcul de i_RingBuf semble ne plus lui poser de problème.

    Comment me débarrasser du "cast from pointer to unsigned long", là est la question...

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Moi je me pose quand même une question.
    Qu'est-ce qu'est censée retourner cette soustraction ?
    Parce qu'effectivement, soustraire 2 pointeurs ne peut (normalement) pas faire quelque chose de beau.
    A part si dans ces pointeurs ont été stockés des entiers, et à ce moment là, pourquoi avoir utilisé des pointeurs pour les stocker ?

    EDIT :
    Dans ton cas, je crois comprendre l'utilisation (genre le nombre de lignes entre la ligne courante et une ligne de référence).
    Le warning ne serait-il pas lié à une prise en compte de l'architecture 64 bits (sur laquelle un pointeur ne sera pas sur un int32 mais sur un int64) ? Utilise peut-être un ptrdiff_t qui (il me semble) est fait pour ça.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Moi je me pose quand même une question.
    Qu'est-ce qu'est censée retourner cette soustraction ?
    Parce qu'effectivement, soustraire 2 pointeurs ne peut (normalement) pas faire quelque chose de beau.
    A part si dans ces pointeurs ont été stockés des entiers, et à ce moment là, pourquoi avoir utilisé des pointeurs pour les stocker ?
    Alors déjà merci de ta réponse.

    Je pense que cette soustraction est censée renvoyer un "écart" entre deux adresses. Pt1 contient une adresse1, Pt2 contient une adresse2, alors Pt1-Pt2 donne le nombre de "cases de différence" ? (oui c'est mal dit).

    Quant au "pourquoi avoir utilisé des pointeurs", je n'en ai pas la moindre idée. Je maîtrise très mal les rouages du logiciel (que je n'ai absolument pas codé), et je ne sais pas exactement ce qu'il fait fonction par fonction...
    Le fait que ce soit des pointeurs a son importance par la suite dans la fonction, puisque ces variables sont réappelées en paramètres d'entrée d'autres fonctions...

Discussions similaires

  1. [devcpp] et makefile - no rule to make target
    Par Jabrul dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 09/09/2005, 13h12
  2. stats qui affectent des requêtes en mode RULE
    Par joel90 dans le forum Oracle
    Réponses: 4
    Dernier message: 01/02/2005, 14h52
  3. [MSDE] CREATE RULE sur un type utilisateur ?
    Par Raduris dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/01/2005, 12h24
  4. 9i / Optimiseurs CHOOSE et RULE
    Par Yorglaa dans le forum Administration
    Réponses: 5
    Dernier message: 26/05/2004, 10h41
  5. delete sur une vue: rule
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 18/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo