This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

E_spOutOfBounds: Task 0x85d7cc stack error, SP = 0x80428530.

Other Parts Discussed in Thread: SYSBIOS

Dear all,

I am working on C6657 processor and SYS/BIOS 6.40.0339.

When the sytem is running, some times  i get the following error E_spOutOfBounds: Task 0x85d7cc stack error, SP = 0x80428530. The task is not always the same. I have checked the ROV and the  usage of stack is low.

I am using the EDMA interrupts and mcbso interrupts in my program

Coud you please help me?

Please have a look in the image below .

Below you can find the cfg file

var Defaults				= xdc.useModule('xdc.runtime.Defaults');
var Diags			    	= xdc.useModule('xdc.runtime.Diags');
var Error					= xdc.useModule('xdc.runtime.Error');
var Log						= xdc.useModule('xdc.runtime.Log');
var LoggerBuf				= xdc.useModule('xdc.runtime.LoggerBuf');
var Main					= xdc.useModule('xdc.runtime.Main');
var Memory					= xdc.useModule('xdc.runtime.Memory')
var SysMin					= xdc.useModule('xdc.runtime.SysMin');
var System					= xdc.useModule('xdc.runtime.System');
var Text					= xdc.useModule('xdc.runtime.Text');

var BIOS					= xdc.useModule('ti.sysbios.BIOS');

var Swi						= xdc.useModule('ti.sysbios.knl.Swi');
var Task					= xdc.useModule('ti.sysbios.knl.Task');
var Semaphore				= xdc.useModule('ti.sysbios.knl.Semaphore');
var Mailbox					= xdc.useModule('ti.sysbios.knl.Mailbox');

var GIO						= xdc.useModule('ti.sysbios.io.GIO');
var DEV						= xdc.useModule('ti.sysbios.io.DEV');

var ECM						= xdc.useModule("ti.sysbios.family.c64p.EventCombiner");
var Clock					= xdc.useModule('ti.sysbios.knl.Clock');


var Hwi						= xdc.useModule('ti.sysbios.hal.Hwi');
var Cache					= xdc.useModule('ti.sysbios.family.c66.Cache');
//var Timer					= xdc.useModule('ti.sysbios.hal.Timer');
var Timer64					= xdc.useModule('ti.sysbios.timers.timer64.Timer')

var GateMutexPri 			= xdc.useModule('ti.sysbios.gates.GateMutexPri');

var HeapMem					= xdc.useModule('ti.sysbios.heaps.HeapMem');

var Edma 					= xdc.loadPackage('ti.sdo.edma3.drv');

var Timestamp 				= xdc.useModule('xdc.runtime.Timestamp');
var ECM 					= xdc.useModule("ti.sysbios.family.c64p.EventCombiner");
var CpIntc 					= xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
var Idle 					= xdc.useModule('ti.sysbios.knl.Idle');

Idle.idleFxns[0] = "&DBG_idlfxn";
/*use CSL package*/
var cslSettings			   = xdc.useModule ('ti.csl.Settings');

//Cache.setMarMeta(0x80000000, 0x07FFFFFF, 0x1); 

environment['xdc.cfg.check.fatal'] = 'false';
/*
 * Uncomment this line to globally disable Asserts.
 * All modules inherit the default from the 'Defaults' module.	You
 * can override these defaults on a per-module basis using Module.common$. 
 * Disabling Asserts will save code space and improve runtime performance.
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
 */

/*
 * Uncomment this line to keep module names from being loaded on the target.
 * The module name strings are placed in the .const section. Setting this
 * parameter to false will save space in the .const section.	Error and
 * Assert messages will contain an "unknown module" prefix instead
 * of the actual module name.
Defaults.common$.namedModule = false;
 */

/*
 * Minimize exit handler array in System.	The System module includes
 * an array of functions that are registered with System_atexit() to be
 * called by System_exit().
 */
System.maxAtexitHandlers 		= 4;

