mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Interrupt


Autor: giggi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: (Gast) == (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht im makefile falschen µC angegeben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

....

ISR( ... )
{
  ....
}

int main()
{
  ....
}

Autor: giggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry für diese Frage aber wo und wie konfiguriere ich die makefile?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: giggi (Gast)
Datum:

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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: giggi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ein einfacheres Beispiel.

Autor: giggi (Gast)
Datum:

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

Autor: giggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Entwicklungsumgebung benutzt du?

Autor: giggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: giggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.