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

Réseau C Discussion :

mon realloc perso


Sujet :

Réseau C

  1. #61
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    j'ai ete trop vite ..

  2. #62
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    qu'est ce qui gene dans le fait que l'on soit dans une interuption pour les printf ?

    Bon et bien le mystere reste entier.. Je ne comprends vraiment pas.. Surtout que le sysalloc ne me renvoie aucune erreur....

    A priori pour le moment, le systeme est a peu pres stable.. ca ne plante que tres rarement...

    oO

  3. #63
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    qu'est ce qui gene dans le fait que l'on soit dans une interuption pour les printf ?
    printf n'est pas ré-entrante. Si elle est appelée alors qu'elle est en cours d'exécution, c'est la panique (probablement un problème de variable statique interne).

    C'est pour ça qu'il ne faut pas utiliser ON si il y a des allocations sous IT (ce qui n'est pas recommandé, mieux vaut utiliser un pool, comme tu me l'as fait remarqué, car malloc() non plus n'est pas réentrant, ni protégé contre les interrutions.)

    C'est d'ailleurs pour ça que le me suis p*té le c*l pour enregistrer les évènements... Mais pour bien faire, il faudrait ajouter des zones critiques quand on écrit dans la trace... Mais comme ce n'est pas portable, je laisse ça à chaque implémenteur de SYSALLOC sur son système...
    Bon et bien le mystere reste entier.. Je ne comprends vraiment pas.. Surtout que le sysalloc ne me renvoie aucune erreur....

    A priori pour le moment, le systeme est a peu pres stable.. ca ne plante que tres rarement...
    Pourquoi SYSALLOC devrait signaler des erreurs ? Il ne fait que tenir le compte des allocations et des libération, en fournissant un état des lieux sur demande.

    Il peut éventuellement signaler dans la trace qu'on a cherché à libérer un bloc
    déjà libéré (ou jamais alloué) ou que tel ou tel bloc n'est pas libéré. Après, il faut interpréter pour savoir si c'est normal ou pas...

    Rappelle moi quel est ton problème d'origine.
    Pas de Wi-Fi à la maison : CPL

  4. #64
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    lol oui c'est vrai qu'on a beaucoup dévié.. Mais ca m'a permis d'apprendre pas mal de choses!

    Mon probleme d'origine etait des plantages intempestifs et aléatoire de mon system. J'ai donc penser installer un pool pour mieux gérer la memoire...

    L'implémentation du pool en question ne fonctionne pas. Pour une raison que j'ignore, il me renvoie NULL parfois sans m'afficher d'erreur... De plus ce pool m'empeche d'utiliser les printf comprenant une variable int, char, etc..

    Je suis donc revenu aux anciens malloc (malloc classique avec une initialisation de la memoire) et j'ai implémenté le sysmalloc.

    Depuis, plus de probleme, je n'arrive meme plus a faire planter la machine.. Et les printf sont revenus..

  5. #65
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    tout compte fait, ca plante encore un peu ! lol mais beaucoup moin souvent qu'avant....

    Je te jure que j'aimerai bien résoudre ce mystere... Je pense quand mem qu'un pool serait une bonne chose mais je ne vois pa du tout comment faire ca...

    Surtout dis moi si j'abuse !

  6. #66
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    tout compte fait, ca plante encore un peu ! lol mais beaucoup moin souvent qu'avant....
    Ca plante, ça veut dire quoi au juste ?
    Je te jure que j'aimerai bien résoudre ce mystere... Je pense quand mem qu'un pool serait une bonne chose mais je ne vois pa du tout comment faire ca...

    Surtout dis moi si j'abuse !
    Mmm... Disons que je préfèrerais que tu essayes par toi même. Moi, je sais le faire, pas de problèmes ! Je t'ai quand même donné l'interface et le comportement de chaque fonction, plus un article sur la fabrication des ADT. Difficile d'en faire plus sans donner le code... (Mais là, c'est 1€ le signe, codé, testé, validé ).

    Qu'est-ce qui te bloque ?
    Pas de Wi-Fi à la maison : CPL

  7. #67
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    En fait, quand ca plante, l'interface se fige et je n'ai plus accès a quoique se soit... C'est pour ca que ca ressemble fortement a un plantage memoire.. Enfin je trouve !

    Sinon tu as raison, je vais tenter de le faire moi meme. Je vais regarder ca de plus pres et tenter de le coder moi meme. Mais je suis loin d'etre sur que ceci reglera a terme mon probleme car je ne comprends pas du tout quel en est la cause et pourquoi tout semble bien mieux fonctionner maintenant...

  8. #68
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Désolé, je n'aivais pas vu ton poste sur les ADT et la description des fonctions...

    Je viens de le voir..A priori c'est exactement ce que fait le pool que je t'ai montré.

    Dommage qu'il ne marche pas pour mon implémentation.. mais le bug reste etrange car il ne devrait jamais renvoyer null sans renvoyer d'erreur...

  9. #69
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    En fait, quand ca plante, l'interface se fige et je n'ai plus accès a quoique se soit... C'est pour ca que ca ressemble fortement a un plantage memoire.. Enfin je trouve !
    Ca dépend de tant de choses... C'est quoi comme

    - plateforme
    - système
    - application

    Sinon tu as raison, je vais tenter de le faire moi meme. Je vais regarder ca de plus pres et tenter de le coder moi meme.
    Ca me va.
    Mais je suis loin d'etre sur que ceci reglera a terme mon probleme car je ne comprends pas du tout quel en est la cause et pourquoi tout semble bien mieux fonctionner maintenant...
    Ca ne va pas durer !

    Je crois que je n'ai pas eu de réponse claire à cette question que je ne suis même pas sûr d'avoir posée :

    "Est-ce que tu fais des appels à malloc() sous interruption ?"
    Pas de Wi-Fi à la maison : CPL

  10. #70
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Et bien en fait, je ne peux pas vraiment parler de la plateforme et le system est propriétaire..

    De plus, oui je fais énormément de malloc sous intérruptions mais j'essaye de protéger l'intérruption avec une variable globale jouant le role de semaphore.. a defaut d'en avoir a disposition. Donc lorsque l'interruption est appelée, elle doit normalement faire tout son bazarre sans pb et sans etre gené.

    ET POURQUOI CE SATANE POOL ME RENVOI NULL !!!

    Je commence a devenir fou....

  11. #71
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    Et bien en fait, je ne peux pas vraiment parler de la plateforme et le system est propriétaire.
    Je m'en doutais un peu, il y a certains silences qui valent explication ! Peux-tu brancher un émulateur (ICE ou In Circuit Emulator) pour voir l'état du bazar quand c'est planté ?
    De plus, oui je fais énormément de malloc sous intérruptions
    Argh ! SYSALLOC en Mode OFF exclusivement et encore, dans l'état, je ne garantis rien. Par contre, dans une tâche (shell, par exemple) tu peux appeler sys_mem_trace() comme tu veux. Tu auras l'état courant.
    mais j'essaye de protéger l'intérruption avec une variable globale jouant le role de semaphore.. a defaut d'en avoir a disposition. Donc lorsque l'interruption est appelée, elle doit normalement faire tout son bazarre sans pb et sans etre gené.
    C'est pas l'interruption qu'il faut protéger, c'est ton malloc() etc. qui doit définir une section critique.

    Autre horreur possible : ne me dit pas que les interruptions sont ré-entrantes ou qu'il en existe de plus prioritaires !

    Je rappelle le principe d'une section critique. C'est une zone d'exécution qui ne peut être interrompue.

    Lorsqu'elle s'exécute dans une tâche, elle inhibe les interruptions.

    Lorsqu'elle s'exécute dans une interruption, elle doit masquer les interruptions plus prioritaire.

    Dans les 2 cas, elle ne peut donc plus être interrompue ni par une interruption, ni par une tâche.

    Je suppose que ton système fourni les fonctions 'entrer en zone critique' et 'sortir de la zone critique', sinon, t'es mal...
    Pas de Wi-Fi à la maison : CPL

  12. #72
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    lol alors je suis tres tres mal !

    En fait, je fais du maquettage.. Je n'ai rien a disposition et je me sert de kit de developpement open source pour tenter d'aboutir a un truc interessant... Donc je me sens un peu seul.

    C'est pour ca que j'apprécie tant ton aide !

    C'est ma premiere mission ! Donc je pense etre tres bien tombé. D'autant plus que la librairie open source que j'utilise est censé travailler avec des threads et non des interruptions... Ca epice encore plus mon travail !!

    Dis moi, je peux me faire virer malgré ces circonstances atténuantes ?

  13. #73
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    lol alors je suis tres tres mal !

    En fait, je fais du maquettage.. Je n'ai rien a disposition et je me sert de kit de developpement open source pour tenter d'aboutir a un truc interessant... Donc je me sens un peu seul.

    C'est pour ca que j'apprécie tant ton aide !

    C'est ma premiere mission ! Donc je pense etre tres bien tombé. D'autant plus que la librairie open source que j'utilise est censé travailler avec des threads et non des interruptions... Ca epice encore plus mon travail !!

    Dis moi, je peux me faire virer malgré ces circonstances atténuantes ?
    Il ne faut absolument pas faire en interruption ce qui est normalement fait par une tâche. A priori, ça ne peut pas fonctionner. En vérité, il faudrait tout analyser pour le savoir...

    En principe, les interruptions déclenchent des évènement qui décoincent des taches. Ensuite, c'est la tâche qui fait le traitement.

    Si il faut récupérer des gros blocs de données sous interruption, c'est que le bazar est mal conçu. C'est pas fait pour ça. Il existe des mécanismes matériels qui savent récupérer des gros blocs de donnée.

    Sans en savoir plus sur le projet, ça va être difficile de te conseiller utilement.
    Pas de Wi-Fi à la maison : CPL

  14. #74
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    oui je comprends.. Bon je pense que de toute manière, je leur ai di quelles etaient les problemes quant a l'utilisation de cette librairie.. Mais j'ai pas l'impression d'etre tres crédible au vu de ma courte experience. Ils acceptent une certaine instabilité. Ce projet n'est pas destiné a une industrialisation immédiate dc..

    C'est pour ca que je suis content que ca plante moin qu'avant car ainsi je peux faire des démos a peu pres interessante.

    D'un autre coté, ca m'énerve de ne pas comprendre ce probleme.... Surtout apres y avoir passé autant de temps...

    La seule chose qui me serait utile en fait, c'est comprendre pourquoi le pool que je t'ai montré renvoi un pointeur null. A priori, en regardant le code, ca ne semble pas possible.....

    Merci pour ton soutien

  15. #75
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    D'un autre coté, ca m'énerve de ne pas comprendre ce probleme.... Surtout apres y avoir passé autant de temps...

    La seule chose qui me serait utile en fait, c'est comprendre pourquoi le pool que je t'ai montré renvoi un pointeur null. A priori, en regardant le code, ca ne semble pas possible.....
    Vu qu'il fonctionne chez moi (mais sans interruptions) je ne peux en dire plus. Si tu peux mettre un ICE, tu auras peut être plus d'informations.
    Pas de Wi-Fi à la maison : CPL

  16. #76
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Et bien non je ne peux pas non plus...

    Bon je vais me tirer une balle !

    Ca embauche pas par chez toi par hasard ?

  17. #77
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    Ca embauche pas par chez toi par hasard ?
    Hum, je suis en CRP depuis Juillet suite à un licenciement économique...
    http://www.aeta.com/
    Pas de Wi-Fi à la maison : CPL

  18. #78
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Tient, jai peut etre du nouveau pour expliquer pourquoi ca mieux depuis que j'utilise le sysalloc..

    Lorsque j'ai une interruption, je lance la fonction recvfrom pour récuperer un paquet sur une socket et ensuite, je lance une fonction permettant de parser le message. C'est dans cette fonction que plante le programme. Fonction qui fait partie de la librairie open source censé etre stable.

    Or maintenant, je mets un sys_mem_trace avant et apres cette fameuse fonction qui parse le paquet. Ceci entraine donc peut etre un delai entre la reception du paquet et son traitement qui explique que le bug est lieu bcp moin souvent !

    Qu'en pense tu ?

  19. #79
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    Tient, jai peut etre du nouveau pour expliquer pourquoi ca mieux depuis que j'utilise le sysalloc..

    Lorsque j'ai une interruption, je lance la fonction recvfrom pour récuperer un paquet sur une socket et ensuite, je lance une fonction permettant de parser le message. C'est dans cette fonction que plante le programme. Fonction qui fait partie de la librairie open source censé etre stable.

    Or maintenant, je mets un sys_mem_trace avant et apres cette fameuse fonction qui parse le paquet. Ceci entraine donc peut etre un delai entre la reception du paquet et son traitement qui explique que le bug est lieu bcp moin souvent !

    Qu'en pense tu ?
    C'est possible. Mais appeler recv() (fonction utilisateur) dans une interruption (domaine noyau), c'est absurde.

    Comme je te l'ai déjà dit, une interruption, ca sert à déclencher un évènement qui va par exemple décoincer une tâche suspendue. C'est dans cette tâche que doit être fait l'appel système.

    Tu fais beaucoup trop de choses sous interruptions.

    D'ailleurs, je ne comprends pas pourquoi tu utilises une interruption si ton système dispose des sockets. C'est lui qui doit prendre en charge tout ce bazar, c'est son rôle.
    Pas de Wi-Fi à la maison : CPL

  20. #80
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    je sais bien, je suis bien d'accord.. mais je n'ai pas vraiment eu le choix, j'ai recu le programme de cette maniere...

    Ce que je fais, c'est que je regarde periodiquement la socket pour voir si j'ai un paquet. La socket est non blocante.

    Si j'ai un paquet, je parse, sinon, je sors de la fonction...

    Etant donné que je ne peux pas utiliser les threads, c'est le seul moyen de savoir si j'ai recu un paquet.

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

Discussions similaires

  1. Vos avis sur mon site perso
    Par Fildz dans le forum Mon site
    Réponses: 12
    Dernier message: 19/08/2006, 22h07
  2. Mon site perso
    Par matech dans le forum Mon site
    Réponses: 11
    Dernier message: 08/08/2006, 23h29
  3. Probléme d'execution de mon Kernel perso
    Par bouazza92 dans le forum C
    Réponses: 54
    Dernier message: 05/08/2006, 12h16
  4. Mon site perso : les pages d'Alex6891 - avis
    Par alex6891 dans le forum Mon site
    Réponses: 10
    Dernier message: 25/07/2006, 17h35
  5. [C#] Comment implementer mon Navigateur perso par défaut ?
    Par ArHacKnIdE dans le forum Windows Forms
    Réponses: 8
    Dernier message: 12/02/2006, 18h53

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