Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
我无法获取任务负载和 HWI/SWI 负载、即使在 e2e 论坛中解决了大多数尚未解决的问题之后也是如此。
我有内嵌的加载模块。 在我的 ocnifguardion 文件中添加了 UIA。
但是、我不想通过 JTAG 调试器运行系统分析器、而是在运行时转储控制台上的负载。
这是我的代码片段-
空 DumpCpuLoad()
{
Load_Stat stat;
uint32 tmpLoad;
Task_handle idtskleHandle =空;
char tskLoadBuf[64];
uint32 tskNum = InitTaskList();
/*转储总 CPU 负载*/
sprintf (tskLoadBuf、"%-32s-%3D\n"、"Total CPU"、Load_getCPULoad ());
logs (tskLoadBuf);
idleTskHandle = Task_getIdleTaskHandle (0);
if (idleTskle){
Load_getTaskLoad (idleTskHandle、&stat);
tmpLoad = Load_calculateLoad (&stat);
sprintf (tskLoadBuf、"%-32s-%3D\n"、"自由 CPU"、tmpLoad);
logs (tskLoadBuf);
}
while (tskNum >0)
{
if (TskLst[tskNum-1]){
Load_getTaskLoad (LTskst[tskNum-1]、&stat);
tmpLoad = Load_calculateLoad (&stat);
sprintf (tskLoadBuf、"%-32s-%3D\n"、Task_handle_name (TskLst[tskNum-1])、tmpLoad);
logs (tskLoadBuf);
}
tskNum --;
}
load_getGlobalHwiLoad (&stat);
tmpLoad = Load_calculateLoad (&stat);
sprintf (tskLoadBuf、"%-32s-%3D\n"、"总 HWI 负载"、Load_getCPULoad ());
logs (tskLoadBuf);
load_getGlobalSwifload (&stat);
tmpLoad = Load_calculateLoad (&stat);
sprintf (tskLoadBuf、"%-32s-%3D\n"、"总 SWI 负载"、Load_getCPULoad ());
logs (tskLoadBuf);
/*其他未受监视的任务(如 AppLogger)可能会添加几个 CPU 点*/
}
每个任务的上述输出、SWI 和 HWI 为0。
我的 cfg 文件如下所示。 (仅在此处粘贴相关内容)
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
VAR EventCombiner = xdc.useModule('ti.sysbios.family.c64p.EventCombiner');
VAR HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var ti_sysbios_family_c64p_Hwi = xdc.useModule('ti.sysbios.family.c64p.Hwi');
VAR 信标= xdc.useModule('ti.sysbios.knl.Semaphore');
VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
VAR 内存= xdc.useModule('xdc.runtime.Memory');
VAR DRV = xdc.useModule('ti.sdo.edma3.drv.DRV');
VAR 系统= xdc.useModule('xdc.runtime.System');
VAR Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');
var ti_sysbios_hal_Cache = xdc.useModule('ti.sysbios.hal.Cache');
VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
VAR HeapMultiBuf = xdc.useModule('ti.sysbios.heaps.HeapMultiBuf');
VAR 事件= xdc.useModule('ti.sysbios.knl.Event');
VAR 队列= xdc.useModule('ti.sysbios.knl.Queue');
VAR 邮箱= xdc.useModule('ti.sysbios.knl.Mailbox');
VAR 诊断= xdc.useModule('xdc.runtime.Diags');
VAR Load = xdc.useModule('ti.sysbios.utils.Load');
VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
VAR LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
load.swiEnabled = true;
load.hwiEnabled = true;
var loggerBuf = LoggerBuf.create();
Load.common$.logger = loggerBuf;
Load.common$.diags_USER4 = Diags.always_on;
/*启用 CPU 负载记录*/
LoggingSetup.loadLogging =真;
/*
* 启用任务、Swi 和 Hwi 加载日志记录。 这将允许空闲任务
* 使用更有意义。 否则会将 Hwi 和 Swi 负载考虑在内
* 每个任务的用法。
*
LoggingSetup.loadTaskLogging =真;
LoggingSetup.loadSwiLogging =真;
LoggingSetup.loadHwiLogging =真;
LoggingSetup.loggerType = LoggingSetup.LoggerType_JTAGRUND;
LoggingSetup.sysbiosTaskLogging = true;
LoggingSetup.sysbiosLogging = true;
LoggingSetup.sysbiosLoggingRuntimeControl = true;
LoggingSetup.sysbiosHwiLogging = true;
LoggingSetup.sysbiosHwiLoggingRuntimeControl = true;
LoggingSetup.sysbiosTaskLoggingRuntimeControl = true;
请告诉我为什么不计算负载。
请注意,该函数会调用 get_taskLoad .. HwiLoad 和 SwiLoad 全部返回 true。
谢谢