XMEGA USBSmart Stack Overflow im ControlJob

  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 13.03.2018 - 01:02 Uhr  ·  #1
Hallo,

mir ist beim Debugen (PDI) immer wieder ein Fehler aufgefallen. Immer beim stoppen des XMEGA bekomme ich die Meldung "Stack Overflow im ControlJob". Und der Stack ist angeblich 100% ausgelastet.

Diese Meldung erhalte ich auch wenn der USBControlJob eigentlich nichts zu tun hat (kein PC angeschlossen)

Der Stack sollte eigentlich ausreichend sein, vor allem für das nichts tun und warten auf Daten :-D

Code
  TaskStack      = $255, iData;
  TaskFrame      = $100;


Ist das normal im PDI Debug?

Thorsten
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 13.03.2018 - 09:50 Uhr  ·  #2
Hallo Thorsten,

das könnte tatsächlich ein overflow sein.......
Es könnte aber auch ein Überschreiben des Stack Bereichs durch einen
fehlerhaften Speicherzugriff sein und garnicht durch den Stack selbst
verursacht sein.
Bitte ein kleines Testprogramm schicken wo der Fehler auftritt.

rolf
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 13.03.2018 - 11:09 Uhr  ·  #3
Zitat geschrieben von rh

Hallo Thorsten,

das könnte tatsächlich ein overflow sein.......
Es könnte aber auch ein Überschreiben des Stack Bereichs durch einen
fehlerhaften Speicherzugriff sein und garnicht durch den Stack selbst
verursacht sein.
Bitte ein kleines Testprogramm schicken wo der Fehler auftritt.

rolf


Hallo rolf,

ich versuche ein Testprogramm zu kürzen wo dieser Fehler auftritt.
Problem, das Programm hat mittlerweile alleine im Hauptcode rund 3800 Zeilen und besteht aus 6 Units und 4 laufende Prozesse. Ich hoffe das nach Kürzung auch noch der Fehler auftritt.

Was mich etwas wundert:
Code

define 
...

  TaskStack      = $250, iData;
  TaskFrame      = $100;
...
{--------------------------------------------------------------}
  // The USB_ControlJob must be repeatedly called to process common PC requests

Task ControlJob(iData, resumed);
begin
  USB_ControlJob;
end;


{--------------------------------------------------------------}
Process USB_RxTx (256, 256 : iData ); {Stacksize = 256 bytes, Framesize = 256 bytes}
//Procedure USB_CheckRxTx;
Var Count, C: byte;
 InBuffer  : Array[0..31] of WORD;
 OutBuffer : Array[0..59] of Byte;
 iTest,
 xc        : integer;
 testChar  : char;
 bool      : boolean;
begin
...


Ich habe ja den "ControlJob" Task, dieser ruft ja hier den Process USB_RxTx auf, nimmt der Compiler den Speicher vom Process aus dem define vom Task? Oder läuft das getrennt.

Ist der Task hier überhaupt nötig? Die anderen Routinen lasse ich als Process laufen.
Nicht das ich mir hier selbst ein "Bein stelle"

Gruß
Thorsten
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 13.03.2018 - 12:02 Uhr  ·  #4
Hallo Thorsten,

ein kleiner Tip:
Das niedrigste/unterste Byte im Task Stack ist das Control Byte.
Wenn dieses überschrieben wird dann wird ein overflow festgestellt.

Im PDI-ICE kann ein memory breakpoint darauf gelegt werden.
Das ICE stoppt dann wenn darauf geschrieben wird = overflow..
Damit könnte man die Ursache feststellen ob das wirklich ein overflow
ist oder ein "Unfall".

rolf
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 13.03.2018 - 16:09 Uhr  ·  #5
Zitat geschrieben von rh

Hallo Thorsten,

ein kleiner Tip:
Das niedrigste/unterste Byte im Task Stack ist das Control Byte.
Wenn dieses überschrieben wird dann wird ein overflow festgestellt.


OK, hört sich logisch an, muß aber mal schauen, wie ich diesen Stackspeicher als " memory breakpoint" im Debugger definiere, hatte ich bis jetzt noch nie gemacht :-D

Da ich ja nun, ein schönes Display an der Steuerung habe, kann ich ja auch die Funktionen für Stack und Frame nutzen und auf einer Infoseite anzeigen lassen :-D

Checkstackvalid() und Checkframevalid(), diese sollten doch auch im laufenden Betrieb einen Stacküberlauf sauber und genau anzeigen oder? Wahrscheinlich macht die Funktion genau das gleiche.

Thorsten
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 14.03.2018 - 10:34 Uhr  ·  #6
Hallo rolf,

ich glaube da beisst sich irgenwas anderes.

ControlJob Task hat einen Stack Überlauf.
Aber das einzige was in diesem Task läuft ist der
USB RxTx Process und da sind von 255 noch 233 frei

Könnte da evtl. ein Problem im Taskhandler oder ein anderer Treiber liegen?

Thorsten
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 14.03.2018 - 12:49 Uhr  ·  #7
Hallo rolf,

komischerweise erhalte ich die Meldung im Debugger nicht mehr.
Egal ob gekürztes oder volles Programm?

ABER
Code
   iControlJob    := CheckStackValid( ControlJob );
   BControlJob := ( iControlJob = $FFFF);


BControlJob ist immer true, obwohl lt. Debugger nur 1% genutzt wird.

Soll ich Dir trotzdem das gekürzte Prg senden?

Sag mal wie kann ich den Stack-Speicher vom Task in die Watchliste bekommen und ein Memory-Break damit machen? Ich finde da keinen Weg um auf diese Adresse/Speicher in der Watchliste zu kommen.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Gepostet: 14.03.2018 - 13:35 Uhr  ·  #8
Hallo Thorsten,

mit dem Button mit dem gelben Break Zeichen.
Dann kommt untenstehender Dialog.

Den Task Stack muss man im ASM Listung finden.
Code

$TASKS_stk              .EQU    02089h          ; var iData  Process stack area
$TASKS_stk_e            .EQU    02108h          ; var iData  Process stack area
$TASKS_frame            .EQU    02109h          ; var iData  Process stack area
$TASKS_frame_e          .EQU    02208h          ; var iData  Process stack area

rolf
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   141   155 · Page-Gen-Time: 0.039111s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI