Re: ports Kategorie: Programmierung (von André H. - 1.11.2003 13:18) | |
Als Antwort auf ports von helmut - 29.10.2003 15:39
| |
Hallo Helmut, Wenn Du schon Multithreading verwendest, solltest Du die Threads nur gezielt laufen lassen. Au�erdem mu�t Du Deine Variable "re" capturen, da Du von mehreren Threads darauf zugreifst. Das führt zwangsläufig zu Problemen. Au�erdem Bremst du mit run 5 die CC2 unnötig aus. Lasse einfach die Standardprio. Auch versuchst Du im Mainthread ein empfangendes Bytearray als String zu bearbeiten. Das geht nicht. Wenn Du mit hwcom.receive() etwas empfängst und einen String angibst, bleibt die Längenangabe des Strings beim alten Wert. Auch wertest Du den String falsch aus, wenn Dein Format "RxTyyyy" ist. Hier mein Vorschlag: int re,time[3]; thread r1 { ports.set(1,1); sleep time[0]; ports.set(1,0); halt; } thread r2 { ports.set(3,1); sleep time[1]; ports.set(3,0); halt; } thread r3 { ports.set(5,1); sleep time[2]; ports.set(5,0); halt; } function setStrlen(byte s[], byte len) { s[31]=len; } thread main {string zeit,s; byte i,y,port; hwcom.init(); hwcom.setspeed(hwcom.SPEED_9600); hwcom.flush(); loop { // hwcom.inputsStr(s,1); i=hwcom.receive(s,10,1000); setStrlen(s,i); if i { y=strx.getchar(s,0); if y=='x' quit -1; if y=='R' { port=strx.getchar(s,1)-0x30; if port<3 and port>0 { strx.right(s,zeit,str.length(s)-3); hwcom.ret(); hwcom.put('R'); hwcom.put(port+0x30); hwcom.put('T'); hwcom.print(zeit); time[re-1]=strx.getNum(zeit); if re=1 run r1; else if re=2 run r2; else if re=3 run r3; wait hwcom.ready(); } } } } } Ich hab's zwar nicht getestet, aber es sollte funzen. 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: |