So,
blinken mit Threads funktioniert jetzt.
Etwas verwirrt hat mich deine Frage nach der Einstellung von TCCR0B. Der nibobee ist standardmäßig mit einem atmega16 ausgestattet, der für den Timer0 nur ein TCCR hat. Ich war mir daher nicht sicher, ober der Timer0 überhaupt der richtige Timer für die Zeitmessung ist, wenn der atmega16 benutzt wird. Aber dein Hinweis auf SimpleOS.c hat da weiter geholfen.
Ich habe TCCR0 auf 3 gesetzt, also die beiden Clock-Select-Bits aktiviert und so den Prescaler clock/64 gewählt. Das bedeutet allerdings, dass meine Millisekunden in Wirklichkeit ca. 1,12 Millisekunden dauern. Soweit ich sehe, müsste ich für einen korrekten Wert SimpleOS.c anpassen. Genügt es, wenn ich dies in der Kopie in myProject\haikuvM mache, oder muss ich sonst noch etwas beachten?
Der Nibobee-Programmer nimmt, soweit ich erkennen kann, keine Commandline-Optionen an. Dahingehende Versuche hat er ignoriert.
Hier folgen noch meine Anpassungen an deiner avr\tutorial\BlinkAsync.java:
Code:
...
import haiku.vm.NativeCVariable8;
...
@NativeCVariable8
public static volatile int SREG;
...
// In main():
SREG |= (1 << 7); // Interrupts ein
// Timer-Konfiguration: Prescaler auf 1/64
TCCR0 |= (1 << CS01);
TCCR0 |= (1 << CS00);
TIMSK |= (1 << TOIE0); // Timer-Overflow-Interrupt-Enable Timer0
...
Ich werde als nächstes versuchen, für die beiden externen Interrupts INT0 und INT1 Routinen zu schreiben analog zu deiner Idee für den Timer2.
Vielen Dank für deine Hilfe, ohne wäre ich nicht weiter gekommen.
Lesezeichen