XMEGA USBSmart Stack Overflow im ControlJob

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

XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 01: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
Attachments
USBSmartStack
Filename: 13-03-_2018_00-24-05.jpg
Filesize: 190.86 KB
Title: USBSmartStack
Information: USBSmartStack
Download counter: 155
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 - 09: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: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 11: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 - 12: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: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 13.03.2018 - 16: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: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 14.03.2018 - 10: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
Attachments
TaskInfo
Filename: 14-03-_2018_10-28-51.jpg
Filesize: 128.57 KB
Title: TaskInfo
Information: TaskInfo
Download counter: 119
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMEGA USBSmart Stack Overflow im ControlJob

 · 
Posted: 14.03.2018 - 12: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.
Attachments
Debug
Filename: 14-03-_2018_12-36-24.jpg
Filesize: 75.98 KB
Title: Debug
Information: Debug
Download counter: 152
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 - 13: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
Attachments
XMEGA USBSmart Stack Overflow im ControlJob
Filename: MemBreak.jpg
Filesize: 37.21 KB
Title:
Download counter: 130
  • 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: 19 · Cache Hits: 15   148   163 · Page-Gen-Time: 0.03754s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI