Forum: Compiler & IDEs ISO C99 und ISR


von Wastl F. (rescuetigerchen)


Lesenswert?

Moin!

Ich bekomme beim kompilieren die Warnung "Error  1: ISO C99 requires 
rest arguments to be used" ausgegeben.
Ich verwende einen XMEGA mit eingebundener interrupt.h.

Die betreffende Zeile betrifft die einzige ISR im Code:
1
ISR(TCC0_OVF_vect){
2
  
3
  }
Da ich diesen Fehler loswerden möchte und alle meine Suchen im Internet 
keine Lösung brachten frage ich hier mal nach.

Ich hoffe ihr könnt mir Tips geben.

Viele Grüße,
wastlB

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Passt irgendwie alles nicht zusammen.

Bitte erzeuge ein compilierfähiges Minimalbeispiel, welches den
Fehler reproduziert, und poste es gemeinsam mit der benutzten
Compiler-Kommandozeile.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

C kennt keine Interruptroutinen, das sind immer nichtportable 
Erweiterungen der jeweiligen Compilerhersteller.

Du wirst die betreffende Warnung hier ignorieren, oder, so der Compiler 
das zur Verfügung stellt, mit einem geeigneten pragma deaktivieren 
müssen.

von Karl H. (kbuchegg)


Lesenswert?

Frage 1:

kompilierst du überhaupt mit dem gcc?

Denn eigentlich steckt ja hinter ISR ein Makro, welches dann aus

ISR(TCC0_OVF_vect)

den tatsächlichen Funktionskopf erzeugt. Wenn bei dieser Expansion eine 
"Argumentliste" übrig bleibt, wie es deine Warnung zu suggerieren 
scheint, dann ist da irgendwas schief gelaufen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:

> kompilierst du überhaupt mit dem gcc?

Ja, macht er. ;-)
1
      if (argc + 1 == macro->paramc && macro->variadic)
2
        {
3
          if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
4
            cpp_error (pfile, CPP_DL_PEDWARN,
5
                       "ISO C99 requires rest arguments to be used");
6
          return true;
7
        }

> Wenn bei dieser Expansion eine
> "Argumentliste" übrig bleibt, wie es deine Warnung zu suggerieren
> scheint, dann ist da irgendwas schief gelaufen.

Daher hätte ich ja auch gern ein komplettes, compilierbares Beispiel.

von Peter II (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Ja, macht er. ;-)

und woher weist du damit, das dieser code nicht auch in einem anderen 
compiler drin ist?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:

> und woher weist du damit, das dieser code nicht auch in einem anderen
> compiler drin ist?

Weil es außerordentlich ungewöhnlich wäre, wenn jemand anders diese
reichlich eigenwillig anmutende Formulierung parallel erfunden hätte.

Außerdem sind wir im GCC-Forum, die angegebene ISR entspricht der
Syntax von AVR-GCC/avr-libc, und er schrieb auch was von interrupt.h.

von Carl D. (jcw2)


Lesenswert?

1
#include <avr/interrupt.h>
vergessen?

Dann ist
1
ISR(ein_vector) {  }
nämlich eine Funktion mit fehlendem Typ für Parameter und ReturnWert.
Und das erlaubt C99 nicht!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.