DigitalWriteFast() schneller mit Literalen als Instanzvariablen!!!?


hallo,
mir ist gestern aufgefallen, dass digitalwritefast(pin,level) je nach pin-definition unterschiedlich schnell ist. ist digitalwritefast() ca. 3 mal langsamer wenn man instanzvariablen benutzt anstatt direkt literal für den pin. z.b.
code: [select]

class pins {
public:
int8_t testpin;
pins(int8_t pin) { testpin = pin; }
};
pins pins = pins(3);

void loop(){
unsigned long starttime = micros();
digitalwritefast(3, high);
digitalwritefast(3, low);
serial.println("time literal (usec.): " + string(micros() - starttime));
starttime = micros();
digitalwritefast(pins.testpin, high);
digitalwritefast(pins.testpin, low);
serial.println("time instanzvariable (usec.): " + string(micros() - starttime));
}


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?

quote
gibt es trotzdem eine möglichkeit mit instanzvariablen die geschwindigkeit wie mit literalen bei digitalwritefast() zu erreichen?
der compiler optimiert.

konstanten kann er bis in den programmcode tragen.

variable werte müssen mindestens geholt werden, evtl. noch geschoben usw.
das braucht takte.

die klare logische antwort heißt darum: nein!




Arduino Forum > International > Deutsch (Moderator: uwefed) > DigitalWriteFast() schneller mit Literalen als Instanzvariablen!!!?


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor