Simon schrieb:
> Ich dachte da an soetwas hier: aber das funzt nicht :-)
>
>
1 | > void uart_usb_send_buffer_P(const char *data)
|
2 | > {
|
3 | > while (pgm_read_byte(data) != 0x00)
|
4 | > uart_usb_send_buffer(pgm_read_byte(data++));
|
5 | > }
|
6 | >
|
logisch.
Das kann nicht gehen.
Die uart_usb_send_buffer will die Adresse einer Speicherfläche haben,
von der sie sich die Daten holt. Du hast aber keine Speicherfläche, du
versuchst die Daten selbst in die Funktion reinzustopfen.
1 | void uart_usb_send_buffer_P(const char *data)
|
2 | {
|
3 | char c = pgm_read_byte(data);
|
4 |
|
5 | while( c != 0x00) {
|
6 | uart_usb_send_buffer( &c, 1 );
|
7 | c = pgm_read_byte(++data);
|
8 | }
|
9 | }
|
Aber: Hast du denn keine uart_send Funktion, die einfach nur einen U8
übernimmt? Eine
void uart_usb_send_byte(U8 buffer);
Normalerweise benutzt eine Funktion wie uart_usb_send_buffer eine
derartige Funktion als Basis um mehrere Zeichen auszugeben.
Edit:
Dein ganzer funktionaler Aufbau scheint nicht zu stimmen.
uart_usb_putchar ist die einfachere Funktion. Die sollte sich nicht auf
uart_usb_send_buffer stützen, sondern genau umgekehrt:
uart_usb_send_buffer benutzt uart_usb_putchar um seine Funktionalität zu
erledigen. Und die int in uart_usb_putchar glaub ich dir auch nicht.
Beides zusammen ergibt eine völlig unnötige Beschäftigungstherapie für
den µC.