部件号:EVMK2H
工具/软件:Code Composer Studio
您好,
我一直在调试我在EVMK2H的C66内核之一上编写的基准程序。
第一次加载时,一切似乎正常。 但在我的基准循环重复一次后,调试器似乎在控制设备时出现问题。 点击halt / pause后,我看到以下弹出窗口:
停止目标CPU时出现问题:
(错误-1202 @ 0x0)
设备核心已挂起。 调试器将尝试强制设备进入就绪状态以恢复调试控制。 应用程序的状态将被破坏。 您对内存和寄存器的访问权限应该有限,但您可能需要重置设备以进一步调试。
(仿真软件包7.0 .48.0)
以下是控制台输出:
C66xx_0:凝胶输出:
正在连接目标...
C66xx_0:凝胶输出:TCI6638K2K凝胶文件版本为1.6000.0002万
C66xx_0:Gel输出:检测到PLL旁路已启用:SECCTL[旁路]= 0x80万
C66xx_0:凝胶输出:(2A) MAINPLLCTL1 = 0x0.004万
C66xx_0:凝胶输出:(2B) PLLCTL = 0x0.0048万
C66xx_0:凝胶输出:(2C) PLLCTL = 0x0.0048万
C66xx_0:凝胶输出:(2D)延迟...
C66xx_0:凝胶输出:(2E) SECCTL = 0x81万
C66xx_0:凝胶输出:(2F) PLLCTL = 0x0.0004万A
C66xx_0:凝胶输出:(2G)延迟...
C66xx_0:凝胶输出:(2h) PLLCTL = 0x0.0048万
C66xx_0:凝胶输出:(4) PLLM[PLLM]= 0x0万F
C66xx_0:凝胶输出:MAINPLCTL0 = 0x500万
C66xx_0:凝胶输出:(5) MAINPLCTL0 = 0x700万
C66xx_0:Gel输出:(5) MAINPLLCTL1 = 0x0.004万
C66xx_0:凝胶输出:(6) MAINPLCTL0 = 0x700万
C66xx_0:凝胶输出:(7) SECCTL = 0x89万
C66xx_0:凝胶输出:(8A)延迟...
C66xx_0:凝胶输出:PLL1_DIV3 = 0x0.8002万
C66xx_0:凝胶输出:PLL1_DIV4 = 0x0.8004万
C66xx_0:凝胶输出:PLL1_DIV7 = 0x0万
C66xx_0:凝胶输出:(8D/e)延迟...
C66xx_0:凝胶输出:(10)延迟...
C66xx_0:凝胶输出:(12)延迟...
C66xx_0:凝胶输出:(13) SECCTL = 0x9万
C66xx_0:凝胶输出:(延迟...
C66xx_0:凝胶输出:(延迟...
C66xx_0:凝胶输出:(14) PLLCTL = 0x0.0041万
C66xx_0:凝胶输出:PLL已配置(CLKIN * PLLM / PLLD / PLLOD = PLLOUT):
C66xx_0:凝胶输出:PLL已配置(122.87.9997万 MHz * 16/1/2 = 983.3.9978万 MHz)
C66xx_0:GEL输出:打开所有PSC模块和DSP域的电源...
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=2,MD=9!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=17,MD=25!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=17,MD=26!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=18,MD=27!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=19,MD=28!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=19,MD=29!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=20,MD=30!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=20,MD=31!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=20,MD=32!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=20,MD=33!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=21,MD=34!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=22,MD=35!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=22,MD=36!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=23,MD=37!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=23,MD=38!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=24,MD=39!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=24,MD=40!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=24,MD=41!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=24,MD=42!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=25,MD=43!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=25,MD=44!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=25,MD=45!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=25,MD=46!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=26,MD=47!
C66xx_0:凝胶输出:Set_PSC_State... 超时错误#03 PD=27,MD=48!
C66xx_0:GEL输出:打开所有PSC模块和DSP域的电源... 完成。
C66xx_0:凝胶输出:警告:SYSCLK是PA PLL的输入。
C66xx_0:凝胶输出:已完成PA PLL设置
C66xx_0:凝胶输出:PAPLLCTL0 -之前:0x0x9.8804万C0 之后:0x0x908.05万
C66xx_0:Gel输出:PAPLLCTL1 -之前:0x0x0.004万 之后:0x0x0.204万
C66xx_0:凝胶输出:DDR开始
C66xx_0:凝胶输出:XMC设置完成。
C66xx_0:GEL输出:DDR3 PLL (PL2)设置...
C66xx_0:GEL输出:DDR3 PLL设置完成,DDR3A时钟现在以666 MHz运行。
C66xx_0:Gel输出:DDR3A初始化完成
C66xx_0:GEL输出:DDR3 PLL设置...
C66xx_0:GEL输出:DDR3 PLL设置完成,DDR3B时钟现在以800MHz运行。
C66xx_0:Gel输出:DDR3B初始化完成
C66xx_0:凝胶输出:DDR完成
C66xx_0:停止目标CPU时出现问题:(错误-1060 @ 0x0)设备未响应请求。 重置设备,然后重试此操作。 如果错误仍然存在,请确认配置,关闭电路板电源后重启,和/或尝试更可靠的JTAG设置(例如,Lower TCLK)。 (仿真软件包7.0 .48.0)
C66xx_0:停止目标CPU时出现问题:(错误-1202 @ 0x0)设备内核挂起。 调试器将尝试强制设备进入就绪状态以恢复调试控制。 应用程序的状态将被破坏。 您对内存和寄存器的访问权限应该有限,但您可能需要重置设备以进一步调试。 (仿真软件包7.0 .48.0)
下面是我的基准循环:
void BenchmarkTask_RunBenchmark (UArg arg0,UArg arg1)
{
Algorithms_ICovariance_dataCell_s weights [16]; //硬编码大小!!!
UINT32预提;
UINT32 COvarTicks;
UINT32小窍门;
UINT32 postTicks;
UINT32 COVTime;
UINT32 chTime;
UINT32 triTime;
UINT32累计时间;
timer_handle timerH;
BenchmarkTask_Object* obj =(BenchmarkTask_Object*) arg0;
timerH = Clock_getTimerHandle();
log_print0 (Diags_User2,"enter loop");
同时(1)
{
preTicks = Timer_getCount (timerH);
Tasks_BenchmarkTask_PCovariance_RunCovariance(obj->CovarianceH,&(module->inputdata[0]),&(module->choleskyData[0]);
covarTicks = Timer_getCount (timerH);
Tasks_BenchmarkTask_PCholesky_RunCholesky(obj->CholeskyH,&(module->choleskyData[0]);
TriTicks = Timer_getCount (timerH);
Tasks_BenchmarkTask_PTrisolve_RunTrisolve(obj->TrisolveH,&(module->choleskyData[0]),&(weights [0]),&(module->outputData[0]);
postTicks = Timer_getCount (timerH);
totalTime = postTicks - preTicks;
covTime = covarTicks - prefTicks;
chTime = triTicks - covarTicks;
triTime = postTicks - triTicks;
log_print4 (Diags_User2,"%u %u %u %u",covTime,chTime,triTime,totalTime);
}
}
以下是核心的配置文件:
//////////////////////////////////////////////////////////////
//通用XDC模块
//////////////////////////////////////////////////////////////
VAR主要 = xdc.useModule('xdc.runtime.Main');
//诊断工具的记录器
//var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
VAR LoggerSys = xdc.useModule('xdc.runtime.LoggerSys');
//常规默认值-随机出现
VAR默认 值= xdc.useModule('xdc.runtime.Defaults');
//诊断工具
VAR Diags = xdc.useModule('xdc.runtime.Diags');
VAR日志 = xdc.useModule('xdc.runtime.Log');
VAR SysStd = xdc.useModule('xdc.runtime.SysStd');
VAR系统 = xdc.useModule('xdc.runtime.System');
增值经销商计划 = xdc.useModule('xdc.cfg.Program');
VAR内存 = xdc.useModule('xdc.runtime.Memory');
//////////////////////////////////////////////////////////////
//要使用的BIOS模块
//////////////////////////////////////////////////////////////
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
VAR任务 = xdc.useModule('ti.sysbios.knl.Task');
VAR Clock = xdc.useModule('ti.sysbios.knl.Clock');
VAR HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
//用于CPU加载的BIOS实用程序
VAR负载 = xdc.useModule('ti.sysbios.utils.Load');
VAR Timer64 = xdc.useModule('ti.sysbios.hal.Timer');
//////////////////////////////////////////////////////////////
// TI调试模块-- C66不需要?
//////////////////////////////////////////////////////////////
//var ti_RTDX_driver_rtdxDvr = xdc.useModule('ti.rtdx.driver.RtdxDvr');
//var ti_RTDX_RtdxModule = xdc.useModule('ti.rtdx.RtdxModule');
//////////////////////////////////////////////////////////////
// TI调试模块
//////////////////////////////////////////////////////////////
VAR UIAErr = xdc.useModule('ti.uia.events.UIAErr');
VAR UIAEvt = xdc.useModule('ti.uia.events.UIAEvt');
增值经销商UIABenchmark= xdc.useModule('ti.uia.events.UIABenchmark');
VAR UIAStatistic= xdc.useModule('ti.uia.events.UIAStatistic');
//var UIALogger = xdc.useModule('ti.uia.loggers.LoggerRunMode');
//用于创建新任务的参数
var task_params =新的Task.Params;
//////////////////////////////////////////////////////////////
//诊断和日志记录配置
//////////////////////////////////////////////////////////////
//旧记录器
//var logbuf_params =新的LoggerBuf.Params;
//logbuf_params.bufType = LoggerBuf.BufType_circular;
//logbuf_params.numEntries = 512;
//logbuf_params.exitFlush = TRUE;
//var loggerBuf = LoggerBuf.create(logbuf_params);
//新的UIA记录仪
//var loggerParams =新的UIALogger.Params();
//loggerParams.transferBufSize =3.2768万;
//loggerBuf = UIALogger.CREATE (loggerParams);
//loggerBuf.instance.name ="主记录器";
//Load.taskEnabled =真;
VAR登录设置= xdc.useModule('ti.uia.sysbios.LoggingSetup');
/*使用LoggerRunMode和实时JTAG上载*/
LoggingSetup.LoggerType = LoggingSetup.LoggerType_JTAGRUNMOUDE;
LoggingSetup.loadLoggerSize =1024;
LoggingSetup.mainLoggerSize =3.2768万;
LoggingSetup.sysbiosLoggerSize =3.2768万;
/*启用CPU负载日志*/
LoggingSetup.loadLogging = TRUE;
//Main.common$.logger = loggerBuf;
Main.common$.diags_USER1 = Diags.Runtime_on;
Main.common$.diags_USER2 = Diags.Runtime_on;
Main.common$.diags_USER3 = Diags.Runtime_off;
Main.common$.diags_USER4 = Diags.Runtime_off;
Main.common$.diags_USER5 = Diags.Runtime_off;
Main.common$.diags_USER6 = Diags.Runtime_off;
Main.common$.diags_INFO = Diags.Runtime_on;
Main.common$.diags_ANALYSIS = Diags.Runtime_on;
Main.common$.diags_LIFECYCLE = Diags.Runtime_on;
Main.common$.diags_INTERNAL = Diags.Runtime_on;
Main.common$.diags_EXIT = Diags.Runtime_on;
Main.common$.diags_ENTRY = Diags.Runtime_on;
//////////////////////////////////////////////////////////////
//加载特定于程序的模块
//////////////////////////////////////////////////////////////
VAR Benchmark = xdc.useModule('tasks.BenchmarkTask');
benchmark.PCovariance = xdc.useModule('algorithms.CovarianceC');
Benchmark.PCholesky = xdc.useModule('algorithms.CholeskyB');
Benchmark.PTrisolve = xdc.useModule('algorithms.TrisolveB');
//创建和配置特定于程序的XDC实例
var COVAR_params = new benchmark.PCovariance.params;
//COVAR_params.numChannels = 16;
//COVAR_params.NumRangeCells = 143;
var cholesky_params = new benchmark.PCholesky.Params;
cholesky_params.matrixSize =16;
var trisolve_params = new benchmark.ptrisolve.params;
trisolve_params.matrixSize =16;
var bench_params =新的benchmark.params;
Bench_params.CovarianceH = benchmark.PCovariance.create (COVAR_params);
Bench_params.CholeskyH = benchmark.PCholesky.create (cholesky_params);
Bench_params.TrisolveH = benchmark.Ptrisolve.create (trisolve_params);
var bench_task = benchmark.create (bench_params);
//创建基准任务
task_params.arg0 =工作台任务;
task_params.arg1 = 0;
task_params.priority = 10;
task.create (benchmark.RunBenchmark,task_params);
//////////////////////////////////////////////////////////////
//全局设置
//////////////////////////////////////////////////////////////
System.SupportProxy = SysStd;
system.extendedFormats ="%f";
//以微秒为单位的周期
Clock.tickPeriod = 10万;
//////////////////////////////////////////////////////////////
//内存设置
//////////////////////////////////////////////////////////////
Memory.defaultHeapSize = 0x1万;
program.heap = 0x1万
program.stack = 0x2000;
var heap_mem_params =新的HeapMem.Params;
heap_mem_params.size = 0x1万;
heap_mem_params.align = 128;
program.globe.heap = heapMem.creation(heap_mem_params);
Memory.defaultHeapInstance = Program.globe.heap;
该程序是在Linux中的命令行上手动构建的,然后使用CCSv7在Windows上调试。
xdctools:3.32 .02.22
SYS/BIOS:6.46 .05.55
UIA:2.00。06.52
2011年,我曾在6678演示板和CCSv5上运行过此程序,当时我不记得XDC,BIOS和UIA的版本。
谢谢!