XMEGA USBSmart Stack Overflow im ControlJob

  • 1
  • 2
  • 3
  • 4
  • Page 1 of 4
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 00:02  ·  #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
You must be logged in or your permissions are to low to see this Attachment(s).
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 08:50  ·  #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
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 10:09  ·  #3
Quote by 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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 11:02  ·  #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
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 15:09  ·  #5
Quote by 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
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 14.03.2018 - 09:34  ·  #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
You must be logged in or your permissions are to low to see this Attachment(s).
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 14.03.2018 - 11:49  ·  #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.
You must be logged in or your permissions are to low to see this Attachment(s).
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 14.03.2018 - 12:35  ·  #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
You must be logged in or your permissions are to low to see this Attachment(s).
  • 1
  • 2
  • 3
  • 4
  • Page 1 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   141   155 · Page-Gen-Time: 0.033631s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI