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/AWR1843

Guru**** 2558430 points
Other Parts Discussed in Thread: AWR1843, AWR1642, AWR2944

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843

主题中讨论的其他器件:AWR1843AWR1642AWR2944

大家好,我正在使用 AWR1843、XSD110调试器和 CCS 软件来构建调试环境,当我调用 API 来编写脚本以实现自动测试时,我发现如果我调用 run() API,目标板可以成功运行,指示灯将闪烁。 但控制不会返回到主机应用程序/脚本,并且不会执行 run()命令之后的任何操作,从而使程序无法执行其他操作。 如果调用 runAsynch() API,则可以将控件返回到主机应用程序/脚本,并执行 runAsynch()之后的操作, 但 AWR1843目标板将无法成功运行、指示灯将不会闪烁、如果添加了超时设置、则会显示目标板无法运行、原因是什么? 是否有任何 API 允许目标板成功运行、使灯闪烁并将控制权返回到主机应用程序/脚本? 以下是执行结果和脚本文档、您能提供帮助吗? 非常感谢!

  e2e.ti.com/.../1682.perl_5F00_clientOne.txt

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

    是的、这就是我们的工作。 我们将时钟属性调整为在每次运行前自动重置。

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

    好的、是的、那么它应该是两个断点之间的周期计数

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

    您好 Ki、我发现在 CCSIDE 上通过两种方式获得的时钟周期计数值差别很大。 第一种方法是连接目标, 在运行目标之前添加断点。第二种方法是连接目标,然后让目标运行一段时间,然后暂停目标,添加断点并再次运行目标。哪种方法更准确? 如果我在脚本中调用 run() API 以使目标首先运行,则很遗憾目标不返回控制权,因此我无法暂停它,添加断点并再次运行它。 我只 能首先调用 add.breakpoint API,然后调用 run() API,对吧?如果我想在目标运行时暂停,然后在暂停后再次调用 run() API,我应该调用 halt() API 吗?

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

    我阅读了一些有关使用 API 的官方脚本示例、 我有一些问题希望您能帮助我回答。 非常感谢!

    我不能很清楚这三个 API 之间的区别:

    debugSession.symbol.getAddress ("ReadNextData")

    debugSession.memory.readRegister ("PC")

    debugSession.expression.evaluate ("pc")

    三个 API 似乎都在获得地址值,三个 API 获得的地址值之间有何差异?

    如果我想读取全局 变量并更改其值,我应该使用 memory.ReadData()和 memory.writeData(),对吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4395646 #4395646"]我发现 CCSIDE 上通过两种方法获得的时钟周期计数值有很大差异。 第一种方法是连接目标, 在运行目标之前添加断点。第二种方法是连接目标,然后让目标运行一段时间,然后暂停目标,添加断点并再次运行目标。哪种方法更准确?

    如果使用相同的时钟进行配置、则其中一个时钟不应比另一个时钟"更加精确"。 如果在这两种情况下、在到达第一个断点后启用时钟并且时钟值为0、则目标运行到下一个断点、周期计数应相同

    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4395646 #4395646"]如果 我在脚本中调用 run() API 以使目标首先运行,很遗憾目标不返回控制,因此我无法暂停它,添加断点并再次运行它。 我只 能首先调用 add.breakpoint API,然后调用 run() API,对吗?

    正确。 run() API 是一个阻塞调用,仅在目标以某种方式停止时才返回。

    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4395646 #4395646"]如果我想在目标运行时暂停该目标,并在暂停后再次调用 run() API,是否应该调用 halt () API?

    请注意、如果目标已在运行、但无论如何不会阻止您(例如、您正在使用 runAsynch)、则可以在目标运行时设置硬件断点。 硬件断点不需要停止目标。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4395648 #4395648"]

    我不能很清楚这三个 API 之间的区别:

    debugSession.symbol.getAddress ("ReadNextData")

    debugSession.memory.readRegister ("PC")

    debugSession.expression.evaluate ("pc")

    [/报价]

    symbol.getAddress 将获取符号(如全局变量等)的地址。

    memory.readRegister 将返回内核或存储器映射寄存器的值

    表达式、求值-这个有点复杂、但它会尝试返回表达式的值、如寄存器或变量。 如果可能、我不会使用这个

    target.restart 只需将 PC 重置为程序入口点即可。 是否要执行该操作取决于您。 我想你不会。

    properties.printProperties 用于打印可用的断点属性。 有关更多详细信息、请参阅以下链接:

    https://software-dl.ti.com/ccs/esd/documents/users_guide/sdto_dss_handbook.html#breakpoints

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

    您好 Ki,很抱歉再次打扰您,我们今天使用脚本调用 runAsynch() API,目标板成功运行后,再调用 halt() API 来终止程序, 最后断开目标、控制台上打印的信息是目标已成功断开连接、服务器也已关闭、 但是、我们用于检测目标板发送的信号的软件显示仍有信号被发送、这些信号由 ARM 内核发送、电流表上的电流为0.20~0.21A (当两个内核运行时、电流为0.28~0.29A; 当 ARM 内核运行时、电流为0.20~0.21A;当两个内核停止并断开连接时、电流为0.17A)、因此我们怀疑 DISCONNECT () API 未成功断开两个内核、这似乎是另一个 API 错误。 执行结果如下:

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

        最近、我们一直在使用您提供的 API 来编写脚本、以链接独木舟和 Vteststudio (矢量公司的两个软件)、从而实施自动化集成测试、以运行、暂停、断点、读取全局变量和其他操作。 在整个工作过程中,我们将首先将您的 API 封装到脚本中,例如一个名为 addBreakpoint.pl 的脚本就是调用 add.breakpoint API,以实现添加断点的功能。 然后、Vteststudio 将使用 C#语言逐一封装方法、例如封装名为 AveBreakpoint (string port)的函数、方法的实现是打开一个黑色窗口进程 cmd、在 cmd 中输入 execute 脚本命令、运行相应的脚本以添加断点、 然后、我们将自由地将这些方法汇编到 Vteststudio 中的情况中、例如包含连接、下载程序、运行目标、添加断点等的情况。 最后、使用独木舟执行在 Vteststudio 中组装的案例 、以实现全自动测试。 这可能听起来有点模糊,这就是我们先前告诉您的原因,我们希望将 API 函数拆分为单独的脚本,因此您提供了 TestServe 方法。 但是、我们现在遇到了一个无法自行解决的问题、这会影响我们的自动化集成测试的实施。 更严重。问题是 TestServe 方法,在整个客户端和服务器会话期间,服务器启动的黑色窗口不能关闭(除非两个客户端都调用 STOP 命令,否则服务器将关闭并返回控制, 以便我们用 C#编写的代码可以结束服务器的进程)。 这会导致服务器黑窗口的后台进程始终运行、独木舟完成服务器打开、将运行到最后一次卡住、无法生成案例运行结果报告、我们无法在目标类运行后调用 STOP 命令、 由于服务器已关闭、客户端断开、目标 停止、无法接收独木舟上的信号、我们无法通过接收到的信号进行其他判断和操作。 我们目前可以考虑的方法是:执行单独打开服务器的步骤、手动启动服务器、然后使用独木舟完成剩余步骤: 连接、下载、运行和其他操作在本例中、这些命令将在 执行后返回控制、因此可以关闭黑色窗口、独木舟成功运行本例、您可以看到目标板发送的信号、 然后手动关闭服务器黑窗口、直到 完成所有操作、但这不符合自动测试、仍需要手动参与。 在过去两天里、我一直在调试这个测试环境、我想问您是否有任何方法可以自动打开服务器而不让独木舟冻结? 我们真的需要您的帮助、非常感谢您!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4398211 #4398211"]但我们用于检测目标板发送的信号的软件显示仍有信号被发送、这些信号由 ARM 内核发送、电流表上的电流显示0.20~0.21A (当两个内核运行时、电流为0.28~0.29A; 当 ARM 内核运行时、电流为0.20~0.21A;当两个内核停止并断开连接时、电流为0.17A)、因此我们怀疑 DISCONNECT () API 未成功断开两个内核、这似乎是另一个 API 错误。 [/报价]

    我建议您尝试对 IDE 可见性进行开发、如以下文章中所述:

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4390905#4390905

    这样、您就可以在脚本运行时"查看"IDE、并查看内核是否实际断开连接。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4398626 #4398626"]我们一直在使用您提供的 API 来编写脚本以链接独木舟和 Vteststudio [/quot]

    我知道 这些工具很少、因此很遗憾、我无法为这种集成工作提供大量支持。 抱歉。

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

    好的、如果我遇到有关 CCS 的其他问题、我稍后会向您咨询、感谢您在此期间的帮助!

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

       您好,我查看 TestServe 方法的 TestServe.js 代码,了解如果我 执行“STOP”命令,目标将断开连接,会话 将终止,然后伺服将关闭。 这意味着、如果我想继续执行其他命令、我可以再次运行服务并连接目标。 我根据自己的理解进行了测试、我启动了服务、连接的目标、加载的程序、然后运行目标、目标成功运行。然后我执行了"stop"命令、让目标断开连接并关闭服务。等待一段时间、我再次启动 serev 以打开两个会话、执行"connect"命令、 执行回退告诉我目标连接成功、然后我尝试执行"halt"以停止程序、但执行的结果是"失败"和"目标已停止"。我对此结果感到困惑。我发现目标实际上通过调试而停止。为什么目标停止? 我没有执行"halt"命令。 我自己的理解是否错误? 两天前,我在 CCS IDE 上进行了测试,发现“连接”实际上无法停止内核发送消息,只执行“暂停”以停止程序,内核将停止发送消息。

       感谢您的回复。祝您一切顺利!

    Rui

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

    大家好,Ki,我今天尝试在脚本上调用 ReadData() API,我想读取一个名为"u8TimerMs"的静态全局变量,但出现错误:  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4404811 #4404811"]t 如果我 执行"stop"命令、目标将断开连接、会话 将终止、然后伺服将关闭。[/quot]

    当我查看 STOP 命令处理程序时、其外观如下:

    function stopCommandHandler(session, command) {
        /* This command is used to tell the session to stop taking connection from new clients.
           Any additional actions that needs to be done when a stop command is issued can be done here. */ 
        if (session.target.isConnected()) {
            try {
                session.target.disconnect();
            } catch (err) {
                return { "status": "FAIL", "message": "" + err};                  
            }
        }
        return { "status": "OK" };
    }

    基本上、所有这些都会断开目标。 它不会关闭调试会话。 这让我感到惊讶、因为我认为它确实会像您所怀疑的那样关闭调试会话。 调试会话实际上由 TestServer.js 中的关断功能关闭

    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4404811 #4404811"],我启动 serev 以再次打开两个会话,执行"connect"命令,执行回退会告诉我目标连接成功, 然后我尝试执行"halT"来停止程序、但执行的结果是"fail"和"the target is already halt"。我对此结果感到困惑。我发现目标实际上通过调试而停止。为什么目标停止? [/报价]

    调试器的默认行为是在目标连接时停止目标。  支持实时模式的 CPU 可配置为不会在连接时停止。 对于 AWR1843、R4不支持 C674x 所支持的实时模式。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4404869 #4404869"]我想读取一个名为"u8TimerM"的静态全局变量,但出现错误: 

    我只能评论  u8TimerM 必须在作用域中才能获取变量的地址。 您会希望全局变量始终在范围内。 您能否确认符号已加载?

    同样、要调试此类问题、我建议启用 IDE 可见性。 它会产生很大的影响。

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

       嗨、Ki、我知道您对 CCSIDE 的看法、我们已经尝试按照您在链接中给出的方式进行操作、 但我们无法通过 Rhino 调试器调用 CCSIDE、我们使用的是 CCS v11、根据链接的操作文档、当 Rhino 调试器打开 CCS 时、针对 DSS 当前使用的相同目标启动调试会话。 CCS 使用的*。ccxml 文件中指定的目标与 DSS 使用的*。ccxml 文件指定的目标相同、这一点很重要。" 我知道脚本中使用的*。ccxml 文件应该与我们本地 CCS 软件配置中的*。ccxml 文件一致、下载的程序文件也应该一致、对吧?  那么、Rhino 调试器可以在我们的计算机中调用 CCS 软件吗? 但 Rhino 调试器未打开我们的 CCS、我们的操作是否错误? 如何打开 CCSIDE、如果打开它、我认为它应该解决我们对 API 的大部分疑问。感谢您的慷慨!

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

    我创建了一个视频,介绍如何修改 testserver 示例以启用 IDE 可访问性。 请参阅随附的脚本

    e2e.ti.com/.../dss_5F00_testserver_5F00_ide.zip

    有关该视频的一些注意事项:

    请注意,rhino 调试器将在 test_server.js 打开。 我进入第17行的调用以打开 TestServer.js

    -在 TestServer.js 中、我在调用后立即添加了一个断点以打开 IDE。脚本在这里等待、直到 IDE 完全打开、这一点很重要。 在连接关闭之前、我还在第202行设置了一个断点。 这样,在从客户端脚本接收到所有命令后,testserver 脚本将停止运行-使 IDE 保持打开状态以进行进一步的调试分析。

    -到达第一个断点后、等待 CCS IDE 开始打开。 等待它完全打开、然后按视频中的"Go"按钮、让 scirpt 继续。 打开 rhino 控制台,等待调试会话完全启动,然后在控制台中测试服务器就绪,

    -运行客户端脚本,在执行命令时,您将看到 IDE 更新。 您可以在 Rhino 控制台中看到传入的命令。  

    -客户端脚本运行完成后、它将到达第二个断点并停止。 这将使您能够使用打开的 IDE 并调查任何问题

    我的视频运行测试服务器的基本示例。 您可以使用您的客户端脚本。

    希望这对您有所帮助

    Ki

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

    另一个提示:您可以在"while (line!= null)"循环中的某个位置设置断点、以停止每个命令的脚本以进行更多控制。 由你决定。

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

    哦、非常感谢! 我用您的帮助成功打开了 CCSIDE。它的功能太强大了,我可以清楚地知道脚本每个步骤的过程。上面提到的全局变量是由我的开发同事在代码中声明 并编译的, 我尝试在全局变量所在的.c 文件中添加一个断点、但无法成功添加、这促使我找不到相关的代码资源、这很奇怪、明天我会问开发同事。

     添加两个断点后,我尝试调用 runBenchmark() API,然后目标将运行到第一个断点,然后再次调用 runBenchmark(),我发现目标开始运行,然后仍然在第一个断点停止。  在我第三次调用 runBenchmark() API 之后,目标运行到第二个断点并返回时钟值。如果我没有通过 CCSIDE 检查脚本的进程,我将认为第二个调用 runBenchmark() API 返回的值是代码执行的时钟周期计数 但现在看起来不是、实际上、第三个调用返回的结果就是我确切需要的结果。 因此、我觉得脚本调用 API 获得的结果似乎不准确。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4409772 #4409772"]哦、非常感谢! 我在您的帮助下成功打开了 CCSIDE [/QUERT]

    很棒! 是的、这是一个非常有用的工具、可以调试脚本问题。

    [引用 userid="532634" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4409772 #4409772"]提示我找不到相关的代码资源,这很奇怪,明天我会问开发部门的同事。

    CCS 将使用可执行文件的相关路径查找源文件。 如果可执行文件从原始位置移动、则可能无法找到源文件、您必须告诉它源文件的位置。

    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4409772 #4409772"]然后我再次调用 runBenchmark(),我发现目标开始运行,然后仍然在第一个断点停止。 [/报价]

    那么、它会立即在第一次发生的相同位置停止吗?

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

    是的,  当我第二次叫 runBenchmark()时,它立即在第一次的同一个位置停止。 我认为它应该恰好位于第二个断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4410590 #4410590"]Yeah,当我  第二次调用 runBenchmark()时,它会立即在第一次出现的相同空隙处停止。 我认为它应该位于第二个断点处。

    这很奇怪。 对此我没有解释。 作为测试、请设置您的脚本、以便它仅运行到第一个断点、然后查看您是否在 IDE 中按"resume"、它是否更好。 否则我真的没有其他建议。

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

    好的、我看到了。 我在 CCS IDE 上找到了一个函数"load symbol"、但似乎我在 API 文档中找不到此 API。您是否知道哪个 API 与"load symbol"相关?谢谢

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

    很抱歉耽误你的回答。 我在度假一段时间,刚刚回来。

    [引用 userid="532634" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1135911/ccs-awr1843/4414298 #4414298]OK,我看到了。 我在 CCS IDE 上找到了一个函数"load symbol"、但我在 API 文档中似乎找不到此 API。您是否知道哪个 API 与"load symbol"?相关

    它是 symbol.load

    谢谢

    Ki