Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Modul: strx, Funktion: getHex(...) Kategorie: Programmierung (von André H. - 12.01.2005 21:47)
Als Antwort auf Modul: strx, Funktion: getHex(...) von Günni - 7.01.2005 10:14
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Günni,

> wie Du selbst im Oktober 2003 mal im Forum korrigiert hast, befindet sich nach wie vor ein Fehler
> in der o.g. Funktion im aktuellen Modul: die For-Schleife muÃ? mit Null beginnen.

Danke für den Hinweis.
Das hatte ich anscheinend ganz vergessen. Ich werde demnächst eine neue Version hochladen,
bei der das gefixt ist.

> Au�erdem ist die Lösung zur Bestimmung der Stringlänge zwar sehr elegant wenn es sich um
> echte Strings handelt die z.B. mit String-Manipulationsfunktionen erstellt wurde, aber wenn Du
> beispielsweise einen String mittels hwcom.receive empfängst liefert Deine Funktion stets 0 zurück.

Ã?hh, wo steht denn bitte, daÃ? man mit hw-/swcom.receive() zum Strings-Empfangen ist ???
Diese Funktion dient einzig und allein zum Empfangen von Datenrahmen. Und ein Datenrahmen
ist hier ein Bytearray, kein String. Man kann lediglich ein String angeben, wie
ich es auch häufig mache, da ein String ein spezielles Bytearray mit 32 Byte Grö�e ist.

Zum echten Empfangen von Zeichenfolgen gibt es die funtion inpustr() in den com-Modulen.
Diese müssen beim �betragen natürlich mit CRLF abgeschlossen werden.

Wenn man Dennoch receive() zusammen mit Strings einsetzen will, muÃ? man nach
dem Empfangen die Stringlänge der Stringvariable setzen.
Das geht z.B. so:

function setStrlen(byte s[], byte len)
{
 s[30]=0; // Dieses Byte muÃ? normal immer den Wert 0 haben.
 s[31]=len;
}

string text; byte x;
...
setStrLen(text, hwcom.receive(text,30,500));

Alternativ kann man sich auch eine eigene Receive-Funktion für Strings bauen:

function receiveString(byte s[], byte maxlen, long timeout)
{
 if maxlen>30 maxlen=30;
 s[31]=hwcom.receive(s, maxlen, timeout);
}


> Deshalb schlage ich folgende Verbesserung vor: �bergabe von String und Stringlänge. Somit
> bietet sich mehr Flexibilität.

Ich würde das eher als Rückschritt sehen. Denn das Modul strx.c2 ist in erster Linie
nur für Strings gedacht. Und bei Strings mu� die Länge in Byte 31 stehen.
Wenn die Stringvariable nicht als String mit Daten gefüllt wird, mu� man dieses Byte
eben anschlieÃ?end seperat setzen.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: