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 :

Link de section avec alignement.


Sujet :

C

  1. #1
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut Link de section avec alignement.
    Bonjour.

    C'est au sujet d'un code C/assembleur pour microcontroleur (AVR32).

    Le code assembleur définit une sorte de vecteur d'exceptions avec une exigence d'alignement.

    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
    .section  .exception, "ax", @progbits
    .balign 0x200
    .global _evba
    .type _evba, @function
    _evba:
            .org  0x000
    _handle_Unrecoverable_Exception:
            rjmp $
            .org  0x004
    _handle_TLB_Multiple_Hit:
            rjmp $
    .....
    	.org  0x100
    	// Supervisor Call.
    _handle_Supervisor_Call:
    	rjmp $
    Les exceptions relatives à des intéruptions sont trouvées d'après la formule : (EVBA | event_handler_offset), event_handler_offset étant une valeur renseignée dans un registre du controleur d'intéruptions.

    Je définis donc mon handler d'interruption de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    __attribute__ ((__interrupt__))
    __attribute__ ((section (".exception")))
    void _default_interrupt_handler(void)
    {
      while(1) {}
    }
    Après le link, j'obtiens la disposition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .exception      0x0000000080004c00      0x208
     .exception     0x0000000080004c00      0x200 exception.o
                    0x0000000080004c00                _evba
     .exception     0x0000000080004e00        0x8 main.o
                    0x0000000080004e00                _default_interrupt_handler
    Le linker m'a décalé la fonction à un multiple de l'alignement du vecteur d'exceptions.

    Ma question est donc, comment "placer" les fonctions directement à la suite du vecteur d'exceptions, ou simplement définir sa taille ?

    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Il existe un moyen. Créer un script ld qui vient en complément du script par défaut (avec -T).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SECTIONS
    {
      .text :
      {
        . = ALIGN(0x200);
        exception*(.exception)
        *(.exception)
      }
    }
    INSERT AFTER .text;

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

Discussions similaires

  1. Section avec tableau et graphe
    Par frederic_s dans le forum Deski
    Réponses: 12
    Dernier message: 26/12/2006, 15h34
  2. [Swing] JComboBox avec alignement
    Par Invité dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/11/2006, 22h43
  3. Link de GLUT avec DEV-C++
    Par PONSOLLE dans le forum Dev-C++
    Réponses: 2
    Dernier message: 03/11/2006, 17h27
  4. Probleme avec alignement de chiffres réels :(
    Par softstar dans le forum Delphi
    Réponses: 52
    Dernier message: 09/09/2006, 00h12
  5. erreur de link sous wxWidgets avec Mingw
    Par pyoda dans le forum wxWidgets
    Réponses: 4
    Dernier message: 28/04/2006, 19h03

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