System.SupportProxy				= SysMin;
/* 
 * Uncomment this line to disable the Error print function.	
 * We lose error information when this is disabled since the errors are
 * not printed.	Disabling the raiseHook will save some code space if
 * your app is not using System_printf() since the Error_print() function
 * calls System_printf().
Error.raiseHook = null;
 */

/* 
 * Uncomment this line to keep Error, Assert, and Log strings from being
 * loaded on the target.	These strings are placed in the .const section.
 * Setting this parameter to false will save space in the .const section.
 * Error, Assert and Log message will print raw ids and args instead of
 * a formatted message.
 Text.isLoaded = false;
 */


/*
 * Uncomment this line to disable the output of characters by SysMin
 * when the program exits.	SysMin writes characters to a circular buffer.
 * This buffer can be viewed using the SysMin Output view in ROV.
SysMin.flushAtExit = false;
 */

/*
 * The BIOS module will create the default heap for the system.
 * Specify the size of this default heap.
 */
BIOS.heapSize = 0x12000;
/*
 * Build a custom SYS/BIOS library from sources.
 */
BIOS.libType	= BIOS.LibType_Custom;

BIOS.cpuFreq.lo = 850000000;		/* max 850 MHz for C6654, 1000 MHz for C6657 */

//NOTE: enable the interrupts 
// No interrupt is triggered without this apart from set dynamically
//ECM.eventGroupHwiNum[0] = 7;
//ECM.eventGroupHwiNum[1] = 8;
//ECM.eventGroupHwiNum[2] = 9;
//ECM.eventGroupHwiNum[3] = 10;


/* System stack size (used by ISRs and Swis) */
Program.stack = 0x1000;

/* Circular buffer size for System_printf() */
SysMin.bufSize = 0x300;


LoggerBuf.enableFlush = true;
/* 
 * Create and install logger for the whole system
 */
var loggerBuf0Params							= new LoggerBuf.Params();
loggerBuf0Params.instance.name					= "DBG_traceLogHandle";
loggerBuf0Params.bufHeap						= Program.global.logRamSection_handle;
loggerBuf0Params.bufSection						= ".trace_section";
//loggerBuf0Params.bufType						= LoggerBuf.BufType_CIRCULAR;
loggerBuf0Params.exitFlush						= true;
loggerBuf0Params.numEntries 					= 64;
Program.global.DBG_traceLogHandle				= LoggerBuf.create(loggerBuf0Params);


Main.common$.diags_INFO							= Diags.ALWAYS_ON;
Swi.common$.diags_INFO							= Diags.ALWAYS_ON;
Hwi.common$.diags_INFO							= Diags.ALWAYS_ON;
Task.common$.diags_INFO							= Diags.ALWAYS_ON

var loggerBuf1Params							= new LoggerBuf.Params();
loggerBuf1Params.instance.name					= "LOG_systemHandle";
loggerBuf1Params.bufSection						= ".trace_section";
loggerBuf1Params.bufHeap						= Program.global.logRamSection_handle;
loggerBuf1Params.exitFlush						= true;
loggerBuf0Params.numEntries 					= 64;
Program.global.LOG_systemHandle 				= LoggerBuf.create(loggerBuf1Params);

Defaults.common$.logger							= Program.global.LOG_systemHandle;

LoggerBuf.common$.instanceHeap 					= Program.global.logRamSection_handle;
LoggerBuf.common$.instanceSection 				= ".trace_section";
LoggerBuf.common$.namedInstance 				= true;
/*
		Create device instances
*/
var pcmParams								    = new DEV.Params();
pcmParams.instance.name						    = "pcm";
pcmParams.initFxn								= null;
Program.global.pcm								= DEV.create("/pcm", "&PCM_iomFxns", pcmParams);


 var apiParams								    = new DEV.Params();
apiParams.instance.name							= "api";
apiParams.initFxn							    = null;
Program.global.api								= DEV.create("/api", "&API_iomFxns", apiParams);

