- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Interruptvektor im ATMEL-Datenblatt und im Compilat, Namen der Codeabschnitte in *.ls

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.684

    Interruptvektor im ATMEL-Datenblatt und im Compilat, Namen der Codeabschnitte in *.ls

    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:
    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
    Die ISR für Timer2 Compare Match A:
    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)
    // ============================================================================= =
    Daraus entsteht jetzt in der *.lls dieses Codestück dessen Adressen ich nicht verstehe.
    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>
    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.

    Hier der Ausschnitt von eben mit dem "vorderen" Teil der *.lls.
    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>
    Für ne Antwort/Erklärung danke ich schon jetzt.

    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?
    Geändert von oberallgeier (11.06.2016 um 18:06 Uhr) Grund: 3te Frage
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Atmel AT45DB321B-RC , kann mir jemand helfen? Werde aus dem Datenblatt nicht schlau
    Von da_miez3 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 05.02.2013, 22:19
  2. bot noch ohne namen
    Von ElchiMtr im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 15
    Letzter Beitrag: 28.10.2010, 23:46
  3. Datenblatt für Atmel
    Von cbr600 im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 05.07.2007, 18:35
  4. Interruptvektor zur Laufzeit mit SPM verändern
    Von Wolferl im Forum Assembler-Programmierung
    Antworten: 5
    Letzter Beitrag: 12.05.2007, 19:49
  5. Antworten: 1
    Letzter Beitrag: 19.11.2004, 20:05

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests