Hallo Forum,
eine Differenz zwischen Datenblatt und Compilat, sprich *lls, ist mir aufgefallen, ich verstehe die nicht.
Controller: mega328
IDE AVRStudio4.18-Build 700
Die originale Vektortabelle aus dem neuesten (11. Juli 2016) Datenblatt, Atmel-8271J-AVR- ATmega-Datasheet_11/2015, Seite 65:
Die ISR für Timer2 Compare Match A:Code:1 0x0000(1) RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset 2 0x0002 INT0 External Interrupt Request 0 3 0x0004 INT1 External Interrupt Request 1 4 0x0006 PCINT0 Pin Change Interrupt Request 0 5 0x0008 PCINT1 Pin Change Interrupt Request 1 6 0x000A PCINT2 Pin Change Interrupt Request 2 7 0x000C WDT Watchdog Time-out Interrupt 8 0x000E TIMER2 COMPA Timer/Counter2 Compare Match A 9 0x0010 TIMER2 COMPB Timer/Counter2 Compare Match B 10 0x0012 TIMER2 OVF Timer/Counter2 Overflow
Daraus entsteht jetzt in der *.lls dieses Codestück dessen Adressen ich nicht verstehe.Code:// ============================================================================= = // === Nicht unterbrechbare ISR für timer2 ==================================== = // Routine zählt hoch im Takt 20 kHz = 50 µs. Verwendung: Heartbeat (LED) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ISR(TIMER2_COMPA_vect) // Vektor 8, Adresse 0x000E { // Izeit_A --; // ###>>> Izeit_1 ist aktuell int16_t ==>> Izeit_1 bleibt // bis 32000 in der int16-Grenze if ( ! Izeit_A ) // Interrupt-Timer = 1 ... 20 000 ... (1 sec blink) // WENN Izeit_1 =|= Null => wahr => Anweisung ausgeführen { // Eine Sekunde ist voll => Izeit_A = Izthrznt; // => Rückstellen auf Zeithorizont ToggleBit (PBLED, LBr); // rtLED toggeln HEARTBEAT (on board + Pin) Isecundn ++; // Sekundenzähler hochtackern, max 9 Std } // Ende if ( ! Izeit_A ) // return; } // Ende ISR(TIMER2_COMPA_vect) // ============================================================================= =
Frage: Wieso heißt dieser Abschnitt ".text"? Wieso haben die andern Abschnitte ihre Namen? Ich finde leider dazu mit der Standardsuche (Tante Goock) keine Antwort.Code:Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 1c: 0c 94 79 00 jmp 0xf2 ; 0xf2 <__vector_7> 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
Hier der Ausschnitt von eben mit dem "vorderen" Teil der *.lls.
Für ne Antwort/Erklärung danke ich schon jetzt.Code:XXXXX_01_01.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .data 00000004 00800100 000001e0 00000274 2**0 CONTENTS, ALLOC, LOAD, DATA 1 .text 000001e0 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .bss 00000004 00800104 00800104 00000278 2**0 ALLOC 3 .debug_aranges 00000020 00000000 00000000 00000278 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_pubnames 000000a4 00000000 00000000 00000298 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_info 00000258 00000000 00000000 0000033c 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_abbrev 00000180 00000000 00000000 00000594 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_line 00000249 00000000 00000000 00000714 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_frame 00000090 00000000 00000000 00000960 2**2 CONTENTS, READONLY, DEBUGGING 9 .debug_str 000000ef 00000000 00000000 000009f0 2**0 CONTENTS, READONLY, DEBUGGING 10 .debug_loc 0000006b 00000000 00000000 00000adf 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_ranges 00000030 00000000 00000000 00000b4a 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 1c: 0c 94 79 00 jmp 0xf2 ; 0xf2 <__vector_7> 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
Die Fragen zusammen:
1) Wieso heißt ein Programmabschnitt der *.lss ".text"? Wieso haben die andern Abschnitte ihre Namen? Ich finde leider dazu mit der Suche bei Google keine Antwort.
2) Wieso sind die Interruptvektoren im Datenblatt mit 2 inkrementierte, in der *.lss mit 4? Ok, das ist wohl der Adressraum des mega328 ! ? ! ?
3) Steht irgendwo ne (gute *gg*) Erklärung für Aufbau, Code-Abschnittnamen etc. der *.lls-Datei? Wo bitte?







Zitieren


Lesezeichen