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.