Discussion: not isr callable

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : janvier 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut not isr callable

    Bonjour à tous,
    Je code sous wind river workbench. Je code un système temps réel.
    J'utilise des boites aux lettres pour faire communiquer mes taches entre elles, des interruptions.

    Tout compil MAIS lorsque je fais tourner mon programme j'ai une erreur sur une réception de boite aux lettres (alors que je l'ai déjà fait des dizaines de fois et les autres boites aux lettres fonctionnes trés bien en reception et emission, preuve que j'initialise correctement).

    J'ai effectué quelques recherches et le code d'erreur correspond à
    Nom : aaa.JPG
Affichages : 55
Taille : 11,4 Ko
    http://www.vxdev.com/docs/vx55man/vx...noNumList.html

    Malgré mes recherches je n'arrive pas à comprendre à quoi corresponds concrètement cette erreur.
    Pourriez-vous m'aidez à réssoudre ce soucis svp.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 982
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : juin 2007
    Messages : 4 982
    Points : 16 602
    Points
    16 602

    Par défaut

    Au vu du nom, je dirai que tu as une callback qui n'est pas appelable, probablement une erreur de pointeur de fonction.

    Pourrais-tu nous montrer ton initialisation, et la déclaration des variables et fonctions qui la compose?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 591
    Points : 3 025
    Points
    3 025

    Par défaut

    A première vue, je dirais que tu tentes de d'utiliser une ressource nécessitant un "lock" à partir d'un code qui se déroule sous interruption, ce qui n'est évidemment pas possible, surtout s'il s'agit d'une réception!

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : janvier 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    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
     
    //situé dans vxWind.h
    typedef struct msg_q *		MSG_Q_ID;
     
    //situé dans BALinit.c
    #include <vxWind.h>
    #include <msgQLib.h>
     
    MSG_Q_ID VGBAL;
     
    void initBAL()
    {
    //...
    VGBAL = msgQCreate(10, 10, 0x00);
    }
     
    //situé dans shareBAL.h
    extern MSG_Q_ID VGBAL
    en premier lieu dans mon main, j'initialise (dans cet ordre) les interruptions, les semaphores, les watchdogs, les boites aux lettres et enfin les taches.
    pour l'utilisation des boites aux lettres dans chaque module je procéde ainsi:
    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
     
    #include <msgQLib.h>
    #include "shareBAL.h"
     
    void xxx() 
    {
    char *ptr_rec;
    char rec;
    char Statut;
    ptr_rec=&rec;
    VLStatut = msgQReceive((MSG_Q_ID) VGBAL, ptr_rec, sizeof(char), 10);
    }
     
    void xxx() 
    {
    char *ptr_send;
    char send;
    char Statut;
    ptr_send=&send;
    send=0xFA;
    VLStatut = msgQsend((MSG_Q_ID) VGBAL, ptr_send, sizeof(char), NO_WAIT, MSG_PRI_NORMAL);
    }
    Pourriez-vous m'en dire plus sur l'ISR (son fonctionnement) et que traduit cette erreur pour que je puisse comprendre mon erreur et savoir comment réagir face à ce type d'erreur a prochaine fois.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : janvier 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    Citation Envoyé par dalfab Voir le message
    A première vue, je dirais que tu tentes de d'utiliser une ressource nécessitant un "lock" à partir d'un code qui se déroule sous interruption, ce qui n'est évidemment pas possible, surtout s'il s'agit d'une réception!
    J'ai bien tenté d'utiliser une prise de semaphore avant d'effectuer la reception. Pour justement "locker" une resource sur cette instruction. A moins que je me trompe et dans ce cas j'aimerai que tu m'explique ce qe tu veux dire par "lock" stp.
    Cette instruction (msqQReceive) s'effectue dans une tache qui tourne en while(1). Niveau de priorité de la tache : 96.


    Merci à vous deux de m'aider.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : janvier 2017
    Messages : 5
    Points : 5
    Points
    5

    Par défaut

    J'ai trouvé!
    C'était un while du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(cond1)
    {
    //aucune instruction
    }
    présent dans une autre tache.
    ce qui monopolisait le processeur.

    j'ai alors codé mon while ainsi

    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
     
    //declare avant
    void TimerSleepMs(int Ms)
     {
    	struct timespec timeout;
    	timeout.tv_sec = 0;
    	timeout.tv_nsec = 1000000 * Ms; /*1ms * factor*/
    	nanosleep(&timeout, NULL);
    }
     
    //dans ma tache au moment du while vide
    while(cond1)
    {
       TimerSleepMs(1);
    }
    maintenant ça marche

    merci pour votre aide à tous.

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 591
    Points : 3 025
    Points
    3 025

    Par défaut

    Citation Envoyé par neophyte_ingé31 Voir le message
    J'ai bien tenté d'utiliser une prise de semaphore avant d'effectuer la reception. Pour justement "locker" une resource sur cette instruction. A moins que je me trompe et dans ce cas j'aimerai que tu m'explique ce qe tu veux dire par "lock" stp.
    Cette instruction (msqQReceive) s'effectue dans une tache qui tourne en while(1). Niveau de priorité de la tache : 96.
    L'erreur semblait indiquer un déroulement sous ISR (Interrupt Sub Routine), et dans une interruption il est impossible d'utiliser un quelconque objet de communication (semaphore, mailbox, ...), ces objets utilisent en interne un mécanisme qui doit se synchroniser avec le noyau (c'est ce mécanisme qu'on peut appeler lock). Mais ça n'est pas ton cas car tu indiques bien un déroulement dans une tache.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2011, 10h20
  2. object is not callable
    Par rezguiinfo dans le forum Général Python
    Réponses: 6
    Dernier message: 30/01/2011, 14h43
  3. "'int' object is not callable"
    Par dingoth dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2010, 18h38
  4. TypeError: 'file' object is not callable
    Par MariemEA dans le forum Général Python
    Réponses: 7
    Dernier message: 09/07/2010, 22h57
  5. typeerror "int" not callable
    Par luckylucky dans le forum Général Python
    Réponses: 2
    Dernier message: 06/05/2010, 23h28

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