Hi Georg, hi workwind,
wollte auf dem Nibo Burger jetzt erst mal keine "Eigenentwicklung" in die Lib schmuggeln..
Aber was haltet Ihr davon:
Für den Nibo 2 habe ich eigene UART Routinen begonnen, bei der für die Stringausgabe nicht jedes einzelne Zeichen in den FIFO geschaufelt wird, sondern nur ein Tag und die Stringadresse. Die UDRE ISR merkt sich das Tag, macht aus den beiden Folgebytes wieder einen Pointer und holt sich das so adressierte Zeichen direkt aus dem Flash (pgm_read()) oder aus dem RAM. Bei Stringende wird das Tag wieder auf Null gesetzt, und - wenn vorhanden - das nächste Byte wieder aus dem FIFO gelesen. Das kann wieder ein Tag sein, oder ein einzelnes auszugebendes Zeichen.
Ins FIFO werden also nur 3 Byte geschrieben und bis zu 32 kByte am Stück direkt und nur von der UDRE ISR ausgegeben.
Bis jetzt funktioniert das nur für ASCII Strings mit Zeichen > '\x06'; ein TAG für Binärdaten habe ich noch nicht realisiert (Adresse und Länge im FIFO); und das mit der Grafikbufferausgabe - weiß nich', ob sich das lohnt, XBM-Grafiken im Terminalprogramm am PC darzustellen.
Für den Mega16 müssten eben die Registernamen und die Init noch umgebastelt werden..
Da finde ich den Ansatz von workwind für die Baudratenberechnung in einer Funktion doch besser, als meine über Makros berechneten Tabellen.
In der Funktion (in der nächsten Lib-Version vielleicht) sollte dann aber auch die reale Baudrate wieder zurückgegeben werden, so dass man im Programm die Fehlerrate berechnen kann, und ggf. eine Error LED leuchten lässt, wenn die Ist-Baudrate zur sehr von der Soll-Baudrate abweicht.