Interrupt in C

Gast #2710661
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
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
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
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
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
#2710871
Hallo ee,

falls die Variable TimeDelay ín der ISR ein fortlaufender Zähler sein 
soll, muss sie als "static" deklariert sein. Sonst wird sie bei jedem 
Aufruf der Funktion neu angelegt und beim Verlassen verworfen.

Grüße

Stefan
#2710885
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.