//
//NOTE:
/*
		IDRAM0 = MEM.create("IDRAM0");
		IDRAM0.heapSize =	0x00030000
		IDRAM0.len =		0x00074300
		IDRAM0.base =		0x00000300
*/
var heapMemParamsCM_Env							= new HeapMem.Params;
heapMemParamsCM_Env.size						= 0x00030000 ;
heapMemParamsCM_Env.align						= 32;
heapMemParamsCM_Env.sectionName					= ".cm_section";
heapMemParamsCM_Env.instance.name				= "cmEnvironHandle";
Program.global.cmEnvironHandle					= HeapMem.create(heapMemParamsCM_Env);
Program.sectMap[".cm_section	"]					= "CHANRAM";

//NOTE:
/*
		EDRAM = MEM.create("EDRAM");
		EDRAM.heapSize =	0x0038b500
		EDRAM.len =			0x00500000
		EDRAM.base =		0x80080000
*/
var heapMemParamsEDRAM							= new HeapMem.Params;
heapMemParamsEDRAM.size							= 0x0038b500;
heapMemParamsEDRAM.align						= 32;
heapMemParamsEDRAM.sectionName					= ".edram_section";
heapMemParamsEDRAM.instance.name				= "edramHeapSectionHandle";
Program.global.edramHeapSectionHandle			= HeapMem.create(heapMemParamsEDRAM);
Program.sectMap[".edram_section"]				= "EDRAM";

//HeapMem.common$.instanceHeap    				= Program.global.edramHeapSectionHandle;
//HeapMem.common$.instanceSection 				= ".edram_section";
GIO.common$.instanceHeap 	 					= Program.global.edramHeapSectionHandle;
GIO.common$.instanceSection 					= ".edram_section";
//Mailbox.common$.instanceHeap 					= Program.global.edramHeapSectionHandle;
//Mailbox.common$.instanceSection		 			= ".edram_section";
//NOTE
/*
LOGRAM = MEM.create("LOGRAM");
LOGRAM.heapSize =	0x00e7FF00
LOGRAM.len =		0x00e7FF00
LOGRAM.base =		0x89180100
*/
var heapMemParamsLOGRAM							= new HeapMem.Params;
heapMemParamsLOGRAM.size						= 0x00e7FF00;
heapMemParamsLOGRAM.align						= 32;
heapMemParamsLOGRAM.sectionName					= ".trace_section";
heapMemParamsLOGRAM.instance.name				= "logRamSection_handle";
Program.global.logRamSection_handle				=	HeapMem.create(heapMemParamsLOGRAM);
Program.sectMap[".trace_section"]				= "LOGRAM";
                                      
//NOTE:                               
/*                                    
		SDERAM = MEM.create("SDERAM");    
		SDERAM.heapSize =	0x00010000      
		SDERAM.len =		0x00010000    
		SDERAM.base =		0x89170100      
*/                                    
var heapMemParamsCM							    = new HeapMem.Params;
heapMemParamsCM.size							= 0x00010000 ;
heapMemParamsCM.align							= 32;
heapMemParamsCM.sectionName						= "SDERAMSection";
heapMemParamsCM.instance.name					= "sderamHandle";
Program.global.sderamHandle						= HeapMem.create(heapMemParamsCM);
Program.sectMap["SDERAMSection"]				= "SDERAM";

var timer0Params								= new Timer64.Params();
timer0Params.instance.name						= "hTimer0";
timer0Params.period								= 62500;
timer0Params.intNum								= 11;
timer0Params.startMode 							= xdc.module("ti.sysbios.interfaces.ITimer").StartMode_USER;
Program.global.hTimer0							= Timer64.create(0, null, timer0Params);

