Forum: Mikrocontroller und Digitale Elektronik Probleme mit Interrupt


von giggi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ich bin noch nicht so ganz fit in Interrupts und habe auch beim 
kompilieren Fehler bekommen. Vielleicht kann  mir jemand helfen. Danke.
Es handelt sich um einen ATMega16.

folgende Fehler beim AVR-GCC:

../Interrupt1.c:25: error: 'GICR' undeclared (first use in this 
function)
../Interrupt1.c:25: error: (Each undeclared identifier is reported only 
once
../Interrupt1.c:25: error: for each function it appears in.)
../Interrupt1.c:29: error: static declaration of '__vector_2' follows 
non-static declaration
../Interrupt1.c:29: error: previous declaration of '__vector_2' was here
make: *** [Interrupt1.o] Error 1
Build failed with 5 errors and 0 warnings...

Was ich auch nicht so ganz verstehe warum er mir GICR anmeckert? Der ist 
doch im avr/iom16.h und somit der aufrufenden avr/io.h deklariert?

von (Gast) == (Gast)


Lesenswert?

Vielleicht im makefile falschen µC angegeben?

von Karl H. (kbuchegg)


Lesenswert?

Wenn du das dann hast, dann nimmst du die ISR aus der main() raus. 
Offiziell ist es in C nicht möglich Funktionen innerhalb von anderen 
Funktionen zu definieren
1
....
2
3
ISR( ... )
4
{
5
  ....
6
}
7
8
int main()
9
{
10
  ....
11
}

von giggi (Gast)


Lesenswert?

sorry für diese Frage aber wo und wie konfiguriere ich die makefile?

von Peter (Gast)


Lesenswert?

> volatile int a=1;

volatile wird in diesen code nicht gebraucht.

> int i = 128; i > 1; i -= i/2)
warum int? ist dir der controller etwas zu schnell?

> _delay_ms(1000);
eine ISR sollte schnell sein, dieses passt nicht mit dem delay zusammen.

von giggi (Gast)


Lesenswert?

oooh ja ich bin echt blind das war natürlich ein ordenlicher Fehler, 
vielen Dank.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wenn Du das nicht weißt, hast Du dort auch nichts falsches angegeben.
Hast Du in den Tiefen Deiner Menüs eventuell den falschen Prozessor 
eingestellt?

von giggi (Gast)


Angehängte Dateien:

Lesenswert?

hier ein einfacheres Beispiel.

von giggi (Gast)


Lesenswert?

nein ich habe zuerst nicht angegeben, also keinen AVR und dann habe ich 
mit AVR Zuweisung am Anfang probiert klappt beides leider nicht.

von giggi (Gast)


Lesenswert?

hi also ich habe den Fehler selber schon gefunden und zwar war der Tip 
mit makefile schon ganz gut denn da ist ATMega128 definiert und diese 
hat natürlich andere Registerbezeichnung. Wollte nur jetzt fragen wie 
übernehme ich den Wert neuer MCU in makefile? Ich kann sie auwählen aber 
nicht speichern zumindest klappt bei mir nicht.

von Karl H. (kbuchegg)


Lesenswert?

Welche Entwicklungsumgebung benutzt du?

von giggi (Gast)


Lesenswert?

STK500 und AVR Studio 4.14. Ich habe jetzt das mit makefile gemacht aber 
er reagiert nicht muss ich wo anders einstellen damit die richtige 
iom16.h und nicht io128.h genommen wird?

von Karl H. (kbuchegg)


Lesenswert?

giggi schrieb:
> STK500 und AVR Studio 4.14. Ich habe jetzt das mit makefile gemacht aber
> er reagiert nicht muss ich wo anders einstellen damit die richtige
> iom16.h und nicht io128.h genommen wird?

Vergiss das makefile.
Im AVR-Studio stellst du das ganz einfach unter den Project Options ein

Menüpunkt 'Project'
Ganz unten 'COnfiguration Options'

Dort solltest du auch die tatsächliche Taktfrequenz eintragen.


Nicht vergessen: Für den Simulator gibt es eine eigene Einstellung für 
das verwendete Gerät.

-> Wenn man beim Erzeugen des Projekts aufpasst und gleich das richtige 
Device einträgt, spart man sich viel Ärger.

von giggi (Gast)


Lesenswert?

hi vielen Dank für diesem Tip, habe gerade sogar das selber gefunden 
beim suchen. Das Problem war dass ich schon mal das ganze so angewählt 
habe jedoch statt atmega16 hat er atmega128 übernommer und das habe ich 
übersehen. Jedoch hat jetzt zum Glück alles geklappt. Naja jetzt bin ich 
zumindest schlauer. Trotzdem vielen Dank!

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.