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/MSP430F1612:记录函数调用、在调试期间通过 CCS 获取输出?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/743129/ccs-msp430f1612-logging-function-calls-getting-output-via-ccs-during-debugging

器件型号:MSP430F1612

工具/软件:Code Composer Studio

Windows 10 Pro 64位、基于 x64的处理器

Code Composer Studio 版本:8.2.0.00007

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在 MSP430上、没有通过 CCS 提供此信息运行时的开箱即用解决方案。

    但是、有一个静态调用图选项可能很有用。 它是 CG XML 脚本包集合的一部分:
    processors.wiki.ti.com/.../Code_Generation_Tools_XML_Processing_Scripts

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

    感谢您的回复。 我将了解一下这一点。 我用 Doxygen 和 Graphwiz 生成了调用图、我想其目的是相似的。

    我一直在寻找更多信息并找到调试脚本服务器。 我在 YouTube 上观看了此视频。 大约13.00分钟时、输出将非常有用。 这对于 MSP430是可行的吗?

    www.youtube.com/watch

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

    [引用 user="Jerker Dahlblom">我一直在寻找更多信息并找到调试脚本服务器。 我在 YouTube 上观看了此视频。 大约13.00分钟时、输出将非常有用。 这对于 MSP430是否可行?[/quot]

    如果启用了日志记录、DSS 将生成 DSS 日志。 可以为任何目标启用此日志记录:

    http://software-dl.ti.com/ccs/esd/documents/users_guide/sdto_dss_handbook.html#logging

    谢谢

    Ki

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

    我目前正在探讨 DSS 和 JavaScript 功能、但我发现这些示例有点不符合我的需求。 我已经了解了安装 CCS 8时提供的示例、并下载了您网站上列出的2014年实验室培训模块。

    是否有其他示例? 我发现对这个主题的了解非常少。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是大部分可用 DSS 材料。 如果您有具体的 DSS 问题、我可以尝试在此论坛上回答这些问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在尝试弄清楚如何查看代码 DSS 中的位置。 此代码不起作用、我无法从 CCS 8提供的示例中找到任何确切答案。 [现在是否在断点 x 处的 DSS ]?

    我还发现我不能对断点使用代码标签,例如"label1:",因为编译器优化需要设置为1,以删除所有标签。 但现在这并不重要、因为我目前基本上无法了解 DSS。 例如、此 JavaScript 不起作用。 我没有找到匹配项。 我通过 CSS 在这些位置添加了正常断点、它们在从 CSS 进行调试时起作用。

    script.traceWrite ("设置断点");
    var mybreakpoint1 = debugSession.breakpoint.add("J32.c"、1289);
    var mybreakpoint2 = debugSession.breakpoint.add("J32.c"、1293);
    
    script.traceWrite ("调用目标运行");
    debugSession.target.run();
    script.traceWrite ("目标运行后");
    var foundBreakpoints = 0;
    while (foundBreakpoints < 2){
    var PC = debugSession.expression.evaluate ("PC"
    ) if (PC = mybreakpoint1){
    script.traceWrite ("我的断点1:0x"+ long.toHexString (mybreakpoint1)+"|在计数器0x"+ long.tract0x
    
    (
    x)+ mybreakpoint+ myst&dx)+ mystring+ mystr (dx)+ mystring+ mystr&dx (mybreakpoint+)+ mystrand+ mystr&dx (dx)+ mystrand+ mystr&d&d&d&d&dx)
    foundBreakpoints++;
    }
    if (foundBreakpoints < 2){
    debugSession.target.run();
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您似乎已经看过"breakpoints.js" DSS 示例、这正是我要推荐的示例。

    我建议通过 Rhino 调试器运行您的脚本、以正确调试脚本。 您应该能够以这种方式确定故障的根本原因:
    software-dl.ti.com/.../sdto_dss_handbook.html

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

    犀牛没有帮助。 已尝试运行异步,但仍然不支持 SLEE()或为异步函数设置回调函数。

    在这些论坛中搜索"debugSession.breakpoint.add"提供的线程数量惊人。 我是否认为 DSS 不再真正得到发展? 一只被困在海滩上的大鲸鱼? TI 关于2013年主题的视频几乎没有什么看法、总体印象是未使用 DSS。 与 DSS 适用于夜间测试的视频陈述相比、批量回归测试?

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

    DSS 得到了绝对支持、在 TI 内部和外部广泛使用。 实际上、CCS 系统测试团队使用它来验证我们的产品构建。

    您遇到的具体问题是什么? 当您运行目标(非异步)时、它永远不会达到您期望的断点、这是一个问题吗?

    谢谢
    Ki

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

    您好!

    我将尝试不同的事情、看看出现了哪些问题、并在本周回到这个话题。 所以请不要锁定它。

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

    我终于在使基本断点正常工作、读取变量方面取得了一些进展。

    我有一些问题

    target.runAsynch、target.halt ()和 clock.read()。

    我能否将这些函数与调试文件夹中生成的*。map 文件中的存储器信息一起使用、编写一个将输出函数调用图的脚本? 在我停止目标之前、目标运行了多少? 这是否超出了我的控制范围? 我可以通过某种方式使用时钟吗?

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

    [引用 user="Jerker Dahlblom"]我能否将这些函数与位于调试文件夹中生成的*。map 文件中的存储器信息一起使用、编写一个脚本、输出函数调用图? [/报价]

    我想这是可能的。 尽管这将是一个非常相关的过程。 祝您好运!

    [引用 user="Jerker Dahlblom"]目标在我停止之前运行了多少?[/quot]

    这是完全可变的。 从 DSS 的角度来看、您可以在运行后立即停止它

    [引用 user="Jerker Dahlblom"]我可以通过某种方式使用时钟吗?

    配置文件时钟用于计算执行之间的周期数。 有关时钟的更多详细信息、请参阅:

    http://software-dl.ti.com/ccs/esd/documents/ccs_counting_cycles.html#profile-clock

    请注意、启用系统配置时钟将使用仿真资源。 这与器件在设置硬件断点和观察点时使用的资源相同。 MSP 上的此资源数量非常有限、因此需要考虑这一点。

    谢谢

    Ki  

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

    谢谢!

    最后一个问题、我能否使用 MSP4530F1612和 MSP-FETFlash 仿真器工具通过 DSS 脚本以某种方式连接到正在运行的目标?

    如果我正在处理的当前脚本不必通过目标的启动、则效果最好、因为它需要很长时间才能生成有趣的数据。

    这是完全可能的吗? 找不到信息。

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

    很明显、我可以在特定时间内异步运行目标、暂停目标、添加断点、然后在那里同步运行目标。 因此它似乎可以正常工作。

    这是第一个原型脚本、它似乎可以在其中工作。

    script.setScriptTimeout(120000)
    
    var j32Flag = debugSession.symbol.getAddress ("ui16_J32Flag");
    flaglockresource = debugSession.symbol.getAddress ("LockRessource");
    var bpSet = false;
    script.traceWrite ("调用 runAsynch");
    debugSession.target.runAsynch();
    
    var
    
    
    
    counter = 0;var j32OldValue1 (while starting <-ldValue1);var -ramp1 (voltureWrite)
    if (!bpSet){
    Wait (25000);
    }
    if (!bpSet){
    debugSession.target.halt();
    //根据 lineNumber 在源文件中设置断点
    var 文件名="Code.c";
    VAR linenumber = 714;
    script.traceWrite ("在"+ lineNumber 中为文件"+ fileName +"设置断点);
    var breakpoint1 = debugSession.breakpoint.add(filename、lineNumber);
    bpSet = true;
    debugSession.target.run();
    }
    var PC = debugSession.expression.evaluate ("pc")
    script.traceWrite ("程序计数器停止@ 0x"+ PC.toString (16));
    
    var j32flagValue = debugSession.memory.ReadData (0、j32Flag、16、false);
    var lockresourceValue = debugSession.memory.ReadData (0、lockresource、16、false);
    /*if (j32flagValue!= j32flagOldValue || lockresourceValue!= lockresourceOldValue){
    打印("-------------------------------------------------------- ");
    }*/
    if (j32flagValue!= j32flagOldValue){
    printVariable ("ui16_J32Flag"、j32flagValue);
    j32flagOldValue = j32flagValue;
    }
    if (lockresourceValue!= lockresourceOldValue){
    printVariable ("LockRessource"、lockresourceValue);
    lockresourceOldValue = lockresourceValue;
    }
    COUNTER++;
    //继续运行
    debugSession.target.run();
    }