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 :

sauvegarde d'un contexte, plus precisément d'une adresse a exécuter


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    mécatronique
    Inscrit en
    Septembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : mécatronique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 23
    Par défaut sauvegarde d'un contexte, plus precisément d'une adresse a exécuter
    Bonjour, me revoila sur le forum avec un nouveau problème, voila je code un OS temps réel et j'ai un petit soucis pour sauvegarder un "contexte"
    j'explique mon cas:
    je suis en train d'exécuter une tache i, cette tache requiert a un moment donner un événement qui n'est pas encore arrivé. Donc la tache s'arrète de s'exécuter en plein milieu pour attendre cet événement.
    En attendant je réalise d'autre opération ..... lorsque que l'événement arrive pour débloquer la tache 1, je doit retourner précisément à l'endroit ou je me suis arrété.
    Comment faire pour enregistrer cette adresse? Assembleur ou C

    Je travaille sur PIC32
    cordialement

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Normalement lors d'une interruption, on empile simplement l'adresse de retour (et tous les autres registres aussi, d'ailleurs, il n'y a pas de "scratch registers" pour les interruptions), non?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : mécatronique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 23
    Par défaut
    oui sa fonctionne bien pour les interruprions, or la il ne s'agit pas d'une véritable interruption, (exemple timer, interruption externe ...) la c'est le programme qui va par exemple déclarer l'événement débloqué, donc quand le programme aura détecté que l'événement est débloqué, il faudra que le program counter aille à la tache i à l'endroit ou elle c'est arrété
    Donc il faut je pense que je sauvegarde l'endroit ou elle s'est arrété pour y retourné après. Mais je ne sais pas comment récuperer l'adresse a exécuter.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Tache1()
    {
       j'exécute des instructions
       . 
       .
       je doit disposer d'un évenement pour continuer, la tache se met en suspend
       je doit reprendre ICI l'exécution de la tache
       .
       .
    }
    et en attendant l'événement j'exécute d'autres taches.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça ressemble tout simplement à deux threads, ça. Et le changement de contexte, qu'il soit ou non à l'initiative du thread, compte comme l'interrompant et doit marcher de manière similaire. Dans ce cas-là, il me semble que la sauvegarde est plutôt dans la structure de données décrivant le thread auprès du kernel plutôt que dans l'une ou l'autre pile, en l'absence d'un besoin de récursion...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Homme Profil pro
    mécatronique
    Inscrit en
    Septembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : mécatronique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 23
    Par défaut
    bah en faite oui j'ai décrit pour chaque structure de tache un emplacement pour sauvegarder l'emplacement a reprendre. Enfin je crois que je ne comprend pas ta réponse, désolé

    la en faite je souhaiterais arréter la première tache complétement et revenir que plus tard. donc le threads 1 est arréter

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est typiquement ce qui se passe dans une fonction d'attente.
    Cela se passe dans le kernel avec la complicité du scheduler. Une fonction d'attente, une fois passée en kernel-mode, doit:
    • Régler des informations indiquant quel(s) objet(s) de synchronisation peu(ven)t réveiller le thread.
    • Marquer le thread comme "en attente" pour que le scheduler ne le re-sélectionne pas.
    • Contacter le scheduler pour qu'il fasse un changement de contexte maintenant, sans attendre l'expiration de son timer.

    Quand le second thread signalera l'objet de synchronisation pour indiquer la fin de sa tâche, cela causera un autre appel kernel-mode, qui changera l'état du premier thread de "en attente" à "prêt à exécuter". Le scheduler fera le reste quand son timer sonnera (ou quand le second thread se terminera complètement, vu que ça aussi, ça cause probablement un changement de contexte anticipé).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. Marqueur KML le plus proche d'une adresse
    Par josse34 dans le forum APIs Google
    Réponses: 0
    Dernier message: 29/06/2013, 17h18
  3. Recherche plus restrictive sur une adresse
    Par Mides dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 04/04/2013, 16h03
  4. sauvegarder une adresse et la récupérer plus tard
    Par nbs1522 dans le forum Débuter
    Réponses: 6
    Dernier message: 11/01/2013, 10h37
  5. [langage] Substitution précise dans une chaine
    Par ATPase dans le forum Langage
    Réponses: 4
    Dernier message: 02/04/2004, 14h57

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