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

Embarqué Discussion :

Probleme de structure


Sujet :

Embarqué

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut Probleme de structure
    Bonjour,

    J'utilise un vieux controler (Fujitsu MB90F497G).
    Dans mon code j'utilise une structure (:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct
    	{			
    		unsigned char u8CounterSubTaskLimite;			
    		...		
    		float fCriter;
    		
    		unsigned char u8CounterSubTask;
    		
    		unsigned long u32AcquiMax;
    		unsigned long u32AcquiMin;
                  float fRatio_Max;
    		float fRatio_Min;
    	} Filter_Data;
    Au cours de mon programme, cette structure est initialisée puis utilisée régulièremment (cycle à 10ms). A bout d'un certain moment (variable entre 20s et 2min) les 2 derniers paramètres sont remis à zero (fRatio_Max et fRatio_Min).

    Le problème intervient dans ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
              if(strFDarFilterList[u8FilterIndex].fCriter >= strFDarFilterList[u8FilterIndex].fRatio_Max)
    	{
    		...
    	}
    	if(strFDarFilterList[u8FilterIndex].fCriter <= strFDarFilterList[u8FilterIndex].fRatio_Min)
    	{
                    ...	
            }
    C'est dans ce bout de code que le problème arrive je pense car quand je le commente, il n'y a plus de problème.
    Ce qui m'étonne, c'est que je ne fait que lire le paramètre qui va être remis à zero.
    De plus j'ai essayé de changer la position des paramètres dans la structure (en mettant les 2 de la fin au milieu) et le problème disparait aussi.
    Dans ce cas la les 2 derniers paramètres sont rafraichis régulièrement, c'est peut être pour cela que je ne voit plus le problème.

    Qu'en pensez vous?
    J'aimerais comprendre ce phénomène pour le corriger réellement et pas juste mettre un pansement qui le masque.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 498
    Billets dans le blog
    1
    Par défaut
    De prime abord, cela me fait penser à ce qu'un de mes collègues appelle un "pointeur jardinier", cad un pointeur qui va écrire un peu où il veut. Changer du code peut changer l'agencement dans le fichier map et donc faire qu'il écrit ailleurs où ça ne se voit pas ; changer l'ordre des champs de la structure peut changer l'adresse de fin de la structure (à cause des bits de padding) et donc le pointeur n'écrit plus dans ta structure. Si tel est le cas, c'est un problème extrêmement dur à déboguer.

    En mode débug, certains IDE te permettent de mettre un point d'arrêt à un endroit particulier de la mémoire et donc chaque fois que "quelqu"un" essayera d'accéder à cette adresse, l'application s'arrêtera. Ca peut te permettre de détecter qui est ce quelqu'un.

  3. #3
    Membre très actif

    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 598
    Par défaut
    Salut,

    Je ne pense pas que le problème soit dans le bout de code que tu nous présentes.
    Je pense plutôt pour un écrasement mémoire ailleurs dans le code.
    Très difficile à déboguer.

    BON COURAGE!

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Je rejoins les deux precedents commentaires : quelquepart, tu laboures la memoire, c'est pour ca que "magiquement" tes valeurs sont changees. Cela peut, par exemple, se trouver dans un memset si tu lui passes une mauvaise taille, ou un free, ou une allocation, ou pleins d'autres choses.

    Regarde si tu peux passer ton code dans des outils d'analyse de code type valgrind, purify, quantify, ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    J'y avais bien pensé (dans mes cauchemars les plus effrayants).
    J'ai cherché d'abord dans cette voie mais sans trouvé de coupable.

    Puis j'ai eu l'idée de commenter la partie de l'algo que je vous ai montré.
    (en fait j'ai commenté plus large en réduisant la zone petit petit)
    Ce faisant, le problème n'arrive plus.
    Ce qui me laisse pensé que j'ai un problème dans cette partie.

    Mais je ne vois rien.

    Il me reste à mon avis 2 possibilités:
    -1 : j'ai pas vu le pointeur jardinier (99% de chance).
    -2 : erreur du compilo Fujitsu (SOFTUNE V3 alors qu'on est à la V8 mais mon proc est tellement obselet que je doit utiliser celle là).

    Dnc si vous avez entendu parlé de problème de ce genre avec le micro de chez Fuji, je suis preneur.

    En attendant je vais continuer ma quête du jardinier.


    En tout cas merci pour votre aide

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 498
    Billets dans le blog
    1
    Par défaut
    En admettant que ton IDE te le permette, ouvre la vue avec l'état de la mémoire (la matrice des 0xHH de ta mémoire) et place toi aux adresses de tes champs. Ensuite, tu exécutes ton programme en mode pas à pas, en entier, jusqu'à ce que tu vois la mémoire changer...

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    Ce logiciel est assez connu.
    On va aussi mettre en place un système utilisant 3 logiciels pour améliorer notre process de développement soft:
    - sourcemonitor (free) pour les infos global (complexité nb de lignes ,...)
    - PCLint pour l'analyse statique de code
    - Codesonar pour l'analyse dynamique.

    Cela va se mettre en place sous peu (enfin qqs mois quand même pour être full operationel). Je ferai un retour sur l'ensemble (fonctions des outils, complémentarité, est-ce que cela simplifie la vie en trouvant plus facilement les bug, complication du process de dev).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de structure d'un graphe
    Par Aurelienjjj dans le forum C
    Réponses: 11
    Dernier message: 20/11/2006, 17h41
  2. [XSLT] Probleme de structure de fichier xsl
    Par ben23 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 11h46
  3. C++ - Probleme avec structure et template
    Par vdumont dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2006, 16h32
  4. Probleme taille structure / parsing tag mp3
    Par lucas_sophia dans le forum C
    Réponses: 6
    Dernier message: 19/03/2006, 17h56
  5. Réponses: 3
    Dernier message: 28/09/2003, 18h08

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