Hallo,
mir ist gestern aufgefallen, dass digitalWriteFast(pin,Level) je nach Pin-Definition unterschiedlich schnell ist. So ist digitalWriteFast() ca. 3 mal langsamer wenn man Instanzvariablen benutzt anstatt direkt Literal für den Pin. z.B.
Augabe: Time Literal (uSec.): 4 Time Instanzvariable (uSec.): 12
In meinem Projekt verwaltet jedes Objekt seine eigenen Pins in den Instanzvariablen. Heißt, es ist unmöglich diese Variablen durch statics, Literale etc. zu ersetzen. Gibt es trotzdem eine Möglichkeit mit Instanzvariablen die Geschwindigkeit wie mit Literalen bei digitalWriteFast() zu erreichen?
Da letztendlich Schrittmotoren angesteuert werden sollen spielt mittlerweile jede Mikrosekunde eine Rolle :S
P.S.
Woran liegt dieser Geschwindigkeitsunterschied eigentlich? Legt der Arduino Uno die Objekte in einem sehr langsamen Speicher ab wodurch Zugriffe auf Instanzvariablen ewig brauchen?
Das steht in der Beschreibung der Library dabei. Der Pin muss zur Compile-Zeit bekannt sein. Sonst geht das Makro nicht. Wenn er ist zur Laufzeit bekannt ist wird nur das normale digitalWrite() gemacht:
Wenn wir schon beim Eingemachten sind, kann mir jemand erklären wofür die do Schleife gut sein soll?
IMO sollte da das Klammerpärchen { ... } alleine schon reichen.