Morgen! Nachdem ich mich grad durch das Tutorial arbeite und bei den Interups angekommen bin (feine Sache wenn man vorher auf Borland C++ Builder gearbeitet hat) sind mir da zwei "Schwierigkeiten" aufgefallen: Zuerst mal ein Stolperstein: Im Tutorial wird Bezug genommen auf die "alten" AT90xxx, dort werden die Interups INT0 und INT1 im Register GIMSK gesetzt, das Register gibts aber bei den ATMega xxx nicht mehr, da heisst es dann GICR. Danach noch ein Problem: Um die Interrups zu nutzen muss man ja Bit 7 (Global Interrupt Enable) im Register SREG setzen, laut Datenblatt wird dieses Bit mit "I" bezeichnet, aber mit I als Konstante lässt sich der Code nicht Compilieren. Heisst: SREG |= (1<<I); //klappt nicht, Errordings SREG |= (1<<7); //So klappts, muss man aber erst mal drauf kommen. Zum Schluss noch etwas (hoffentlich) konstruktive Kritik: Dieses doofe Bytegeschiebe ist meiner Meinung nach mit Abstand das umständlichste beim Umstieg von C/C++ auf diese Mikrocontroller.. Wär nicht schlecht wenn man darauf Anfangs beim Tutorial ein bisschen tiefer darauf eingehen kann, aber das sollten besser Profis schreiben, Bitschieben ist nicht meine Stärke. Braucht man auf dem PC auch nicht wirklich oft, in C++ hab ich ja meinen bool-Datentyp. Ansonsten schönes Tutorial, stramm gehalten, aber is ja auch kein C-Tuorial.
Andreas Klepmeir wrote: > Danach noch ein Problem: Um die Interrups zu nutzen muss man ja Bit 7 > (Global Interrupt Enable) im Register SREG setzen, laut Datenblatt wird > dieses Bit mit "I" bezeichnet, aber mit I als Konstante lässt sich der > Code nicht Compilieren. > Heisst: > SREG |= (1<<I); //klappt nicht, Errordings > SREG |= (1<<7); //So klappts, muss man aber erst mal drauf kommen. Dafür gibt es die Pseudo-Funktion sei() aus der interrupt.h. Vom SREG selber sollte man als C-Programmierer i.d.R. die Finger lassen! Manipulationen können unerwünschte Folgen haben. sei() und sein Gegenstück cli() fügen jeweils direkt den entsprechenden Assembler-Befehl ein. Da kann dann auch nicht viel schief gehen. Abgesehen davon sind sei() und cli() atomar, die o.a. Variante aber nicht. Müsste aber auch alles im Tutorial stehen... > Bitschieben ist nicht meine Stärke. Braucht man auf dem PC auch nicht > wirklich oft, [...] Klar, auf dem PC programmiert man ja auch weit entfernt von der Hardware und muss keine Low-Level-Konfigurationen machen... > [...] in C++ hab ich ja meinen bool-Datentyp. Wenn man so viel Speicher zur Verfügung hat, dass man für jedes Flag ein ganzes Byte oder evtl. sogar mehr opfern kann, dann kann man bool auch auf µCs verwenden... Oder eine Implementation "bauen", wie es bei kommerziellen Embedded-Compilern oft gemacht wird, indem man mit Hilfe von Makros so tut, als würde man auf einzelne Bits zugreifen, und der Compiler macht im Hintergrund die entsprechende Schieberei, ohne dass der Programmierer da viel von mitbekommt.
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.