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 #3058184
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 #3058196
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 #3060023
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.
#3060174
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren