> ich möchte 4 integer Variablen übertragen. Dazu wollte ich sie> aneinanderreihen und als einen langen String schicken.
Waum denn? Was spricht dagegen, die Ints als asci, und zwischen den
werten ein "\n" zu senden? Dann brauchst du sie beim Empfänger nicht
wieder auseinander zu pflücken.
Hast du den die ÜPbertragung mal sonnstwie durchgetestet?
Jack schrieb:> itoa(senden,(char *)send, 10);
itoa ist, wie der Name schon sagt, für Integer-Variablen gedacht. In
Deinem Fall sind die 16 Bit breit. Für 32 Bit breite Variablen gibt es
ltoa. Vermutlich wirst Du damit bessere Ergebnisse erziehlen.
Dario B. schrieb:> Hast du den die ÜPbertragung mal sonnstwie durchgetestet?
Ich habe die Übertragung egbenfalls an den Terminal geschickt und sie so
getestet
Dario B. schrieb:> Waum denn? Was spricht dagegen, die Ints als asci, und zwischen den> werten ein "\n" zu senden?
Ich wollte nicht das Risiko eingehen, dass ich mit den empfangenen Werte
vielleicht durcheinander komme und mir so den Programmablauf zerstörre.
Allerdings wäre das meine 2te Lösung gewesen, wollte erstmal das andere
testen.
Andreas schrieb:> itoa ist, wie der Name schon sagt, für Integer-Variablen gedacht. In> Deinem Fall sind die 16 Bit breit. Für 32 Bit breite Variablen gibt es> ltoa. Vermutlich wirst Du damit bessere Ergebnisse erziehlen.
guter Tipp, allerdings kann ich den Befehl Itoa nicht verwenden, er
findet ihn trotz einbinden von #include <stdlib.h> nicht.
Was fehlt noch?
jonas biensack schrieb:> Itoa != itoa...
das auch, ist ja einmal ein Großbuchstabe "i" und ein Kleinbuchstabe "i"
Abgesehen davon heißt das
ltoa vs. itoa
^
L
Dieter K. schrieb:> ltoa vs. itoa> ^> L
Danke, das war das Problem
allerdings bringt es keine Besserung, es fehlen immernoch Daten bzw er
schickt nur 4 Zahlen
nochmal die uart funktionen
Jack schrieb:> ich möchte 4 integer Variablen übertragen. Dazu wollte ich sie> aneinanderreihen und als einen langen String schicken.
Was sind bei Dir die 4 Integer-Variablen? Welchen Wertebereich haben
sie? Unter Umständen kannst Du auch gar nicht 4 Werte in einen
32-Bit-Integer packen, weil sie z.B. negativ sind oder größer als 100
sind.
Ich würde alle 4 Werte in den String "send" packen - durch Leerzeichen
getrennt:
Beim Sender:
Elegant, aber speicherplatz-aufwendig:
1
sprintf(send,"%d %d %d %d\n",P_Ry1,P_Ly1,by,bx);
2
uart_puts(send);
Weniger elegant, aber vom Speicherplatz sparsamer:
1
itoa(P_Ry1,send,10);
2
strcat(send," ");
3
itoa(P_Ly1,send+strlen(send),10);
4
strcat(send," ");
5
itoa(by,send+strlen(send),10);
6
strcat(send," ");
7
itoa(bx,send+strlen(send),10);
8
strcat(send,"\n");
9
uart_puts(send);
Beim Empfänger:
Elegant, aber speicherplatz-aufwendig:
Jack schrieb:> dickes danke für deine mühe, ich werde es nachher mal einbauen und> testen
Du hattest leider nicht meine Fragen beantwortet:
Was sind bei Dir die 4 Integer-Variablen? Welchen Wertebereich haben
sie?
Wäre nett, wenn Du dazu noch eine Aussage treffen würdest. Das wäre
schon wichtig für den Code, den ich da oben hinschrieb. Dieser ist
momentan darauf ausgerichtet, dass Deine 4 Variablen tatsächlich
Integer-Variablen (also 16 Bit breit) sind, d.h. bei Dir steht irgendwo:
int P_Ry1;
int P_Ly1;
int by;
int bx;
Zeige bitte die Definition Deiner Variablen. Die hast Du in Deinen
Code-Listings leider immer weggelassen.
Wenn sie vom Typ int sind, muss die Zeile
myscan (char * p, uint8_t pos, uint8_t * valuep)
in
myscan (char * p, uint8_t pos, int * valuep)
geändert werden, sonst kracht es.
Jack schrieb:> Ich wollte nicht das Risiko eingehen, dass ich mit den empfangenen Werte> vielleicht durcheinander komme und mir so den Programmablauf zerstörre.
Dann stell jeder Zahl einen Buchstaben vorran, der eindeutig
kennzeichnet, worum es sich bei dieser Zahl handelt.
Dann sieht deine 'Auswertung' so aus
Simpel, einfach, durchschaubar und nicht besonders fehleranfällig.
Und das schönste am Ganzen: wenn sich dann tatsächlich irgendwann nur 1
einziger Wert ändert, dann brauchst du auch nur diesen einen Wert der
Gegenstelle übermitteln.