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/AM4377:运行时观察表达式窗口

Guru**** 2531310 points
Other Parts Discussed in Thread: AM4377, AM4378

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/569874/ccs-am4377-observing-expressions-window-while-running

部件号:AM4377
主题中讨论的其他部件: AM4378

工具/软件:Code Composer Studio

您好,

我想询问有关在处理器运行时为“表达式”窗口分配的全局变量的实时更新。 我使用的是使用AM4377 Sitara (基于EVM)的自定义板。过去我使用的是TMSF2.8069万M,即使系统正在运行(即使没有启用实时模式),您仍可以通过表达式窗口与全局变量进行交互。 在AM4377上使用此功能的唯一方法是在“调试配置”选项中启用“在调试器访问之前停止目标”。 我也不必使用TMSF2.8069万M来执行此操作。 如果我不这样做,表达式窗口将显示错误“无法读取0x8.0059万B14:执行状态阻止访问”。

我知道,在AM4377的新主板上,所有符号/变量都存在于外部DDR2 (从0x800万开始)中。 这是为什么我需要使用 “在调试器访问之前停止目标”选项与全局数据进行实时交互吗? 如果我对代码进行了修改,以便将这些变量加载到内部片上RAM中,这是否允许我获得所需的调试功能? 我真的需要这种功能,而且对设备上运行的代码的影响很小,所以要调试实时控制应用程序,我们的主通信接口还没有准备好,所以我们只能与系统外部交互。

谢谢,

VT

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

    请查看下面的简短快速提示,查看它是否满足您的需求:
    https://youtu.be/-yGmq_VKvTQ

    希望这能有所帮助,
    拉斐尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Rafael:

    哈! 我从AM437x.ld和AM437x.cmd脚本中识别您。

    感谢您的指针。 我不知道DAP可以做到这一点。 因此,如果可以使用内存浏览器,是否有任何方法可以将DAP与表达式窗口一起使用,以便我可以监视变量或结构,而不必查看和解释各个内存位置?

    谢谢,

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

    您突出显示了DAP的一个缺点:由于它是绕过核心的直接访问,因此调试信息在此上下文中不可用。

    尽管如此,内存视图并不是DAP中唯一可以看到的视图;您也可以打开表达式视图。 但是,我找不到显示阵列的方法-您需要使用内存浏览器来显示阵列。

    要简化操作,您可以单击"打开新视图"按钮打开多个内存浏览器视图。

    这将帮助您使用不同的视图来监视不同的阵列。 请记住,“内存浏览器”视图的大小会影响传输的数据量,也就是说,如果您正在监视几个字节,但视图显示数十个字节,IDE将强制传输所有数据以更新视图, 即使它们没有改变。

    希望这能有所帮助,
    拉斐尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    感谢您的快速回复。

    最后一个问题。 是否可以为DAP_DebugSS目标使用任何Gel表达式/脚本,以便将内存区域映射到符号等,以便在表达式窗口中查看?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    最后一个问题。 是否可以为DAP_DebugSS目标使用任何GEL表达式/脚本,以便将内存区域映射到符号等,以便在“表达式”窗口中查看?

    可以 在DAP的GEL脚本中使用GEL_SymbolLoad -请参阅 https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/41.3892万 (引用的线程适用于Cortex-R设备,但认为它仍然适用于Cortex-A设备)

    另请注意,DAP视图与处理器视图不一致,请参见 https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/46.6987万

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

    您好,Chester,

    感谢提示!

    我刚尝试过,现在使用DAP_DebugSS目标时,所有符号都可以识别。 遗憾的是,缓存一致性问题似乎阻止了值的实际更新。  

    您建议如何解决此问题? 是禁用高速缓存,仅用于调试模式/构建工作,还是会终止所有SYS/BIOS代码? 是否有方法正确配置此配置?

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

    您建议如何解决此问题? 如果缓存在SYS/BIOS ->目标特定支持->缓存-模块设置下被禁用,是否禁用缓存?

    是否会终止所有SYS/BIOS代码?尝试AM4378的修改后的SYS/BIOS示例,如果缓存在SYS/BIOS ->目标特定支持->缓存-模块设置下被禁用,程序仍在运行, DAP的持续刷新显示计数器的更新。 但是,全局禁用高速缓存会降低程序执行速度。 [我没有尝试测量由于全局禁用缓存而导致的速度减慢对性能的影响]。

    是否有办法正确配置?

    如果您只想在程序运行时从DAP视图监视特定数量变量的更新,一个选项是修改程序,在 程序更新后对变量调用Cache_WB()。  cache_wb()强制将基本高速缓存行从处理器高速缓存回写到内存,这样DAP视图就可以看到更新。 这允许处理器高速缓存保持启用状态。 我的测试程序中的一个示例,该示例使高速缓存保持启用状态,并允许DAP视图查看clk0_ticks变量的更新:

    #include <ti/SysBIOS/family/arm/A9/cache.h>
    
    volatile UINT32 clk0_ticks;
    
    void clk0Fxn (UArg arg0)
    {
    UINT32时间;
    
    时间= Clock_getTicks();
    clk0_ticks =时间;
    cache_WB ((PTR)&clk0_ticks, sizeof (clk0_ticks),0, false);
    } 

     如果您需要从DAP视图修改内存并进行Cortex-A9所看到的更改,我认为您需要使用不可缓存 的区域。