Hallo C-Freunde und Kollegen,
habe hier 2 rfm12-Funkmodule und atmega8 und möchte gern einen String
übertragen. Programmiersprache ist C.
Ich würde jetzt einfach mithilfe von strcmp den string vergleichen und
dann darauf reagieren, wahrscheinlich stimmt bloß was in der Syntax oder
so nicht.
aber vll kann mir jemand auf die schnelle weiterhelfen.
Martin 567 schrieb:> Ich würde jetzt einfach mithilfe von strcmp den string vergleichen und> dann darauf reagieren, wahrscheinlich stimmt bloß was in der Syntax oder> so nicht.
Das hätte dir der Compiler gesagt
> if (strcmp(test, "signal") == 0) //Befehl> void send(void)> { unsigned char test[]="signal\n ";> rf12_txdata(test,10);> }
Du sendest nicht "signal".
Du sendest "signal" und dann noch ein Carriage Return. Kein Wunder dass
daher der empfangene String nicht identisch ist du "signal"
Es sei denn natürlich, dass eine der Funktionen rf12_txdata bzw
rf12_rxdata den \n ausfiltern. Aber normalerweise halten sich derartige
Funktionen da raus.
PS: Was bedeuten eigentlich die 10 in
rf12_txdata(test,10);
da fällt mir kein wirklicher Grund dafür ein, warum eine Funktion
rf12_txdata eine 10 bekommen sollte. Länge des Strings - ja. Aber
"signal\n" ist ja nicht 10 Zeichen lang, sondern nur 7 oder besser
gesagt strlen( "signal\n" ) Zeichen.
Auf jeden Fall solltest du dir die Funktionen rf12_txdata und
rf12_rxdata mal genauer ansehen, was die eigentlich exakt machen.
Karl heinz Buchegger schrieb:> PS: Was bedeuten eigentlich die 10 in> rf12_txdata(test,10);
Das sind die Funktionen von Benedikt :)
10 gibt die Anzahl der zu sendenden Bytes an.
Ich persönlich finde das gar nich so dumm, weil man ja nicht nur Strings
senden kann und da braucht man ja schließlich ein Argument wieviele
Bytes ab dem Zeiger losgejagt werden sollen.
Gruß,
Christian
C. H. schrieb:> Karl heinz Buchegger schrieb:>> PS: Was bedeuten eigentlich die 10 in>> rf12_txdata(test,10);> Das sind die Funktionen von Benedikt :)> 10 gibt die Anzahl der zu sendenden Bytes an.
Dachte ich mir schon :-)
Aber ich wollte gerne den TO zum Nachdenken bringen.
Wenn sein String 7 Zeichen lang ist, dann wird es wohl nicht so toll
sein, wenn er seine Sendefunktion anlügt, dass er 10 Zeichen hätte :-)
> Ich persönlich finde das gar nich so dumm, weil man ja nicht nur Strings> senden kann und da braucht man ja schließlich ein Argument wieviele> Bytes ab dem Zeiger losgejagt werden sollen.
Für Daten ist das ja auch ok. Für Strings ist es aber eher unpraktisch.
Du musst immer vorher die Stringlänge feststellen obwohl das bei einer
eigenen String-Sende Routine eigentlich nicht notwendig wäre.
Karl heinz Buchegger schrieb:> C. H. schrieb:>> Karl heinz Buchegger schrieb:>>> PS: Was bedeuten eigentlich die 10 in>>> rf12_txdata(test,10);>> Das sind die Funktionen von Benedikt :)>> 10 gibt die Anzahl der zu sendenden Bytes an.> ... Wenn sein String 7 Zeichen lang ist, dann wird es wohl nicht so toll> sein, wenn er seine Sendefunktion anlügt, dass er 10 Zeichen hätte :-)
Obwohl das prinzipiell auch egal ist, solange es im Empfänger keinen
Überlauf gibt d.h. in den Empfangspuffer passt :)
> Für Daten ist das ja auch ok. Für Strings ist es aber eher unpraktisch.> Du musst immer vorher die Stringlänge feststellen obwohl das bei einer> eigenen String-Sende Routine eigentlich nicht notwendig wäre.
Theoretisch.
Die Stringlänge muss er laut Protokoll eh immer mitgeben, also muss er
irgendwann den strlen bestimmen. Aber man könnte es schöner machen -
keine Frage.
hallo,
hab mir eure komentare schon durchgelesen,
ich werde jetzt mal den code auf den neuesten stand bringen und evtl
nochmal posten
aber ich probiers erst mal
das mit dem return war ein fehler von mir, das hatte ich übersehen.
servus