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.
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.
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 $
Je définis donc mon handler d'interruption de la manière suivante :
Après le link, j'obtiens la disposition 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) {} }
Le linker m'a décalé la fonction à un multiple de l'alignement du vecteur d'exceptions.
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
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.
Partager