Syntax Error - Token

OP #3057911
Lesenswert?
• ▲
▼
Hallo zusammen,

ich bin neu hier, und würde mich freuen wenn ich vielleicht von
euch den einen oder anderen Tip bekäme.

Folgendes habe ich:

Fehlermeldung des SDCC Compilers:

timer01.c:36: syntax error: token -> 'Interrupt' ; column 33

Ausgelöst durch folgende Zeile:

void counter0_Int(void) Interrupt 1  <=== DIE HIER
  {
  TR0 = 0;
  P3 = 0xFF;
  for (i = 0; i<1000; i++)
  P3 = 0;
  TH0 = 0xFF;
  TL0 = 0xF0;
  TR0 = 1;
  }

Ich komme hier echt nicht weiter und würde mich über jede Hilfe freuen. 
Danke schonmal.
Persönliche Seite
Lesenswert?
• ▲
▼
ASCI schrieb:
> Du brauchst ein C-Buch!

Das hilft bei compilerspezifischen Spracherweiterungen wie Interrupts 
ausnahmsweise mal gar nicht. C kennt keine Interrupts, und ein C-Buch 
daher auch nicht.
Interrupts werden je nach Compilerhersteller auf unterschiedliche Art 
und Weise umgesetzt; wer also mit SDCC Interrupts nutzen will, muss die 
korrekte SDCC-Interrupt-Syntax nutzen und kann nur dann Codebeispiele 
für einen anderen Compiler verwenden, wenn dessen Interruptsyntax der 
des SDCC entspricht.
Gast
Lesenswert?
• ▲
▼
>Das hilft bei compilerspezifischen Spracherweiterungen wie Interrupts
>ausnahmsweise mal gar nicht. C kennt keine Interrupts, und ein C-Buch
>daher auch nicht.

Richtig. Braucht er aber trotzdem. Und das Manual zum SDCC.
OP
Lesenswert?
• ▲
▼
Hallo zusammen,

also ich muß mich, nachdem die Diskussion doch anhält, nochmals melden.

SDCC (lt. aktuellem Handbuch) gibt für einen Interrupt des 80C51 
folgendes vor:

void external_isr (void) interrupt interruptNumber using bankNumber
{

}

Das Handbuch liegt mir durch aus vor. Übrigend der K&R schweigt sich an 
dieser Stelle aus. Andere C Bücher, die im wesentlichen die 
Programmierung eines PC beinhalten und sich auf den K&R stützen, 
ebenfalls.

Somit muß ich mich auf das oben genannte beziehen. Was anderes gibt es 
nicht. Und das funktioniert nicht. Immer der gleiche token Fehler.

Wenn man es, wie von ASCII genannt, ausführt - läuft zwar der Compiler 
durch. Aber der Interrupt funkt nicht.

Vielleicht trägt das etwas zur Klarheit der Diskussion bei.

Gruß, und Danke für Eure Antworten.
Lesenswert?
• ▲
▼
Peter K. schrieb:
1
void external_isr (void) interrupt interruptNumber using bankNumber

Dann definiere die Funktion doch auch so! (Ich hab im folgenden mal 
unterstellt, dass du durchgehend Registerbank 0 verwendest.)
1
void counter0_Int(void) interrupt 1 using 0
2
  {
3
   // code
4
  }

Abgesehen davon: Macht die ISR wirklich das, was du beabsichtigst?
Schau dir die for()-loop noch mal genau an.

Peter K. schrieb:
> Übrigens der K&R schweigt sich an dieser Stelle aus.

Warum wohl? Das ist eine Besonderheit des SDCC außerhalb des 
C-Sprachstandards.

Grüße

Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.