Hallo zusammen,
ich bin ganz neu im Umgang mit MikroComputern und schaffe es einfach
nicht, in eine ISR zu springen. Ich befürchte, das es damit zusammen
hängt, dass ich mit Eclipse und dem AVR-Plugin arbeite (unter MacOSX).
Vielleicht zunächst einmal der Code für Atmega168
// PORTD = 0b00000000; //Nur zum Überprüfen ob der Befehl in der ISR funktioniert
68
}
69
return0;
70
}
Ich habe schon ausgiebig hier im Forum recherchiert und dort wurde
erwähnt, dass solche Probleme bei dem Plugin auftreten können und nicht
am Code liegen müssen. Dabei wurde darauf verwiesen, dass in den Linker
Einstellungen der MikroComp definiert werden muss. Aber er ist bei mir
eingetragen.
Unter Project Properties -> C/C++ Build -> Settings -> Tool Settings ->
AVR-C-Linker steht:
Command: avr-gcc
Options: -Wl,-Map,Turntable.map -mmcu=atmega168
Was mich auch so ein wenig stuzig macht, ist, dass Eclipse die ISR
vollständig "Gelb-Ankreidet" und über Syntaxfehler berichtet. Aber ich
gehe mal davon aus, dass er einfach von der Syntaxprüfung nicht mit ISR
umgehen kann. Schreibe ich z.B. ein void davor, meckert die nicht mehr
rum.
Habt ihr vielleicht sonst noch eine Idee? Ich hoffe Ihr könnt mir
helfen, mich plagt das schon einige Tage und ich habe noch keine Lösung
finden können. Vielen Dank im Vorraus.
Gruß Jan
Hi!
Also wenn der Compiler ISR nicht kennt, ist was faul. Wenn du "void"
davorschreibst ist das eine normale Funktion. Ergo gibt es dafür keinen
Interruptvektor, der angesprungen werden kann. Allerdings sehe ich auch
nicht, warum ISR nicht erkannt werden soll.
Ich sehe an dem Code nichts auffälliges. Poste doch mal das Hexfile,
was du erzeugst.
Dass dein Eclipse-Plugin mit dem ISR() nichts anfangen kann und es
daher als eine Funktionsdefinition ohne davorstehenden Typ ansieht,
ist sicher nicht verwunderlich. Es müsste wohl jemand dem Plugin
beibringen, dass ISR() halt keine echte Funktion ist.
Es gibt keinen Interrupt, weil der Timer gar nicht läuft. Datenblatt
rauskramen, und nochmal genau nachschauen, welche Bits in welchen
Registern liegen.
>Ich habe schon ausgiebig hier im Forum recherchiert und dort wurde>erwähnt, dass solche Probleme bei dem Plugin auftreten können und nicht>am Code liegen müssen.
Tja, da hast du wohl was falsch verstande. Solche Probleme liegen IMMER
am Code.
In deinem Fall vermutlich daran, das CS00 und CS02 nicht in TCCR0A,
sondern in TCCR0B liegen. So läuft dein Timer gar nicht erst los.
Die Syntax-Meckerei des Eclipse-Editors and dem ISR-Makro allerdings
liegt an Eclipse, und sollte nach dem ersten build weg sein.
Oliver
Wow, seid ihr schnell...
Das der SyntaxChecker unbegründet anschlägt dachte ich mir. Hier mal die
HEX:
1
:100000000C9434000C9451000C9451000C94510049
2
:100010000C9451000C9451000C9451000C9451001C
3
:100020000C9451000C9451000C9451000C9451000C
4
:100030000C9451000C9451000C9453000C945100FA
5
:100040000C9451000C9451000C9451000C945100EC
6
:100050000C9451000C9451000C9451000C945100DC
7
:100060000C9451000C94510011241FBECFEFD4E02A
8
:10007000DEBFCDBF11E0A0E0B1E0EEEFF0E002C0E6
9
:1000800005900D92A030B107D9F711E0A0E0B1E0E2
10
:1000900001C01D92A230B107E1F70E945E000C94EE
11
:1000A0007E000C9400001F920F920FB60F92112445
12
:1000B0001BB80F900FBE0F901F901895CFEFD4E094
13
:1000C000DEBFCDBF14B88FEF8AB98BB984B5856018
14
:1000D00084BD84B5826084BD84EB87BD80916E0051
15
:1000E000826080936E00789480910001909101016C
16
:0E00F000892B11F05898F8CF589AF6CFFFCF11
17
:00000001FF
Ist das so wie gewollt, oder soll ich die Datei komplett reinstellen?
Mal so vielleicht nebenbei. Wie wertet ihr so eine HEX-Datei aus? Gibt
es ein Programm, welches diese dann wieder in Assembler-Code oder
ähnliches übersetzt?
Danke für die Hilfe
Oh, Schande über mein Haupt.... Das tut mir leid. Das war Dumm von mir!
Werde es gleich mal ausprobieren.
Ihr habt recht, die Einstellungen für den Prescaler liegen im
B-Register.
Vielen Dank für Eure Hilfe. Hoffentlich kann ich Sie irgendwann mal
erwiedern, aber das wird wohl noch dauern ;-)
Grüße Jan
>Es müsste wohl jemand dem Plugin>beibringen, dass ISR() halt keine echte Funktion ist.
Das Problem ist eher, daß die avr-include-files aus irgend einem Grund
nicht sofort vom Editor ausgewertet oder gefunden werden. Die werden
auch als fehlend angemeckert. Nach dem ersten build kennt der Editor
dann alles.
Oliver
Oliver schrieb:
>>Ich habe schon ausgiebig hier im Forum recherchiert und dort wurde>>erwähnt, dass solche Probleme bei dem Plugin auftreten können und nicht>>am Code liegen müssen.>> Tja, da hast du wohl was falsch verstande. Solche Probleme liegen IMMER> am Code.
Oder an den Compiler Optionen ;-)
Vor einer weile habe ich ein kleines dev board in betrieb genommen mit
einem Mega32, alles funktionierte wunderbar aber kein Interrupt wollte
funktionieren.
Nach einer ganzen weile, und knapp ner Stunde suchen, habe ich dann den
Fehler gefunden.
Ich habe zwar einen Mega32 gebrannt aber compiliert war das .hex file
für einen Mega16.
Die beiden µC sind sich wohl so ähnlich das der Code zwar lief aber die
Vektoren sind verschieden.
So konnte auch kein Interrupt anspringen...
Grüße,
Peter