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

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
Ich nutze:
C-Control II Station, eigenes Board, OSOPT V3.1
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)