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.

[参考译文] CCS/TMS320C6678:如何为C/C++项目启用系统分析器(UIA)

Guru**** 2609285 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/634177/ccs-tms320c6678-how-to-enable-system-analyser-uia-for-a-c-c-project

部件号:TMS320C6678

工具/软件:Code Composer Studio

为了减少编译时间,我有一个项目(项目A)带有.cfg文件,它在另一个C/C++项目(项目B)中被引用。 我的整个代码驻留在项目B中,它在其属性中引用项目A。 到目前为止,这种方法运行良好,但现在我想启用“系统分析器”,以便在代码以调试模式运行时检查CPU负载。

如一般指南所示,我的.cfg文件具有LoggingSetup,但当我加载.out文件并尝试运行系统分析器时,它不会'Detect UIA configuration'(检测UIA配置)。

VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
LoggingSetup.loadLogging = TRUE;
LoggingSetup.LoggerType = LoggingSetup.LoggerType_STOPMODE;

var Load = xdc.useModule('ti.sysbios.utils.Load');
Load.windowInms = 100;//配置为每100毫秒记录一次,而不是默认的500毫秒周期。
VAR UIABenchmark = xdc.useModule('ti.uia.events.UIABenchmark'); 

uia.xml和rta.xml文件位于project_a\Debug\configPkg\package\cfg中。

XDC工具版本为3.50 .2.20。

SYS/BIOS 6.46 .5.55。

UIA目标2.0。6.52

CCS版本7.2 .0。

