- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: STM32 - Interrupts

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    White_fox, deinen Interrupthandler zu definieren geht so:

    Nehmen wir an du möchtest für dem TIM7 einen Handler schreiben.
    In deinem Projektordner befindet sich die Datei "startup_stm32f44axx.s", ja genau "*.s", eine Assembler Datei.
    In dieser Datei wird die Interrupt-Vektor-Tabelle definiert. Das ist eine Tabelle mit 96 Funktionszeigern vom Typ
    Code:
    void (*handler)(void);
    Also kein Rückgabewert und keine Parameter.

    Diese Namen, die in dieser Datei stehen, sind die Symbole die du suchst, für die du eine C-Funktion mit genau dem Namen einmal in deinem Code definieren mußt.
    Für Timer 7 schreibst du z.B. in deine "main.c"
    Code:
    void TIM7_IRQHandler(void) {
      /* dein Code */
    }
    Wie wird das jetzt aufgelößt beim Build?

    Zuerst macht der Assembler aus der startup Datei eine Objekt-Datei. In dieser *.o steht jetzt in der Symboltabelle das Symbol "TIM7_IRQHandler". Das Besondere ist, dass dieses Symbol als schwach (weak) markiert ist.
    Der Compiler übersetzt nun deine "main.c" und macht daraus "main.o". In der Symboltabelle dieser Datei befindet sich ebenfalls das Symbol "TIM7_IRQHandler" - aber - dieses ist _nicht_ als schwach makiert.
    Jetzt baut der Linker aus beiden "*.o"-Dateien eine Datei zusammen und muss die Symbole auflösen. Dabei stösst er auf die Tatsache, dass es zweimal das Symbol "TIM7_IRQHandler" gibt. Normalerweise ist das ein Konflikt, der zu einem Fehler führt. Hier aber kommt die schwache Markierung aus der ersten Objektdatei ins Spiel: Das erste Symbol aus "startup_stm32f446xx.o" wird durch das Symbol aus deiner "main.o" ersetzt. Sprich deine Funktion überschreibt die schwächere Definition aus der "startup_stm32f446xx.s".

    Für andere Handler schaust du in Zukunft in die Tabelle von "startup_stm32f446xx.s" rein, nimmst den Symbolnamen und schreibst dafür eine C-Funktion mit genau diesem Namen.

    Gruss botty
    Geändert von botty (01.11.2016 um 09:15 Uhr)

Ähnliche Themen

  1. RC Transmitter auf stm32 Basis
    Von The Man im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 1
    Letzter Beitrag: 07.09.2014, 18:28
  2. STM32 + Kamera
    Von Wsk8 im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 15
    Letzter Beitrag: 11.03.2014, 20:26
  3. sind ALLE Interrupts wieder ON nach Enable Interrupts?
    Von sBronco im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.07.2011, 14:58
  4. stm32 discovery
    Von drew im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 17
    Letzter Beitrag: 07.04.2011, 16:55
  5. STM32 + blinkende LED
    Von Mountainking im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 41
    Letzter Beitrag: 11.11.2009, 14:48

Berechtigungen

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

LiFePO4 Speicher Test