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.
Du brauchst ein C-Buch! void counter0_Int(void) { TR0 = 0; P3 = 0xFF; for (i = 0; i<1000; i++) P3 = 0; TH0 = 0xFF; TL0 = 0xF0; TR0 = 1; } Übrigens: Warteschleife im Interrupt: Pfui!
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.
>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.
ASCI schrieb: > Braucht er aber trotzdem. Klar. Der Aufruf üblicher Quelltext-Editoren sollte hart verdongelt werden mit zufälligen Abfragen einzelner Wörter im K&R ... so daß das Buch zwingend vorhanden sein muss.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.