Re: Probleme mit komplexen Datentypen Kategorie: Programmierung (von Jörg C. - 14.01.2007 17:36) | ||
Als Antwort auf Probleme mit komplexen Datentypen von Lizard - 14.01.2007 15:33 | ||
| ||
Hallo Lizard, ich hatte eine ähnliches Problem beim Kopieren von verschachtelten structs in ein Byte-Array, das ich mit angepassten mem.copypos() Funktionen gemäss einem Post von André mache. (siehe http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=13325). Meine Erfahrung hier: Die structs müssen 16Bit aligned (!) sein, sonst stimmt die Länge des verschachtelten Structs nicht mit der erwarteten (gezählten) Anzahl von Bytes überein (v.a. bei memcopy fatal!) Beispiel: type sEventConfig { byte mode; byte dummy_for_int_boundary; //<<== MUSS sein an dieser (!) Stelle ! int min; int hour; byte day; byte weekday; } type sEventConfig { byte mode; int min; int hour; byte day; byte weekday; byte dummy_for_int_boundary; //<<== das klappt NICHT !! } type sConfig { sShutterConfig shutter; sEventConfig event[myconst.NUM_OF_EVENTS]; sWpControl wpctrl; } sConfig cfg; Vielleicht hilft dir das ja weiter. Viele grüsse, Jörg C. > Hallo > > Mein CC2 Programm zur Steuerung meiner Markisen macht mir leider massive Schwierigkeiten. > > Die CC2 hängt sichlaufend auf oder stürzt ab. Diese Probleme treten auf seit ich angefangen habe, > alle möglichen Daten meines Programms in komplexen Datentypen abzulegen (u.a. die ganze Config für > edip240) . > > Ich benutze mit Type definierte Datentypen welche wiederum ein Arrays mit weiteren mit Type > definierten Datentypen enthalten. > > Meine Beobachtungen, deuten auf ein Bufferoverrun Problem hin, d.h. aus irgend einem Grund scheint > mein Program oder die CC2 Datenbereiche zu überschreiben welche nicht zu meiner Datenstruktur > gehören, sondern für anderen Zwecke verwendet werden. Unterdessen habe ich bei allen Programmteilen > in welchen in diese Strukturen geschrieben wird, if-Statements eingebaut um sicherzustellen, dass nicht > ausserhalb der definierten Arraygrenzen geschrieben wird. Log-Statements welche laufend die Variablen- > werte auf HWCOM schreiben haben leider auch nix gebracht. > > Mittlerweile bin ich mit meinem Latein ziemlich am Ende und weiss nicht mehr so genau wo ich > weitersuchen soll. Darum meine Frage: > Gibt es spezielle Eigenheiten der CC2die bei der Arbeit mit komplexen Datentypen beachtet werden > müssen? > Sind irgend welche Bugs/Fehler im OS der CC2 bekannt welche sich auf die Arbeit mit komplexen > Datentypen auswirken? > > Vielen Dank für jeden Tipp! > > Gruss > > Tom > > > Hier noch ein Ausschnitt (das Modul ist noch einiges Umfangreicher) des Codes in welchem der Datentyp > definiert wird (poste gerne noch mehr, wenn notwendig): > > type displayconfigparastruct { > int mode; > int para1; > int para2; > byte brightness; > } > > type displayparastruct { > int mode; > int para1; > int para2; > } > > type displayschedulestruct { > system.TIME starttime; > system.TIME endtime; > displayconfigparastruct para; > }; > type displayscenegroupstruct { > int scenegroupnr; > }; > > type displaycontrolstruct { > int code; > int id; > int val1; > int val2; > } > > const displayparastacksize=8; > type displaystatusstruct { > long sleeptimer; > byte brightness; > displayparastruct newpara; > displayparastruct para; > int parastackpointer; > displayparastruct parastack[displayparastacksize]; > int controlcount; > displaycontrolstruct control[255]; > byte blindselect[blindcount]; > edip.RxBuffer inputbuffer; > } > > const displayschedulesize=8; > type displaystruct { > string name; > byte address; > long timeout; > displayconfigparastruct defaultpara; > int schedulecount; > displayschedulestruct schedule[displayschedulesize]; > displaystatusstruct status; > int scenegroupcount; > displayscenegroupstruct scenegroup[SceneGroupCount]; > }; > > displaystruct display[DisplayCount]; > > > | ||
Antwort schreiben Antworten: Re: Probleme mit komplexen Datentypen (von Lizard - 14.01.2007 17:52) |