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

mem.copy was mache ich falsch? Kategorie: Programmierung (von MaWo - 22.07.2007 20:35)
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo,

ich versuche mich gerade an eine Komunikationsroutine.
Hier sollen die 1. beiden empfangenen Byte des Array in das
Sendearray copiert werden - aber irgendwie klappt es nicht.
Hier mein Progamm:

byte rData[200] , sData[255], cAdr, Func ;
int Adr , Anz , lenData ,  CRC , cData ;
int lop, ret ;

thread init       // Schnittstelle initialisieren und Geschwindigkeit einstellen
{
hwcom.init();           // serielle Schnittstelle initialisieren
                        // Geschwindigkeits Variable setzen
                        //  300=0;  600=1; 1200=2; 2400=3;  4800=4;
                        // 9600=5;19200=6;38400=7;57600=8;115200=9
hwcom.setspeed (6);     // serielle Geschwindigkeit einstellen
hwcom.setbuf(rData,200);//Emfangspuffer setzen
halt;}

function request() returns int    //Auf Request warten und Daten holen
{ret=hwcom.rxd();                  // Warten auf Anfrage von Daten
if ret
    {hwcom.receive(rData,8,100);  // Daten puffern
     return ret;                  // bei Daten Ok zurückgeben
    }
else
    {return ret;}                 // Keine Daten zurückgeben
}

thread Auswertung  // Empfangene Daten auswerten
{
hwcom.send(rData,8);         // Empfangene Daten senden
cAdr=rData[0];                    // Com Adresse extrahieren
Func=rData[1];                    // Funktion extrahieren
Adr=mem.getint(rData,2);          // Adresse extrahieren
Anz=mem.getint(rData,4)*2;        /* Anzahl Datenwörter(int) extrahieren
                                     und Anzahl Byte berechnen(x2) */

mem.putint(sData,1,Anz);      // Datenbyte länge setzen
sData[0]=rData[0];            // Datenbyte Adresse setzen
sData[1]=rData[1];            // Datenbyte Funktion setzen
hwcom.send(sData,8);          // Daten senden    
halt;}

thread main   // Coordination Ausführen
{
run init;        // Schnittstelle Initialisieren
loop                    // Schleife für kontinuierliche Datenabfrage
    {hwcom.flush();     // Empfangspuffer leeren
     wait request();    // Auf Anfrage warten
     run Auswertung;    // request Auswerten und Daten Senden
    }
}

Ich sende 1,3,0,0,0,0,20,197,205
Wenn ich statt den 2 Zeilen

sData[0]=rData[0]  
sData[1]=rData[1]

mem.copy(sData,0,rData,2)


verwende bekomme ich als Antwort: 0,0,20,0,....
bei dem 2 Zeiler ist die Antwort richtig 1,3,20,0,....

was mache ich falsch oder habe ich etwas übersehen?
Ich denke mit der Copy Variante bin ich etwas schneller
in der Ausführung des Programms.

Mfg
MaWo



    Antwort schreiben


Antworten:

Re: mem.copy was mache ich falsch? (von André H. - 3.08.2007 10:47)
    Re: mem.copy was mache ich falsch? (von MaWo - 14.08.2007 21:13)
        Re: mem.copy was mache ich falsch? (von André H. - 21.08.2007 9:16)