var timer1Params								= new Timer64.Params();
timer1Params.instance.name						= "hTimer1";
//timer1Params.period							= 0x1E848;			// defined in the code
timer1Params.intNum								= 12;
timer1Params.startMode 							= xdc.module("ti.sysbios.interfaces.ITimer").StartMode_USER;
Program.global.hTimer1						   = Timer64.create(2, "&TIM_int", timer1Params);

/*
var clock0Params							   = new Clock.Params();
clock0Params.instance.name 					   = "api_clock";
//clock0Params.period							   = 1;
clock0Params.startFlag						   = true;
Program.global.api_clock					   = Clock.create("&API_rxISR", 1, clock0Params);
Clock.tickSource							   = Clock.TickSource_USER;
*/

var timer64Params								= new Timer64.Params();
timer64Params.instance.name						= "hTimer64";
timer64Params.period							= 0x1;			// in microsecs
timer64Params.extFreq.lo 						= 850000;
timer64Params.intNum							= 13;
timer64Params.startMode 							= xdc.module("ti.sysbios.interfaces.ITimer").StartMode_USER;
Program.global.hTimer64						    = Timer64.create(3, "&API_rxISR", timer64Params);


var semaphore0Params						   = new Semaphore.Params();
semaphore0Params.instance.name				   = "CM_terminateSem";
Program.global.CM_terminateSem				   = Semaphore.create(null, semaphore0Params);


/*Synchronize the reclaim and issue */
var semaphore2Params 						   = new Semaphore.Params();
semaphore2Params.instance.name				   = "pcm_io_sem";
Program.global.pcm_io_sem				   	   = Semaphore.create(null, semaphore2Params);

/*
var semaphore3Params						   = new Semaphore.Params();
semaphore3Params.instance.name				   = "pcm_tsa_out_sem";
Program.global.pcm_tsa_out_sem				   = Semaphore.create(null, semaphore3Params);
*/
         

var gateMutexPri0Params 		  = new GateMutexPri.Params();
gateMutexPri0Params.instance.name = "mutexPri";
Program.global.mutexPri 		  = GateMutexPri.create(gateMutexPri0Params);

		 
var API_rxTskParams							   = new Task.Params();
API_rxTskParams.instance.name				   = "API_rxTskHandle";
API_rxTskParams.stackSize					   = 4096;
API_rxTskParams.priority					   = 8;
//API_rxTskParams.stackHeap					   = Program.global.edramHeapSectionHandle ;
//TODO: check the definitions below   
//API_rxTskParams.stackSection				   = ".edram_stack";
Program.global.API_rxTskHandle				   = Task.create("&API_rxTsk", API_rxTskParams);


var FM_taskFxnParams						   = new Task.Params();
FM_taskFxnParams.instance.name				   = "FM_taskFxnHandle";
FM_taskFxnParams.stackSize					   = 2048;
FM_taskFxnParams.priority					   = 5;
FM_taskFxnParams.stackHeap					   = Program.global.edramHeapSectionHandle;
//TODO: check the definitions below
FM_taskFxnParams.stackSection				   = ".edram_stack";
Program.global.FM_taskFxnHandle				   = Task.create("&FM_taskFxn", FM_taskFxnParams);


var CallbackIn_taskFxnParams				  = new Task.Params();
CallbackIn_taskFxnParams.instance.name		  = "pcmCallbackInTskHandle";
CallbackIn_taskFxnParams.stackSize			  =  2048;
CallbackIn_taskFxnParams.priority			  = 1;
CallbackIn_taskFxnParams.stackHeap			  = Program.global.edramHeapSectionHandle;
//TODO: check the definitions below
CallbackIn_taskFxnParams.stackSection		  = ".edram_stack";
Program.global.pcmCallbackInTskHandle		  = Task.create("&pcmCallbackInTskFxn", CallbackIn_taskFxnParams);

