TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678调试程序出现的一些BUG,请指导一下

C6678有时候程序运行不稳定,经常会出现

ti.sysbios.gates.GateMutex: line 97: assertion failure: A_badContext: bad calling context. See GateMutex API doc for details.
xdc.runtime.Error.raise: terminating execution

请问这个是不是内存运行不稳定或者是因为DDR3没有初始化;查看了关于ti.sysbios.gates.GateMutex API,没怎么看懂。请教一下各位!

这个我该工程的.cfg文件:

var Memory = xdc.useModule('xdc.runtime.Memory');

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

/*BIOS.heapSize = 0x2000;*/

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

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

var Log = xdc.useModule('xdc.runtime.Log');

/*
** Allow storing of task names. By default if you name a task with a friendly display name it will not be saved
** to conserve RAM. This must be set to true to allow it. We use friendly names on the Task List display.
*/
//Defaults.common$.namedInstance = true;Task.common$.namedInstance = true;

var Clock = xdc.useModule ('ti.sysbios.knl.Clock');

/*** Interface with IPC. Depending on the version of BIOS you are using the** module name may have changed.
*/
/* Use this for pre BIOS 6.30 */
/* var Sem = xdc.useModule ('ti.sysbios.ipc.Semaphore'); */

/* Use this for BIOS 6.30 plus to get the IPC module */
var Sem = xdc.useModule ('ti.sysbios.knl.Semaphore');

var Hwi = xdc.useModule ('ti.sysbios.hal.Hwi');

var Ecm = xdc.useModule ('ti.sysbios.family.c64p.EventCombiner');

/*
** Configure this to turn on the CPU Load Module for BIOS.
**
*/
/*
var Load = xdc.useModule('ti.sysbios.utils.Load');
Load.common$.diags_USER4 = Diags.ALWAYS_ON;
*/

var Diags = xdc.useModule('xdc.runtime.Diags');

/* Load the CSL package */
var Csl = xdc.useModule('ti.csl.Settings');

/* Load the CPPI package */
var Cppi = xdc.loadPackage('ti.drv.cppi');

/* Load the QMSS package */
var Qmss = xdc.loadPackage('ti.drv.qmss');

/* Load the PA package */
var Pa = xdc.useModule('ti.drv.pa.Settings');

/* Load the Platform/NDK Transport packages */
var PlatformLib = xdc.loadPackage('ti.platform.evmc6678l');
var NdkTransport = xdc.loadPackage('ti.transport.ndk');

/*** Sets up the exception log so you can read it with ROV in CCS*/
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
var Exc = xdc.useModule('ti.sysbios.family.c64p.Exception');
Exc.common$.logger = LoggerBuf.create();
Exc.enablePrint = true; /* prints exception details to the CCS console */

/*
** Give the Load module it's own LoggerBuf to make sure the
** events are not overwritten.
*/
/* var loggerBufParams = new LoggerBuf.Params();
loggerBufParams.exitFlush = true;
loggerBufParams.numEntries = 64;
Load.common$.logger = LoggerBuf.create(loggerBufParams);*/

/*
** Use this load to configure NDK 2.2 and above using RTSC. In previous versions of
** the NDK RTSC configuration was not supported and you should comment this out.
*/
var Global = xdc.useModule('ti.ndk.config.Global');

/*** This allows the heart beat (poll function) to be created but does not generate the stack threads**
** Look in the cdoc (help files) to see what CfgAddEntry items can be configured. We tell it NOT
** to create any stack threads (services) as we configure those ourselves in our Main Task
** thread hpdspuaStart.
*/Global.enableCodeGeneration = false;

/* Define a variable to set the MAR mode for MSMCSRAM as all cacheable */
var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
//Cache.MAR224_255 = 0x0000000f;

var Startup = xdc.useModule('xdc.runtime.Startup');

var System = xdc.useModule('xdc.runtime.System');

/*
** Create a Heap.*/
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var heapMemParams = new HeapMem.Params();
/*heapMemParams.size = 0x300000;*/
/*heapMemParams.size = 0x800000 + 0x8000*4 + 0x8000*4;*/
/*heapMemParams.size = 0x8000000;*/
heapMemParams.size = 0x800000 + 0x8000*4 + 0x8000*6;
/*heapMemParams.size = 4;*/
heapMemParams.sectionName = "systemHeap";
Program.global.heap0 = HeapMem.create(heapMemParams);
Memory.defaultHeapInstance = Program.global.heap0;
/* This is the default memory heap. */
var Memory = xdc.useModule('xdc.runtime.Memory');
//Memory.defaultHeapSize = 0x300000;
/*Program.heap = 0x10000;*/
Program.sectMap["sharedL2"] = "DDR3";Program.sectMap["systemHeap"] = "DDR3";
Program.sectMap[".sysmem"] = "DDR3";
Program.sectMap[".args"] = "DDR3";
Program.sectMap[".cio"] = "DDR3";
Program.sectMap[".far"] = "DDR3";
Program.sectMap[".rodata"] = "DDR3";
Program.sectMap[".neardata"] = "DDR3";
Program.sectMap[".cppi"] = "DDR3";
Program.sectMap[".init_array"] = "DDR3";
Program.sectMap[".qmss"] = "DDR3";
Program.sectMap[".cinit"] = "DDR3";
Program.sectMap[".bss"] = "DDR3";
Program.sectMap[".const"] = "DDR3";
Program.sectMap[".text"] = "DDR3";
Program.sectMap[".code"] = "DDR3";
Program.sectMap[".switch"] = "DDR3";
Program.sectMap[".data"] = "DDR3";
Program.sectMap[".fardata"] = "DDR3";
Program.sectMap[".args"] = "DDR3";
Program.sectMap[".cio"] = "DDR3";
Program.sectMap[".vecs"] = "DDR3";
Program.sectMap["platform_lib"] = "DDR3";
Program.sectMap[".far:taskStackSection"] = "L2SRAM";
Program.sectMap[".stack"] = "L2SRAM";
Program.sectMap[".nimu_eth_ll2"] = "L2SRAM";
Program.sectMap[".resmgr_memregion"] = {loadSegment: "L2SRAM", loadAlign:128}; /* QMSS descriptors region */
Program.sectMap[".resmgr_handles"] = {loadSegment: "L2SRAM", loadAlign:16}; /* CPPI/QMSS/PA Handles */
Program.sectMap[".resmgr_pa"] = {loadSegment: "L2SRAM", loadAlign:8}; /* PA Memory */
Program.sectMap[".far:IMAGEDATA"] = {loadSegment: "L2SRAM", loadAlign: 8};
Program.sectMap[".far:NDK_OBJMEM"] = {loadSegment: "L2SRAM", loadAlign: 8};
Program.sectMap[".far:NDK_PACKETMEM"] = {loadSegment: "L2SRAM", loadAlign: 128};

/*
** Create my dynamic Heap.*/
/*var heapMemParams2 = new HeapMem.Params;
heapMemParams2.size = 2048; // heapMem是要多少分多少
heapMemParams2.align = 8;
Program.global.task1Heap = HeapMem.create(heapMemParams2);
IHeap_Handle heap = HeapMem_Handle_upCast(task1Heap);*/
/* Required if using System_printf to output on the console */
SysStd = xdc.useModule('xdc.runtime.SysStd');
System.SupportProxy = SysStd;

/********************************************************************************************************************
* Define hooks and static tasks that will always be running. *
********************************************************************************************************************/

/*** Register an EVM Init handler with BIOS. This will initialize the hardware. BIOS calls before it starts.**
** If yuo are debugging with CCS, then this function will execute as CCS loads it if the option in your** Target Configuraiton file (.ccxml) has the option set to execute all code before Main. That is the** default.
*/
Startup.lastFxns.$add('&EVM_init');

/*** Create the stack Thread Task for our application.
*/
var tskNdkStackTest = Task.create("&StackTest");
tskNdkStackTest.stackSize = 0x1400*4;
/*tskNdkStackTest.stackSize = 100*1024;*/
tskNdkStackTest.priority = 0x5;

/*** Create a Periodic task to handle all NDK polling functions.** If you are using RTSC configuration with NDK 2.2 and above, this is done by default and** you do not need to do this.
*/
/*var prdNdkClkParams = new Clock.Params ();
prdNdkClkParams.period = 0x64;prdNdkClkParams.startFlag = true;
Program.global.clockInst1 = Clock.create("&llTimerTick", 5, prdNdkClkParams);
*/

/*** If you are using RTSC configuration with NDK 2.2 and above, this is done by default, else
** register hooks so that the stack can track all Task creationTask.common$.namedInstance = true;
Task.addHookSet ({ registerFxn: '&NDK_hookInit', createFxn: '&NDK_hookCreate', });

/* Enable BIOS Task Scheduler */
BIOS.taskEnabled = true;

/*
* Enable Event Groups here and registering of ISR for specific GEM INTC is done
* using EventCombiner_dispatchPlug() and Hwi_eventMap() APIs
*/

Ecm.eventGroupHwiNum[0] = 7;
Ecm.eventGroupHwiNum[1] = 8;
Ecm.eventGroupHwiNum[2] = 9;
Ecm.eventGroupHwiNum[3] = 10;

da qin zheng sheng:

这个是多核的DSP! 运算处理速度很快的。

首先板子是原厂的还是自己做的?

1.建议从最小系统开始测试!把程序download到内部sram测试!

2.板子是原厂的话建议多看官方手册来初始化DDR3!

3.如果自己做的板子,先检查DDR3的等长布线,降低处理器运行速度以及DDR3访问速度。

 

user4245284:

能不能加点注释上去

Gangping Li:

回复 da qin zheng sheng:

你好,板子是原厂的,我觉得可能是DDR3没有初始化的原因。根据你的建议,我打算先从你给出的第二建议开始入手。谢谢你,哥们!

user4187796:

回复 da qin zheng sheng:

楼主是DDR3函数有修改吗?

一般还是维持原状,自己重新调用他的函数体为好。

Gangping Li:

回复 user4245284:

这是cfg文件,我贴出来主要是想让大家一起帮忙看看哪里有不合理的地方。关于cfg使用JavaScript语言,我不是很懂,所以没什么注释。

Gangping Li:

回复 user1252812:

我试试哈,谢谢咯,哥们

AWG360:

回复 Gangping Li:

你的是什么系统与版本呀,可以参考个调试方法

http://wenku.baidu.com/link?url=7OfU4rQhayccpmea1r_4ahB7V4vYqtYI_f7ZZ7bLcu9QMAj2Zog9DiS2acSXiYxNWaaWr6b3kQHJGr45XlKUg3cIwsa1gB7KUtQomiHxRiG

Gangping Li:

回复 AWG360:

你好,我使用的是sys/bios操作系统,版本6.35,CCS版本:5.5,谢谢你提供的调试方法。

zhirui zheng:

楼主,,这个很复杂了,,一下子谁能找到关键所在啊,,,,期待高手来此区、、

赞(0)
未经允许不得转载:TI中文支持网 » C6678调试程序出现的一些BUG,请指导一下
分享到: 更多 (0)