So, an alle die richtig und nicht richtig sindP.S.: damaltor ist immer richtig!
Ich habe den Vorschlag für SerWrite_SerPrint_NEU() mal so umgeschrieben dass ich in lesen kann. (Entspricht jetzt eher den Original-Codestellen zu Vergleichszwecken)
So sieht das ganze ja recht gut aus.Code:void SerWrite_SerPrint_NEU (unsigned char *data, unsigned char length) { unsigned char i = 0; UCSRB = 0x08; // enable transmitter UCSRA |= 0x40; // clear transmitter flag while (length && data[i]) // so lange noch Daten da sind *) { while (!(UCSRA & 0x20)) // wait for empty transmit buffer ; UDR = data[i++]; length --; } while (!(UCSRA & 0x40)) // Wait for transmit complete flag (TXC) ; UCSRB = 0x00; // disable transmitter }
Es gibt aber folgendes zu bedenken:
1: Ein einzelnes Char-Zeichen ist nur noch umständlich zu senden.
--> charVariable [0] = 'x';
--> SerWrite_SerPrint_NEU (charVariable, 1);
anstatt:
--> UartPutc ('x');
2: gravierender: Ich kann nicht mehr 'alle' Daten einschliesslich 0x00 senden.
Ein Datenarray mit 0x00 als Inhalt an einer Stelle, würde genau dieses Zeichen zum Abbruch der Funktion führen. Die "while (length && data[i])"-Schleife wird ja genau hier abbrechen, ohne dieses verflixte 0x00 gesendet zu haben.
- Somit hat SerWrite() seine Daseinsberechtigung.
- SerPrint() ist fuer die C-String-Sender.
- Und UartPutc() ist nun mal für LowLevel.
Ich glaube also, dass es keine so gute Idee wäre einen Wettbewerb für den Funktionsnamen zu beginnen.
Auf alle Fälle finde ich es klasse, dass du dich so intensiv mit den einzelnen Funktionen und möglichen Sahnehäubchen, äh Optimierungen, beschäftigst. Sonst ist bestimmt nämlich noch niemandem aufgefallen, dass man Energie sparen kann durch das Ausschalten des Senders. Akku und Umwelt werden es danken. -> Wird auf den Weg in die LIB gebracht.
Was ich aber bestehen lasse, ist diese merkwürdige Warteschleife zum Schluss. Da habe ich ehrlich gesagt ein bisschen Bammel vor die auszubauen. (Beim DLR werden die sich da irgendetwas gedacht haben um so ein Rätsel einzubauen.)
Lesezeichen