var CallbackOut_taskFxnParams				  = new Task.Params();
CallbackOut_taskFxnParams.instance.name		  = "pcmCallbackOutTskHandle";
CallbackOut_taskFxnParams.stackSize			  = 2048;
CallbackOut_taskFxnParams.priority			  = 1;
CallbackOut_taskFxnParams.stackHeap			  = Program.global.edramHeapSectionHandle;
//TODO: check the definitions below
CallbackOut_taskFxnParams.stackSection		  = ".edram_stack";
Program.global.pcmCallbackOutTskHandle	  	  = Task.create("&pcmCallbackOutTskFxn", CallbackOut_taskFxnParams);
BIOS.rtsGateType 							  = BIOS.GateMutexPri;

  • Dear all ,
    Any feedback?
    George
  • Hi George,

    Looks like the problem may be related to memory corruption.  Enabling logging will help track the problem down, the logs will show what was running before the problem.  Can you add the configuration run the SYS/BIOS Log example with the configuration below:

    /* Create default logger for the whole system. */
    var LoggerBufParams = new LoggerBuf.Params;
    var logger0 = LoggerBuf.create(LoggerBufParams);
    Defaults.common$.logger = logger0;
    
    /* Turn on USER1 logs in Task module */
    Task.common$.diags_USER1 = Diags.RUNTIME_ON;
    Task.common$.diags_USER2 = Diags.RUNTIME_ON;
    
    /* Turn on USER1 logs in Hwi module */
    Hwi.common$.diags_USER1 = Diags.RUNTIME_ON;
    Hwi.common$.diags_USER2 = Diags.RUNTIME_ON;
    
    /* Turn on INFO logs in Main module (all non-modules) */
    Main.common$.diags_INFO = Diags.RUNTIME_ON;

    Post your logs afterwards.

    Regards,

    -- Emmanuel

  • Hi Emmanuel,
    Thank you for the prompt reply .
    I have fixed this problem, but in case thank you for you information.
    Now I face an other problem that I described in the below post e2e.ti.com/.../436916
    Any idea about this ?
    Thank you.
  • Dear Emannuel,
    The error is appeared again.
    Adding the commands that you mention I get the following error
    [C66xx_0] ti.sysbios.io.GIO: line 247: E_createFailed: mdCreateChan returned error 3
    ti.sysbios.knl.Task: line 384: E_spOutOfBounds: Task 0x8021c8 stack error, SP = 0x8082fed8.
    xdc.runtime.Error.raise: terminating execution
    In addition to this error, the error is often  appeared  in the   ti_sysbios_family_c64p_Hwi_dispatchCore__I().

    Please have a look in the full stack error

    A24=0x8088a78c A25=0x1
    A26=0x0 A27=0x8d2a60
    A28=0x8d29cc A29=0x80
    A30=0x30 A31=0x904a
    B0=0x1 B1=0x0
    B2=0x0 B3=0x8afd88
    B4=0xeab3dd76 B5=0x15000102
    B6=0x801548 B7=0x85a2fc
    B8=0x0 B9=0x2108f5c
    B10=0x493 B11=0xf549
    B12=0x0 B13=0xe7fb
    B14=0x863800 B15=0x85fdd8
    B16=0x3008ccf B17=0x1000000
    B18=0x7466 B19=0xfddc
    B20=0xc00a B21=0xffff9120
    B22=0x20d B23=0x0
    B24=0x9c B25=0x7256efbd
    B26=0x0 B27=0x40000000
    B28=0x85b48c B29=0x3
    B30=0x3 B31=0x85fdd8
    NTSR=0x1020d
    ITSR=0x20d
    IRP=0x8afd7a
    SSR=0x0
    AMR=0x0
    RILC=0x0
    ILC=0x2108f5c
    Exception at 0xeab3dd74
    EFR=0x2 NRP=0xeab3dd74
    Internal exception: IERR=0x10
    Resource conflict exception
    ti.sysbios.family.c64p.Exception: line 256: E_exceptionMax: pc = 0xeab3dd74, sp = 0x0085fdd8.
    xdc.runtime.Error.raise: terminating execution


    Best regards
    George