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 :

problème de défaut d'interruption, general execeptions handler


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    mécatronique
    Inscrit en
    Septembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : mécatronique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 23
    Points : 16
    Points
    16
    Par défaut problème de défaut d'interruption, general execeptions handler
    bonjour à tous,
    j'ai un nouveau problème avec mon os temps réel sous la norme osek pour pic32 au niveau je pense des interruptions.

    lorsque je fait tourner l'os avec un ordonnancement demandé par une interruption du timer 2, au bout d'un certain temps le programme plante et m’affiche en erreur:
    Launching
    Programming target
    User program running
    No source code lines were found at current PC 0x9d0088b4
    User program stopped

    j'ai donc regardé dans la mémoire du pic et mon erreur survient dans la parti general exceptions handler du même genre que ceci:

    34069 9D00_1448 244213A0  ADDIU V0, V0, 5024
    34070 9D00_144C 0040F809  JALR V0
    34071 9D00_1450 00000000  NOP
    34072 9D00_1454 3C020000 _general_exception_handler LUI V0, 0
    34073 9D00_1458 27BDFFE8  ADDIU SP, SP, -24
    34074 9D00_145C 24420001  ADDIU V0, V0, 1
    34075 9D00_1460 10400006  BEQ V0, ZERO, 0x9D00147C
    34076 9D00_1464 AFBF0014  SW RA, 20(SP)
    34077 9D00_1468 3C029D00  LUI V0, -25344
    34078 9D00_146C 244216E4  ADDIU V0, V0, 5860
    34079 9D00_1470 10400003  BEQ V0, ZERO, 0x9D001480
    34080 9D00_1474 3C029D00  LUI V0, -25344
    34081 9D00_1478 7000003F  SDBBP 0                                   <<<<<=========================  I'm stuck here
    34082 9D00_147C 3C029D00  LUI V0, -25344
    34083 9D00_1480 244213A0  ADDIU V0, V0, 5024
    je suis bloquer à la même instruction.
    voila je ne sais vraiment pas comment faire car en mode pas a pas le programme fonctionne. Que doit je faire?

    J'ai trouver un autre post sur le net qui reflète le même problème que moi:
    http://www.microchip.com/forums/m777546.aspx

    merci de votre aide


    EDIT: Ce qui est étonnant est que lorsque je fait tourner l'OS sans faire de taches, je n'est pas d'erreur
    Lorsque je fait alterner deux taches en permanence sa plante: T1->T2->T1->T2 ....
    Sa plante au bout de 50 cycles par exemple...

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    SDBBP est une instruction de breakpoint software donc c'est assez bizarre de trouver cela...
    Je ne connais pas bien cet environnement mais n'as-tu pas à définir le contenu des fonctions d'interruptions ?
    S'il n'y en a pas de base et que tu reçois l'IT tu tomberais donc dans cette fonction générique qui stoppe tout.
    Regardes dans les registres de status quelles sont les ITs qui n'ont pas été acquittées.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Membre à l'essai
    Homme Profil pro
    mécatronique
    Inscrit en
    Septembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : mécatronique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Alors j'ai trouver d'ou vient le problème, c'est un défaut d'écriture sur un bus.
    Afin de trouver cette erreur j''ai ajouté une fonction de débogage au main afin que l'erreur ne bloque pas le programme mais vienne dans cette fonction. Elle nous renvoi l'adresse de l'erreur et le type d'erreur.

    grâce à cela j'ai pu trouver d'ou venait mes problèmes. Problème résolu

    le code à insérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    static enum {
        EXCEP_IRQ = 0,            // interrupt
        EXCEP_AdEL = 4,            // address error exception (load or ifetch)
        EXCEP_AdES,                // address error exception (store)
        EXCEP_IBE,                // bus error (ifetch)
        EXCEP_DBE,                // bus error (load/store)
        EXCEP_Sys,                // syscall
        EXCEP_Bp,                // breakpoint
        EXCEP_RI,                // reserved instruction
        EXCEP_CpU,                // coprocessor unusable
        EXCEP_Overflow,            // arithmetic overflow
        EXCEP_Trap,                // trap (possible divide by zero)
        EXCEP_IS1 = 16,            // implementation specfic 1
        EXCEP_CEU,                // CorExtend Unuseable
        EXCEP_C2E                // coprocessor 2
    } _excep_code;
    static unsigned int _epc_code;
    static unsigned int _excep_addr;
    // this function overrides the normal _weak_ generic handler
     
     
    void _general_exception_handler(void)
    {
        asm volatile("mfc0 %0,$13" : "=r" (_excep_code));
        asm volatile("mfc0 %0,$14" : "=r" (_excep_addr));
        _excep_code = (_excep_code & 0x0000007C) >> 2;
        while (1) 
        {
            // Examine _excep_code to identify the type of exception
            // Examine _excep_addr to find the address that caused the exception
        }
    }

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

Discussions similaires

  1. [2.x] Problème avec formulaire de contact dans le handler
    Par lapaupiette dans le forum Symfony
    Réponses: 2
    Dernier message: 16/04/2014, 10h01
  2. Problème call dans une interruption 80C51
    Par titititi38 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 09/02/2012, 11h39
  3. Problème d'activation d'interruption avec MCC18
    Par marc02110 dans le forum MPLAB
    Réponses: 0
    Dernier message: 19/08/2009, 13h13
  4. problème avec média player par défaut pour les vidéos ?
    Par tomguiss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/10/2005, 14h08
  5. Réponses: 8
    Dernier message: 06/12/2004, 12h24

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