Re: hwcomm und multithreading Kategorie: Programmierung (von André H. - 10.04.2004 9:47) | ||
Als Antwort auf Re: hwcomm und multithreading von Johannes - 4.04.2004 16:45 | ||
| ||
Hallo Johannes, > ich hatte nur hier mal gehört, dass Multithreading und Hwcom bei der CC2 gro�e Probleme bereiten soll. > Ich habe nun ein Modul geschrieben, was immer nur in einem Thread sendet und empfängt. Mein > Problem war, dass mir beim Senden eines Strings die Zeichenlänge zu kurz war. Erst gestern ist mir > aufgefallen, dass ich ja genauso gut ein Bytearray senden kann, dass aber wesentlich länger sein > darf als ein String. Deshalb wollte ich einen String in ein Bytearray umwandeln. Das Umwandeln in ein Bytearray wäre hier eher ein Umkopieren mit mem.copy() . Allerdings gibt es auch einen Dirty-Hack: string s[4]; // Stringarray mit 4 Elementen = 120 Zeichen = 128 Byte ... ... hwcom.send(s[0],128); ... So werden alle 128Byte der vier Strings gesendet. Jedoch mu� Du PC-seitig ein wenig mehr auswerten: - Null-Zeichen (ASCII-0 entfernen) - Jedes 32.te Byte entfernen (in diesem Byte steht die Anzahl der Bytes pro String) Alternativ kannst Du, wie gesagt, mit mem.copy() arbeiten oder sogar eine eigene Funktion hierfür benutzen: byte longstring[130]; // String mit 128 Zeichen ... function StrToLongstr(byte src[], byte dest[]) {byte i; for i=0 ... src[31]-1 { dest[dest[129]+i] =src[i]; } dest[129]=dest[129]+i; dest[dest[129]] =0; } ... ... string a,b,c,d; ... ... longstring[129]=0; // Clear Longstring longstring[0]=0; StrToLongstr(a,longstring); StrToLongstr(b,longstring); StrToLongstr(b,longstring); StrToLongstr(c,longstring); hwcom.send(longstring,longstring[129]); ... Auf "longstring" darfst Du erst wieder schreibend zugreifen, wenn hwcom.ready()==True ist. Ich hoffe, das hilft Dir. :-) 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: Re: hwcomm und multithreading (von Johannes - 12.04.2004 18:09) |