Hallo, Ich frage mich gerade, ob ich mich auf ein Verhalten des gcc verlassen darf. Wenn ich schreibe TCNT1=0x400, dann setzt der gcc das in folgenden Assembler um 25a: 3d bd out 0x2d, r19 ; 45 25c: 2c bd out 0x2c, r18 ; 44 Ist es schlau, sich darauf zu verlassen, daß erst das High Register beschrieben wird? Oder sollte man das aufteilen in TCNT1H = 0x4; TCNT1L = 0x0; ciao, Stefan
Da würd ich mich einfach mal drauf verlassen! Aber aufpassen! Das ist nicht Interrupt-Save!
Aber die Lösung mit TCNT1H = 0x4; TCNT1L = 0x0; verhält sich bei einem Interrupt auch nicht besser, als schreib ruhig TCNT1=0x400 Das der Compiler das richtig macht ist in der Doku dokumentiert. Du kannst natürlich vorher global die Interrupts abschalten und danach wieder einschalten.
Das mit dem Interrupt war mir schon klar. Man darf sowieso von keinem C-Statement ausgehen, daß es in einem Zyklus abgearbeitet wird. Solche Sachen muß man dann mit Zugriffsmechanismen schützen. Stichwort: Semaphore oder die ganz harte Methode, Interrupts abschalten. Wenn das so dokumentiert ist, dann darf man sich darauf auch verlassen. ciao, Stefan.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.