Hallo fredyxx,
Zitat Zitat von fredyxx Beitrag anzeigen
zusammen mit dem Post von Mxt 19:27 ist mir nun nicht klar wie die Varablen M2_microsalt und Schrittdauer in so einem Befehl definiert sein sollten, damit er am schnellsten abgearbeitet wird.

Als int, float, unsigned long oder uint32_t?

"else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) "

Bitte möglichst eine konkrete Antwort.

M2_microsalt als .....
Schrittdauer als .....

Die Ergebnisse von Schrittdauer liegen schon in einem Bereich von einigen 100 Mikrosekunden. Die Getriebe-Schrittmotore machen 4096 Schritte pro Umdrehung.
Möglichst klein

float und double sind PF-Werte, und können, ohne FPU, nur durch eine Bibliothek bearbeitet werden.

char, int und long hängen von der Implementierung, bzw. CPU ab. auf 8-Bitern ist int meistens 16-Bit lang und auf 16-Bitern 32-Bit.

K&R definierte mal:
Garantiert ist nur, dass char <= int <= long ist.
Ein char darf also auch 48-bit belegen.

Es gab/gibt auch CPUs mit anderen Wortbreiten z.B. 9, 12, 18, 36 und 48 Bit waren sehr verbreitet und entsprechend sind da die Bit-Breiten der C-Datentypen.

Weil es Programme gibt, welche nur bei bestimmten Bit-Breiten funktionieren, hat man die uintxx_t Typen eingeführt. Ein unsigned 8-Bit-Wert kann nur Werte zwischen 0...255, ein 16-Bit 0...65'335 und 32-Bit 0...4'294'967'295 annehmen. Grössere Werte führen zu einem Überlauf und falschen Ergebnissen!
uint8_t, uint16_t, uint32_t usw. haben, unabhängig von der Implementierung, garantierte Bit-Breiten.

Welche Variante die kleinste ist, welche du nehmen kannst, hängt also davon ab, welchen Wertebereich die Variable aufnehmen können muss.
Ich bin jetzt zu faul dies in deinem Programm nachzusehen.

Eine 8-Bit CPU kann einen 8-Bit Werte mit einem einzigen Maschinenbefehl verarbeiten, 16-Bit Operationen benötigen oft schon mehrere Befehle. Das hängt vom Befehlssatz der CPU ab und wie man 8-Bit CPU definiert!

Der Arduino MEGA hat einen ATmega1280 als CPU und diese kann nur 8-Bit direkt verarbeiten.


Die reale Welt ist halt nun nicht binär und lässt sich nicht mit Ja und Nein beantworten.

MfG Peter(TOO)