Gast
#2301968
Ich habe Folgende Function:
1 | |
Diese wurde bisher mit:
1 | |
2 | |
3 | |
4 | |
5 | |
verwendet.
Ich würde nun gerne PSTR("") damit verwenden.
Ich dachte da an soetwas hier: aber das funzt nicht :-)
1 | |
2 | |
3 | |
4 | |
5 | |
|
Anzeige
|
putchar funktion soll auf Progmem umgebaut werden
Gast
#2301968
Ich habe Folgende Function:
Diese wurde bisher mit:
verwendet.
Ich würde nun gerne PSTR("") damit verwenden.
Ich dachte da an soetwas hier: aber das funzt nicht :-)
Das hier
passt ja auch überhaupt nicht zu
Und für die Zukunft: "aber das funzt nicht" ist keine hinreichende Fehlerbeschreibung. Und wenn (wie offensichtlich in diesem Fall) der Compiler dir den Code um die Ohren haut, dann schreibe zumindest die Fehlermeldungen des Compiler mit dazu. Simon schrieb: > Ich dachte da an soetwas hier: aber das funzt nicht :-) > >
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.
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.
Gast
#2302015
Die sache ist das PSTR() es nicht im RAM ablegt, somit geht wenn ich das richtig verstanden habe auch kein pointer auf den RAM.. und da liegt mein Problem, ich brauche irgendwie die Möglichkeit die Funktion auch mit PSTR verwenden zu können. Es gibt ja noch in der unteren funktion ein "Usb_write_byte(*buffer);" aber ich wollte die funktionen da ansich nicht auseinander nehmen. Gibts da keine einfacherer Möglichkeit? Das ganze stammt aus der AVR usb lib (CDC Demo)
Simon schrieb: > Die sache ist das PSTR() es nicht im RAM ablegt, somit geht wenn ich > das richtig verstanden habe auch kein pointer auf den RAM.. und da liegt > mein Problem, ich brauche irgendwie die Möglichkeit die Funktion auch > mit PSTR verwenden zu können. Na, ja. Hast du ja jetzt. Stefans und mein Vorschlag sind gleichwertig. > Es gibt ja noch in der unteren funktion ein > "Usb_write_byte(*buffer);" > aber ich wollte die funktionen da ansich nicht auseinander nehmen. > Gibts da keine einfacherer Möglichkeit? Könnte man wahrscheinlich machen. Aber da ist noch soviel drumherum zu machen, dass es sich wohl nicht lohnt. Allerdings sollte man dann über die String Funktion noch mal nachdenken. In diesem Fall ist es dann nicht so schlau, wegen jedem Zeichen wieder durch die ganze Rundherum-Prozedur in uart_usb_send_buffer durchzulaufen. Ich würde das zumindest soweit versuchen zu optimieren, dass aus dem Flash immer zb 4 Character geholt werden und diese 4 Character in einem aufwasch gesendet werden. Die 4 sind natürlich verhandelbar und könnten auch maximal zb 32 sein. Sowas?
Johann L. schrieb: > char str[len]; char str[len+1];
Gast
#2302032
Funzt bestens! Vielen Dank, morgen durchdenke ich das mal in Ruhe. Wie kommts zu der Warnung: ../uart_usb_lib.c:163: warning: pointer targets in passing argument 1 of 'uart_usb_send_buffer' differ in signedness Simon schrieb: > Wie kommts zu der Warnung: > > ../uart_usb_lib.c:163: warning: pointer targets in passing argument 1 of > 'uart_usb_send_buffer' differ in signedness Du mixt signed und unsigned pointer wild durcheinander. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|