Guten Abend allerseits,
ich hab' heut mal ein bisschen in die Funktion SerWrite der asuro.c 'reingeguckt:
Code:
/* function for serial communication */
void SerWrite(unsigned char *data,unsigned char length)
{
unsigned char i = 0;
UCSRB = 0x08; // enable transmitter
while (length > 0) {
if (UCSRA & 0x20) { // wait for empty transmit buffer
UDR = data[i++];
length --;
}
}
while (!(UCSRA & 0x40));
for (i = 0; i < 0xFE; i++)
for(length = 0; length < 0xFE; length++);
}
Kann mir jemand den Sinn der letzten beiden Zeilen der Funktion erklären?
Was ich noch verstehe: alle Zeichen werden erfolgreich gesendet, und der ATmega meldet schließlich "Transmit Complete" (UCSRA wird = 0x40).
Was ich nicht verstehe: anschließend wird noch einmal i von 0 bis 0xFE durchlaufen und unterlagert length von 0 bis 0xFE. Dabei wird aber keinerlei Aktion ausgeführt; und da beide eh' nur lokale Variable bzw. lokale Kopie eines Argumentes sind, werden sie auch nicht beeinflusst.
Was ich gern wüsste: warum das, übersehe ich was? Was macht da der Compiler draus, wird sowas wegoptimiert (zumindest sofern ich nix übersehen habe...)?
Interessant fand ich, dass der Prozessor sich beim Schreiben auf die serielle Schnittstelle tatsächlich ausschließlich auf das Senden "konzentriert", während nebenher z. B. die Motoren und irgendwelche Regler laufen. Wenn Zeit also knapp ist, besser keine oder nur ganz kurze Ausgaben über die serielle Schnittstelle - oder gibts andere Trix, die ich nicht kenne?
Schlaut mich bitte auf!
Gruß,
Rakke
Lesezeichen