Interrupt in C

Gast #2710661
Lesenswert?

Hallo zusammen
Ich habe folgendes Programm geschrieben um die Interruptprogrammierung 
in C zu üben(habe bisher Assembler programmiert). Nun gibt der Compiler 
folgende Warnung aus:
../asdf.c:18: warning: return type defaults to `int'
../asdf.c:24: warning: control reaches end of non-void function
Im Forum wurde geschrieben, dass das Programm die Interruptroutine nicht 
erkennt, und dass man den Vector aus dem iom8.h kopieren soll.
Nun steht dort: #define SIG_OVERFLOW1    _VECTOR(8)
Das ist doch die alte programmierweise mit SIGNAL() statt mit ISR(). 
Wenn ich aber SIGNAL(SIG_OVERFLOW1) eingebe, gibts den gleichen Fehler.
Wie soll ich jetzt weiter vorgehen?
Kann ich die Bibliothek erneuern?
Angehängte Dateien:
Gast #2710678
Lesenswert?

ee schrieb:
> habe bisher Assembler programmiert

Bitte nicht übel nehmen... Das sieht man xD

Bezieht sich jetzt nicht auf den Inhalt den Codes sondern auf dessen 
Optik.

Geschweifte Klammer auf  zu in der selben Zeile mit der ersten  letzen 
Instruktion ist stilistisch z.B. etwas ekelhaft, macht den Code einfach 
recht unleserlich.

z.B.
1
void powersave(void){SREG|=(1<<7);

oder
1
return(1);}

Auch bei der Einrückung solltest du etwas konsequenter Vorgehen.
Manche Sachen sind garnicht eingerückt und beim Rest gibt es 3 
verschiedene Tiefen.

Ist jetzt wie gesagt nicht böse gemeint, aber wenn man seinen Code von 
Anfang an sauber formatiert tut man sich selbst und anderen einen 
Gefallen.
#2710682
Lesenswert?

Welche Version von avr-gcc bzw. avr-libc verwendest du denn jeweils? 
Habe es eben mit deinem Code selbst probiert. Bei mir wird bloß 
folgendes bemeckert:
1
avr-gcc -Waavr-gcc -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=1000000UL -MMD -MP -MF"asdf.d" -MT"asdf.d" -c -o "asdf.o" "../asdf.c"
2
In file included from ../asdf.c:2:0:
3
/usr/lib/gcc/avr/4.7.0/../../../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]
4
../asdf.c: In function '__vector_8':
5
../asdf.c:20:11: warning: 'TimeDelay' is used uninitialized in this function [-Wuninitialized]
6
Finished building: ../asdf.c

Ich verwende avr-libc in Version 1.8.0 sowie avr-gcc in Version 4.7.0.

Es kann also durchaus sein, dass du da mit veralteten Versionen 
hantierst.
Gast #2710690
Lesenswert?

An moep,
Ich nehms nicht übel, bin für konstruktive Kritik empfänglich. Ich geb 
mir beim nächsten Code mehr Mühe=)

An Karol Babioch,
Wo steht welche Version ich besitze, und falls meine veraltet ist, kann 
man die kostenlos updaten?

Vielen Dank schon mal
Gast #2710733
Lesenswert?

Du hast aber ganz schön um dich geworfen mit Fehlern! Deine While(1) 
Schleife darf keine Ende haben, sonst endet hier das Programm. Also muss 
das Return da raus.
Oben hast du ein Delfine 1/x.yxz, dass geht schief weil du nicht 
explizit sagst der Compiler soll es float rechnen bzw du weist dieses 
Float, welches < 0 ist einer int Variable zu, auch Quatsch. Für sleep 
gibt fertige Makros in der sleep.h.


Ingo
#2710885
Lesenswert?

Ingo schrieb:
> Oben hast du ein Delfine 1/x.yxz, dass geht schief weil du nicht
> explizit sagst der Compiler soll es float rechnen

Nein, das wird automatisch in double gerechnet.

> bzw du weist dieses Float, welches < 0 ist einer int Variable zu, auch
> Quatsch.

Nein. Das Ergebnis der Division ist ca. 3,8, und das wird dann auf 3 
abgeschnitten.
Gast #2712339
Lesenswert?

Hallo
melde mich zurück, danke für euer Antworten. Ich habe das Problem mit 
Download des Atmel Studio 6 gelöst. Hatte zwar anfangs Probleme mit dem 
STK500 aber jetzt läufts. Und die Benutzeroberfläche ist wirklich nicht 
schlecht. Hat sich also gelohnt.

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