Wie wird ein Interrupt-Handler (ISR) in Mspgcc deklariert?

8

Was ist die bevorzugte Methode zum Deklarieren eines Interrupt-Handlers in mspgcc?

    
Wayne Uroda 19.03.2013, 13:27
quelle

2 Antworten

3

Nur zur Klarstellung, denn dies ist ein frühes Google-Ergebnis.

%Vor%

Aktueller GCC-Stand (ich glaube, das ist es, worüber arvindpdmn kommentierte), verursacht einen Fehler, wenn man obige Syntax verwendet.

%Vor%

Ein Problem wurde nach einem Bericht darüber in der TI E2E-Community , aber das Problem ist immer noch in seinem "Geplanten" Zustand und es ist unklar, wem der Tracker überhaupt gehört. (Sie können auf das Problem über den Thread im obigen Link zugreifen.)

Wenn Sie sich den Code ansehen, wird der Fehler anscheinend ausgelöst, weil das einzige Attribut, das Argumente haben kann, das Attribut interrupt ist.

Tatsächlich funktioniert die Kompilierung gut, wenn die führenden und die folgenden Unterstriche weggelassen werden.

Hier ist die richtige Syntax!

%Vor%

Und tatsächlich ist dieses Attribut im offiziellen GNU GCC dokumentiert Dokumentation . Rückblickend ist es eher unklar, woher die Unterstriche kamen. Also, das einzige Problem hier ist, dass die Fehlermeldung so wenig informativ ist.

    
kllmnn 17.11.2016, 10:01
quelle
5

Beachten Sie, dass diese Information für MSPGCC v4.6.3 gilt, das vor dem Ti / Redhat / SOMNIUM-Port von MSPGCC liegt, der jetzt mit Code Composer Studio vertrieben wird.

Danke an Peter Bigot von der Mspgcc-Benutzer-Mailingliste für diese Antwort.

Es gibt zwei Möglichkeiten:

A . Verwenden Sie die Syntax des Code-Composer-Studio-Stils (hat den zusätzlichen Vorteil, dass Sie zu CCS portierbar sind):

%Vor%

(Beachten Sie, dass dies irgendwo um Version 20120406 von Mspgcc eingeführt wurde).

B . Verwenden Sie die native gcc-Syntax:

%Vor%

C . Benennen Sie die Funktion korrekt, damit sie in die Vektortabelle aufgenommen wird (nützlich für ASM-Funktionen).

Das Attribut interrupt bewirkt, dass die Funktion den Namen __isr_X hat, wobei X der Wortoffset des Interrupts aus dem Start der Vektortabelle ist (gleich dem Wert des Parameters des Interrupt-Attributs dividiert durch 2).

Diese __isr_X -Symbole werden verwendet, um die Vektortabelle in crt0ivtbl.o zu initialisieren.

    
Wayne Uroda 19.03.2013 13:27
quelle

Tags und Links