mikrocontroller.net

Forum: Compiler & IDEs attiny44 stürzt direkt nach dem ich sei(); ausführe ab


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche ein einfaches Projekt vom attiny45 auf attiny44 zu 
portieren, doch leider ohne erfolg. Der attiny44 stürzt direkt nach dem 
ich sei(); ausführe ab. (wenn ich dem avr studio emulator beim debbugen 
glauben kann).

Mein Programm (habe es abgespeckt):

#include <avr/interrupt.h>
#include <avr/io.h>

ISR(TIM0_OVF){
PORTB=0b00000111;
}

int main(void){
DDRB=0b00000111;
PORTB=0b00000000;
//PORTB=0b00000111;  Leuchtdioden  an
TIMSK0=(1<<TOIE0);
TCCR0B=((1<<CS00)|(1<<CS02));
sei();
while(1);
}

PORTB=0b00000111; schaltet drei Leuchtdioden an. Wenn diese Zeile in 
main nicht auskommentiert ist dann leuchten auch diese leds. Zum 
Interrupt kommt er aber nie, denn die leds bleiben immer aus wenn die 
Zeile PORTB=0b00000111; im main auskommentiert bleibt. Woran kann das 
denn liegen??

Interessanter weise habe ich folgende Warnung beim Kompilieren :

../attiny44test.c:6: warning: 'TIM0_OVF' appears to be a misspelled 
signal handler

danke für eure Hilfe im voraus. Gibt es vielleicht eine Besonderheit 
beim attiny44??

Gruss,
jan

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:
> ../attiny44test.c:6: warning: 'TIM0_OVF' appears to be a misspelled
> signal handler

Der kennt den Interrupt nicht, also nachschaun, wie der wirklich heißt.
:-)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müsste es nicht: TIM0_OVF_vect heißen...

Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte schon mal das Problem, dass der Debugger abstürzt wenn in 
einer Schleife keine weiteren Befehle stehen. Füge also z.B. zweimal 
nop(); in die while(1) Schleife ein. Vielleicht hilfts.
Grüße

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

Bewertung
0 lesenswert
nicht lesenswert
asdf schrieb:
> Hallo,
>
> ich hatte schon mal das Problem, dass der Debugger abstürzt wenn in
> einer Schleife keine weiteren Befehle stehen. Füge also z.B. zweimal
> nop(); in die while(1) Schleife ein. Vielleicht hilfts.

Quatsch.
Der Compiler sagt ihm sogar, wo das Problem liegt.
Nur darf man eben Warnungen nicht in jedem Fall auf die leichte Schulter 
nehmen

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Vektor heißt TIM0_OVF_vect und nicht TIM0_OVF.

Der Compiler hat Recht, TIM0_OVF gibt es nicht. Schaut man in die 
include Datei dann findet man dort  TIM0_OVF_vect . Sobald  ich das zum 
TIM0_OVF_vect ergänzt habe verhält sich alles wie erwartet.

Weis nicht wie dieser Fehler reingekommen ist. Irgendwie war ich mir so 
sicher das diese Zeile richtig war, so sicher, das ich die 
Compilerwarnung nicht ernst genommen habe, bzw. nicht akzeptiert habe. 
Seltsam aber das Verhalten beim debbugen mit AVR studio. Das hat 
wahrscheinlich dazu geführt das ich die Warnung nicht ernst genommen 
habe.

Warnungen ignorieren darf man anscheinend nicht machen, der Compiler hat 
immer Recht! Oder fast immer??

Auf jeden Fall vielen Dank für Eure Hilfe.

Gruss,
Jan

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

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:

> Warnungen ignorieren darf man anscheinend nicht machen, der Compiler hat
> immer Recht! Oder fast immer??

Es gibt nur sehr wenige Warnungen, die man tatsächlich gefahrlos und 
ohne Ansehen der Situation einfach ignorieren kann. Aber selbst dann ist 
man besser beraten, den Code so zu ändern, dass die Warnung nicht mehr 
kommt.

Profis (also die Leute, die ihre Brötchen damit verdienen) arbeiten in 
der Regel so, dass ihr Code auf der höchsten oder zumindest der 
vorletzten Compiler-Warning Stufe (je nach Compiler) ohne jegliche 
Warnung compilieren muss! Ansonsten wird der Code wieder zum 
Programmierer zurückgegeben und wird nicht in das Produktionsenvironment 
übernommen. Hilfreich ist dabei ein Schalter, den praktisch alle 
Compiler haben: "Treat Warnings as Errors". Dann kann man keine Warnung 
übersehen, weil der Build Prozess fehl schlägt.

Betrachte Warnings als Hilfestellung des Compilers und nicht als 
notwendiges Übel und du hast weniger Ärger. Denn gerade in der 
Programmierung nimmt man jede Hilfe, die man kriegen kann dankbar in 
Anspruch.

Autor: sonstwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts eigentlich irgendwo eine Liste mit all den "*_vect" Namen?

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

Bewertung
0 lesenswert
nicht lesenswert
sonstwer schrieb:
> Gibts eigentlich irgendwo eine Liste mit all den "*_vect" Namen?

Der Regelfall ist:
Im Datenblatt das Kapitel mit den Interrupt Vektoren aufschlagen.
An jeden Namen noch ein _vect dran hängen ... du hast den Gcc-Namen 
dafür.

Man kann natürlich auch ins prozessorspezifische iom*.h hineinschauen. 
Dort müssen auch alle vorhanden sein. Denn irgendwie müssen ja auch 
diese Namen irgendwo definiert sein.

Autor: sonstwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Beschreibung. Habs gerade in der iom*.h gefunden, aber 
wirklich komfortabel ist das nicht. Dann Nehm ich lieber deine 
"Datenblattname + '_vect'"-Faustregel ;)

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

Bewertung
0 lesenswert
nicht lesenswert
sonstwer schrieb:
> Danke für die Beschreibung. Habs gerade in der iom*.h gefunden, aber
> wirklich komfortabel ist das nicht. Dann Nehm ich lieber deine
> "Datenblattname + '_vect'"-Faustregel ;)

Du wirst schnell merken, dass man die meisten Interrupts mit denen man 
ständig zu tun hat, in 0 Komma nix auswendig kann.

Autor: sonstwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Du wirst schnell merken, dass man die meisten Interrupts mit denen man
> ständig zu tun hat, in 0 Komma nix auswendig kann.

Stimmt schon, meine kenn ich auch auswendig, nur will ich auch wissen, 
wo ich schnell schauen kann wenn ich mal was 'exotisches' suche ;)

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sonstwer schrieb:
> Danke für die Beschreibung. Habs gerade in der iom*.h gefunden, aber
> wirklich komfortabel ist das nicht.

Ich schau meistens in der avr-libc Dokumentation nach zu 
<avr/interrupt.h>. Dort gibt's ne grosse Tabelle mit den 
Vektor-Bezeichnungen, Beschreibung dazu und ne Liste mit MC, welche 
diesen Vektor kennen.

http://www.nongnu.org/avr-libc/user-manual/group__...

> Dann Nehm ich lieber deine
> "Datenblattname + '_vect'"-Faustregel ;)

Gute Eselsbrücke, darauf bin ich noch nicht gekommen. 8)

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.