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 :

Envoyer le PC à une adresse précise (sur PIC32)


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 Envoyer le PC à une adresse précise (sur PIC32)
    Bonjour,

    je me heurte à un problème aujourd'hui, je souhaiterais envoyer le program counter à une adresse bien spécifique (je travaille sur un pic32) et je ne sais pas comment faire.

    Tout d'abord, je stocke l'adresse souhaitée dans un pointeur et après je ne sais pas comment dire au PC va à cette adresse en C.

  2. #2
    Modérateur

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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Quand tu dis "envoyer le PC à une adresse", tu veux dire "affecter le PC à une valeur précise pour exécuter le code qui se trouve à cet endroit" ?

    Si oui, la solution la plus simple semble de faire un bout d'assembleur et tu fais un branchement à l'adresse que tu veux.

  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
    Merci de la réponse rapide
    donc oui c'est effectivement ce que je veut faire mais cela ne fonctionne pas

    je ne trouve pas l'instruction à utiliser sur mplab pour pic32

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ptr_PC=OS_TASKS[1].NAME;
     
        asm {
            goto ptr_PC;

  4. #4
    Modérateur

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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    En regardant le jeu d'instruction (http://ww1.microchip.com/downloads/e...Doc/31029a.pdf), j'ai l'impression que tu as trouvé. Quel est le résultat du code que tu donnes ? Es-tu certain que la valeur de ptr_PC respecte la contrainte décrite dans la documentation (codé sur 11 bits si j'ai bien suivi).

    Plus globalement, que souhaites-tu faire ? Cette solution d'un GOTO en assembleur me parait très bourrin, il y a sans doute une solution bien plus élégante. Enfin, d'un point de vue sémantique, il est peu probable que NAME dénote l'adresse d'un segment exécutable.

  5. #5
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Après avoir lu en diagonale, je pense qu'il faut mettre l'adresse de la routine/fonction/whatever sur la pile (instruction de la famille PUSH) et de faire un return (return from subroutime, RET, RTS or whatever...) en assembleur... Parce qu'on a beau être sur le forum C, les mots "program counter" font plutôt penser à de l'assembleur. Faire attention à l'endianness de la pile et la taille de ladite adresse, totalement dépendants du processeur.

    A+

    Pfeuh

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    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 149
    Par défaut
    Je pose une question pour orienter le débat car il me semble qu'il manque une information importante.
    Après l'accès à cette adresse qu'est censé faire ton programme ? Revenir à cette instruction l'y envoyant ? (enfin la suivante)
    Ou bien c'est un aller sans retour ?

    Parce qu'un simple appel d'adresse peut se faire ainsi :
    Ainsi si à la fin de l'exécution de tes instructions tu places un return/rts/... (suivant le langage) tu ferras une bête sortie de fonction.

  7. #7
    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 Envoyer le PC à une adresse précise (sur PIC32)
    Note de modération : ce message est issue d'une discussion doublon qui a été fermée.

    bonjour à tous,
    voila je travaille sur un pic32 avec mplabX, je souhaite passer une adresse que j'ai en C contenu dans une variable a un bout de code en assembleur.
    Après m'être documenté j'ai réusssi a mixer assembleur et c comme ceci:

    fichier .s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <xc.h>
      .extern ptr_PC
      .global asmFunction
      .ent asmFunction
     
    asmFunction:
      J ptr_PC /*jump*/
     
    .end asmFunction
    fichier.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    volatile UINT16 *ptr_PC=NULL;
    main{
    extern void asmFunction(void);
     
        ptr_PC=OS_TASKS[1].NAME;
        asmFunction();
    }
    J'ai essayé plein de chose comme le passer directement dans la fonction comme ceci asmFunction(ptr_PC); mais je ne sais pas comment le récupérer dans l'assembleur.
    l'erreur est: relocation truncated to fit: R_MIPS_26 against `ptr_PC'

    Voila si quelqu'un peut m'aider
    cordialement

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/09/2006, 16h47
  2. Récupérer une adresse MAC sur l'entrée standard
    Par the_ionic dans le forum Réseau
    Réponses: 14
    Dernier message: 20/07/2006, 09h56
  3. Ecrire à une adresse précise
    Par cout dans le forum C
    Réponses: 34
    Dernier message: 19/06/2006, 09h30
  4. ecrire une donnée à une adresse précise
    Par luckydigit dans le forum C
    Réponses: 4
    Dernier message: 16/06/2006, 23h13
  5. affecter une adresse ip sur chaque port du switch
    Par blagapart dans le forum Développement
    Réponses: 1
    Dernier message: 08/08/2005, 18h42

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