Hallo Ich hab unlängst in meinem ATTINY2313 Datenblatt gelesen, dass das togglen der PORTx Register ganz einfach durch schreiben der zugehörigen PINx Registers möglich ist. (S. 51 ganz oben) Weiß jemand mehr darüber? Warum wird das nicht häufiger verwendet sondern immer nur die XOR Methode? Das könnte man doch auch ins AVR-GCC-Tutorial aufnehmen, was meint ihr? mfg Fritz
Fritz schrieb: > Weiß jemand mehr darüber? Welche Information fehlt dir denn noch darüber? > Warum wird das nicht häufiger verwendet > sondern immer nur die XOR Methode? Weil es nur bei neueren AVRs funktioniert.
Also zb. fehlte mir bis vor 5min die Information, dass man nicht PINx|=... schreiben soll, sondern PINx=... wenn man togglen will. Warum weiß ich aber immer noch nicht so ganz. mfg Fritz
Fritz schrieb: > Weiß jemand mehr darüber? Nein. Der von dir gefundene Absatz beinhaltet alles was man wissen muss: | Writing a logic one to PINxn toggles the value of PORTxn, | independent on the value of DDRxn. Note that the SBI instruction | can be used to toggle one single bit in a port. > Warum wird das nicht häufiger verwendet sondern immer nur die XOR Methode? Ich nehme an weil mit der XOR-Methode direkt aus dem Code hervorgeht was gemacht wird. Mit der Methode PINxn zu beschrieben benoetigt es implizites Wissen zu der Plattform fuer die der Code geschrieben ist; ohne zusaetzlichen erklaerenden Kommentar ist dieser Code dann nur mehr schwer verstaendlich. Sollte der Code einmal auf eine andere Prozessorfamilie portiert werden, dann ist das eine Stelle die sehr leicht bei der Portierung uebersehen wird und dann unnoetiges Debugging verursacht. Kurz: wenn man weiss was man tut und unbedingt 2 Takte oder 4 Bytes einsparen muss, dann kann man getrost die PINxn-Methode verwenden. Meiner Erfahrung nach sind diese Bedingungen aber aeusserst selten gegeben. IMHO der einzige Grund diese Methode zu verwenden ist wenn man ein atomares Toggeln eines Bits braucht. > Das könnte man doch auch ins AVR-GCC-Tutorial aufnehmen, was meint ihr? Hmm, ich denke gerade Anfaenger sollten die XOR-Methode verwenden, wo explizit da steht was getan werden soll.
Fritz schrieb: > Also zb. fehlte mir bis vor 5min die Information, dass man nicht > PINx|=... schreiben soll, sondern PINx=... wenn man togglen will. Warum > weiß ich aber immer noch nicht so ganz. > > mfg Fritz weil du sonst erst PINx ausliest...
> Hmm, ich denke gerade Anfaenger sollten die XOR-Methode verwenden, wo > explizit da steht was getan werden soll. Ich denke es würde auch schon genügen, wenn man hineinschreiben würde, dass es die Methode gibt, aber dass man sie aus oben genannten Gründen, die mir jetzt sehr verständlich erscheinen, nur selten verwenden sollte. > weil du sonst erst PINx ausliest... Hmm, ja stimmt natürlich, daran hatte ich gar nicht gedacht, PIN hat ja dann beim lesen eine völlig andere Bedeutung als beim schreiben. Vielen Dank an alle. mfg Fritz
Der entscheidene Punkt dabei ist m.E. nicht so sehr die Möglichkeit, Pins toggeln zu können. Vielmehr ist man nur so in der Lage, mehrere Pins eines Ports atomar und gleichzeitig auf einen bestimmten Wert zu setzen, ohne die Interrupts abschalten zu müssen. http://www.mikrocontroller.net/articles/Interrupt#Atomarer_Datenzugriff
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.