dsPic - gleiche ISR für alternativen Interrupt

Gast #2903246
Lesenswert?
• ▲
▼
Hallo Pic-Kenner,
beim dsPIC30Fxx kann man mittels dem ALTIVT = 1 die Alternative 
Vektortabelle verwenden.
Wie sag ich nun dem C30 Compiler, dass jede 
NICHT-DEFINIERTEN-ALTERNATIVEN-ISRs den Vektor der STANDARD-ISR 
verwenden soll?

1
//Alternave ISR
2
void __attribute__((interrupt, no_auto_psv)) _AltCNInterrupt (void)
3
{
4
   foo(); // ok
5
}
6
//Standard ISR
7
void __attribute__((interrupt, no_auto_psv)) _CNInterrupt (void)
8
{
9
   bar(); // auch ok
10
}
1
//Alternave ISR
2
void __attribute__((interrupt, no_auto_psv)) _ADCInterrupt (void)
3
{
4
  bla1(); // ok
5
  bla2(); // ok
6
  ...
7
}
8
//Standard ISR
9
void __attribute__((interrupt, no_auto_psv)) _AltADCInterrupt (void)
10
{
11
  // Hier soll auch bla1(), ... ausgeführt werden.
12
}

PS: Compiler Handbuch sagt zwar dass man die Altern. ISR auch 
beschreiben soll, wie das geht allerdings nicht.
Gast #2903527
Lesenswert?
• ▲
▼
microchip jr. schrieb:
> PS: Compiler Handbuch sagt zwar dass man die Altern. ISR auch
> beschreiben soll, wie das geht allerdings nicht.

Wenn das so ist, wo hast du dann das her:

void __attribute__((interrupt, no_auto_psv)) _AltADCInterrupt (void)

Das sieht für mich doch so aus, wie der "Alternate ADC Interrupt".

microchip jr. schrieb:
> bla() steht für einzelne Instruktionen und nicht für einen
> Funktionsaufruf...

Das ist dann aber im C-Umfeld sehr missverständlich formuliert.

Was macht man in C, wenn man den gleichen Code mehrfach verwenden will? 
Man packt ihn in eine Funktion und ruft ihn mehrfach auf. So hatte ich 
das gemeint.

MfG Klaus
Gast #2904214
Lesenswert?
• ▲
▼
Klaus, Danke für deine Antwort, vielleicht hab ich mich aber nicht 
richtig ausgedrückt. Hier noch ein Versuch:
Ich möchte dass die InterruptVEKTOREN
1
_AltADCInterrupt (void)
und
1
_ADCInterrupt (void)

eine identische Sprungadresse aufweisen. Dabei möchte ich zwecks 
Overhead nicht alle ISRs in eine Funktion packen (Wenn ALTIVT = 1 werden 
nämlich alle Vektoren von der Alternativen Tabelle verwendet).
Gast #2904301
Lesenswert?
• ▲
▼
micro jr. schrieb:
> Klaus, Danke für deine Antwort, vielleicht hab ich mich aber nicht
> richtig ausgedrückt.

Doch, hast du. Ich habe schon geahnt, daß du Funktionen vermeiden 
willst. Ich weiß leider nicht, wie man dem Compiler beibringt zweimal 
die gleiche Adresse zu verwenden. Im Manual scheinst du ja nichts 
gefunden zu haben. Da mußt du mal die Funktion des _AltADCInterrupt bzw 
des _ADCInterrupt Macros genau untersuchen.

Bevor ich aber nicht sicher wüßte, daß mir der Funktionsaufruf Probleme 
macht, würde ich das lassen.

MfG Klaus

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.