是否可以在一个项目中使用.cfg文件,并在另一个项目中通过调试模式调用系统分析器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sherry:

    我在CCS 7.3 中尝试过这种方法,它工作正常。  我有一个项目A带有.cfg文件,另一个项目B没有.cfg文件,这依赖于项目A。 RTOS分析器工作正常。  然后,我在CCS 7.2 中尝试了此操作,遇到了您所描述的问题。

    您是否可以尝试使用CCS 7.3 并查看问题是否消失?

    此致,

    珍妮特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sherry:

    您可以尝试(对于CCS 7.2)的另一项操作是创建自定义UIA配置并指向项目A中的UIA.xml,rta.xml文件

    此致,

    珍妮特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用CCS 7.3 尝试了它,但它仍然显示“无法检测到UIA配置”。 我无法返回CCS 7.2 ,因为我必须卸载它才能拥有CCS 7.3。

    我可以看到PortjectA\Debug\configPkg\cpackage\cfg包含大量文件,包括uta.xml和rta.xml文件。项目B的参考中也勾选了projecta,但Blackhawk USB-Mezzanine仿真器上的项目B的调试模式仍无法获取UIA配置。

    当我创建自己的格式为.usmxml的UIA配置文件时,它会显示'cannot determined' for CPU load, Task Load etc in Instrumentation status.(无法确定CPU负载,任务负载等)

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我要在C6678上运行的.cfg文件

    var EDMA		= XDC.loadPackage ("ti.sdo.edma3.drv.sample");
    
    var Task = xdc.useModule
    
    
    
    
    xdc.useModule
    
    xdc.useModule ("ti.SysBIOS.KNL.Task");var BIOS = xdc.useModule xdc.useModule xdc.runtime.System");("ti.CombBIOS");bios.heapTrackEnabled = TRUE;bios.libType = bios.SysLibType_Custom;var ECM = xdc.useModule v4.var xdc.runtime.Startup");;
    xdc.useModule('xdc.runtime.SysStd');= var ==
    
    VAR Log = xdc.useModule ("var
    Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
    var Cache = xdc.useModule('ti.sysbios.hal.Cache');
    var CpIntc = xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
    var Timer = xdc.useModule('ti.sysbios.hal.Timer');
    
    var Error = xdc.useModule ("xdc.runtime.Error");
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    var Memory = xdc.runtime.Log"); xdc.useModule('xdc.runtime.Memory');
    Memory.defaultHeapSize = 6.5536万;
    Program.heap = 0x1万;
    var Timestamp = xdc.useModule('xdc.runtime.Timestamp');)
    
    ECM.eventGroupHWiNum[0]=7;
    ECM.eventGroupHWiNum[1]=8;
    ECM.eventGroupHWiNum[2]=9;
    ECM.eventGroupHWiNum[3]=10;
    VAR UIABenchmark = xdc.useModule('ti.uia.events.UIABenchmark');
    var Load = xdc.useModule('ti.sysbios.utils.Load');
    Load.windowInms = 100;//配置为每100毫秒记录一次,而不是默认的500毫秒。
    
    VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.loadLoggerSize = 1024;
    LoggingSetup.mainLoggerSize = 3.2768万;
    LoggLoggLoggLoggLoggedType = 3.2768万;
    
    UnloggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggLoggReset.LoggLogg=
    加载设置
    
    LoggingSetup.loadTaskLogging = true;
    LoggingSetup.enableTaskProfiler = true;
    LoggingSetup.benchmarkLogging = true;
    LoggingSetup.sysbiosHWiLogging = TRUE;
    LoggingSetup.sysbiosHwiLoggingRuntimeControl = TRUE;
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通过复制{workspace}/projecta/Debugg/文件夹中的'configPkg'文件夹(及其所有内容)并将其导入{workspace}/ProjectB/Debug,Tools -> RTOS analyzer -> Execution analysis (工具-> RTOS分析器->执行分析)将打开UIA对话框。 它成功地检测到UIA配置(yayy),但运行代码时,它不会在'CPULoad'或'Live Session'窗口中显示任何内容。 我意识到这是一个欺骗,它仍然没有连接到ProjectB的.out文件。

    我是否有任何方法可以使项目B查看项目A中的UIA并链接到它,以便我可以检查CPUload?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sherry:

    您能否单击CPU负载旁边显示的"无法确定"并查看其内容?  此外,您是否在项目B的CCS生成中添加了项目A作为依赖关系?  它应如下所示:

    cfg文件对我来说很好,但CCS中存在一个已知问题,即在外部内存中使用带有日志缓冲区的JTAG运行模式时,数据不显示。  请参阅此帖子以了解如何解决问题:

    e2e.ti.com/.../226.2729万

    基本上,尝试JTAG StopMode,或将日志缓冲区置于L2SRAM中。

    此致,

    珍妮特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是在项目B ->(右键单击)属性-> CCS生成->依赖关系中,我可以看到列出的项目A。

    当我在自定义UIA配置中展开'Cannot Determine'(无法确定)时,我收到如下消息

    我的UIA比2.0 新。 它是UIA 2.0。 所以我忽略了它,然后单击Run (运行)按钮来执行我的代码。 我已将JTAG从运行模式更改为StopMode,为了安全起见,我还在我的PortjectA .cfg中添加了以下行

    bios.logsEnabled = true;
    LoggingSetup.memorySectionName ="L2SRAM";
    LoggingSetup.sysbiosLoggerSize = 1024;
    LoggingSetup.loadLoggerSize = 512; 

    L2RAM中有足够的内存。 仍然没有成功。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Sherry:
    您是否可以检查项目构建中的产品? 在项目属性下,选择常规->产品和存储库。 你能发布一个屏幕截图吗?
    谢谢!
    珍妮特
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在下面投影存储库

    项目B,这取决于UIA的项目A如下

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sherry:

    我觉得没问题。  是否可以尝试清理项目A (同时删除Debug和src目录)并重建?  然后重新构建项目B,看看这是否解决了问题。

    谢谢!

    珍妮特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我这样做了,还重新启动了调试,CCS和我的计算机。 它没有奏效。 我们有许多项目像这样分开;项目A/项目B计划。 我想我必须回到一个基本系统,所有的cfg库和代码都在一个框架内。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是如此令人失望。 即使在合并cfg文件,包括路径和C/C++文件到一个项目后,我也无法获取CPU加载时间线。 打开RTOS分析器后,将显示以下窗口

    我收到一个弹出窗口'Invalid UIA configuration, Error Items: Event transtransport:undefined'(无效的UIA配置,错误项目:事件传输:未定义) 即使我的cfg文件中包含以下行。

    LoggingSetup.LoggerType = LoggingSetup.LoggerType_STOPMODE; 

    请帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.右上角的传输列显示'无',如我在上面的回复中所示。 它应通过在同一项目中的.cfg文件中自动检测来显示JTAG运行模式或停止模式。 这是为什么我可以启动UIA会话,但在代码运行后,我在Live Session中什么也没有?

    2.创建自定义UIA配置时,我选择JTAG作为传输事件。 自定义UIA会话启动后,它会在传输列中显示'Run mode JTAG'(运行模式JTAG)。 这与的.cfg命令冲突。

    LoggingSetup.LoggerType = LoggingSetup.LoggerType_STOPMODE; 

    创建自定义UIA配置时,我不知道如何更改此设置。建议在UIA会话中使用停止模式,而不是运行模式。 那么接下来我该怎么办呢?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sherry:

    我不知道您所说的'处理.cfg文件'是什么意思。  只有一个项目可以具有.cfg文件。  如果项目A具有.cfg文件,则项目B不能具有.cfg文件。   项目B是否有.cfg文件?

    谢谢!

    珍妮特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在我放弃了项目A和项目B的方法,绝望地让UIA工作。 我将项目B (仅代码)复制到项目C, 并将.cfg文件从项目A复制到项目C。我在CCS提示时说是,它要求我为项目C启用XDC工具。它编译良好,项目C的系统分析器提供UIA配置窗口,如上所示 (我抱怨没有'交通'设置的屏幕截图)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我希望在RTOS分析器的实时会话窗口中显示以下命令。 在调用Task后,在程序中动态创建信号。 即使在BIOS_START()之前的主菜单中,我也希望显示一些日志

    log_print0 (Diags_entry,"这是print0.");
    Log_info0 ("这是log_info"); 

    但是,当程序在运行一段时间后暂停时,'Live Session'不显示任何内容。 否则,代码将正常执行,它将提供UART输出并按预期更新L2M中的其他缓冲区。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它现在就可以工作了。 我在cfg文件中调用了另一行

    program.linkTemplate ="<Network drive>/my_memory_section.txt"; 

    这将使用我的自定义内存部分覆盖L2M和DDR3的默认'内存'和'设置'。 我发现这是这个线程中唯一能够继续使用PDK的方法,但我有自己的内存sectionse2e.ti.com/.../98.8154万

    使用从自动生成的linker.cmd复制的新UIA链接更新文本文件后,该文件将正常工作。