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.

[参考译文] LAUNCHXL-F28P55X:复位后的奇怪值不正确

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1534455/launchxl-f28p55x-incorrect-strange-value-after-reset

器件型号:LAUNCHXL-F28P55X


工具/软件:

我正在关注 dual_axis_servo_drive 指南。

“编译完成时、点击 Debug(调试)按钮、重置 CPU、重新启动、启用实时模式、然后运行。“

执行这些步骤后、变量具有这个奇怪的值:

它并不总是会发生、但经常发生。

问题是什么?

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

    很抱歉晚才回复。 这是因为某些函数是库的一部分、因此 CCS 无法访问源代码。 希望您的代码能够按预期运行。

    Vivek Singh

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

    您好, 感谢您的答复。

    我注意到、如果我停用“启用礼貌实时模式“选项、则不会再出现奇怪的值。

    我不确定您谈论的是什么指令和库、但我正在尝试您在 dual_axis_servo_drive 中提供的代码、我没有修改/创建任何内容

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

    您好、

    我不确定您谈论的是什么指令和库、但我正在尝试您在 dual_axis_servo_drive 中提供的代码、我没有修改/创建任何内容

    我们的示例代码中使用了许多预编译的库。 就像这个延迟函数一样、当您在该函数中暂停时、它会进行预编译、因为没有可用于此目的的源代码、所以它会发出此警告。  

    Vivek Singh

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

    谢谢你。

    那么我应该如何解决这个问题呢?

    到目前为止,我发现的唯一的“解决方案“是禁用“礼貌的实时模式“...我不知道为什么或它的功能是什么..

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

    让我将其推荐给我们的 CCS 团队、看看他们是否有任何建议。  

    Vivek Singh

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

    以下是一些与礼貌实时模式相关的信息-

    • 启用实时模式后、默认为礼貌实时模式
    • 在礼貌模式下、调试器将在应用程序处理时间关键型中断时防止目标停止
    • 如果在为时间关键型中断提供服务时调试器访问需要停止目标、则会询问用户是否应启用粗鲁的实时模式
    • 在粗鲁模式下、无论处理器是否正在执行时间关键型 ISR、都会立即处理停止请求
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我假设受影响的变量为浮点值。 如果是、这看起来与以下主题中提到的问题密切相关:

     TMS320F280049C:CCS 表达式窗口的值错误 

    通过查看 f28p55x.gel 文件、我可以看到访问大小为 2 的几乎所有存储器范围。

    请参阅此相关票证: https://sir.ext.ti.com/jira/browse/EXT_EP-10722

    请注意、此行: 为 AS2 而不是 AS4 配置了存储器映射。 可以更改 C2000 GEL 文件以使用 AS4 解决此问题。  

    AS2 会强制调试器进行两次 16 位访问、以获取 32 位浮点值的值。 启用实时模式时、该值处于“介于“状态。 正如 Darian 在他的帖子中提到的:

    之所以会发生这种情况、是因为调试器未以原子方式读取两个字、因此、如果在两次读取之间发生写入、该值将是两个不正确值中的一个。

    谢谢

    Ki

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

    如果我设置:

    激活实时调试我收到以下错误:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我激活了实时调试我得到这个错误:

    启用该选项会干扰实时访问。

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

    感谢您的答复。

    我不明白 我必须遵循的程序。

    调试时、按“Run"并“并激活表达式中的持续刷新? (..所以没有可激活的实时选项)

    别无他物?

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

    请注意、“在任何调试器访问之前暂停目标“属于侵入式 — 它将在每次存储器访问时暂停目标。 因此、如果在启用了该选项的情况下启用了连续刷新、则每次刷新的目标都会持续停止。 这会极大地影响实时性能。

    正确实时访问的权变措施是我在上面的评论

    内存映射是为 AS2 而不是 AS4 配置的。 可以更改 C2000 GEL 文件以使用 AS4 来解决此问题。

    在 f28p55x.gel 文件中、该文件可能被您的器件使用。

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

    我应该修改以下 3 项中的哪一项?

    (只有照片中选择的 C28xx_CPU1 包含带下划线的.gel 文件。 另外两个字段为空)

    如何修改?

    我从来没有做过这些事情,我不想弄错什么

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

    完成 F28x CPU 的处理。 一个包含实际 GEL 文件的 GUI

    如何修改它?

    它是一个文本文件。 您可以在编辑器中打开并将相关内存区域的 AS2 替换为 AS4:

    例如、假设我要为“LS0 RAM for Data“页更改它。

    在 f28p55x.gel 的第 371 行上(适用于 CCS 12.8-1)

    更改:

      GEL_MapAddStr (0x00008000、1、0x800、“R|W| AS2. “、0);/*  LS0 RAM(带奇偶校验)(4KB)              */

    最终目的  

      GEL_MapAddStr (0x00008000、1、0x800、“R|W| AS4. “、0);/*  LS0 RAM(带奇偶校验)(4KB)              */

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

    最后一个问题、该文件位于 PC 上的什么位置?

    我在到处寻找它,但我找不到它,顺便说一下,窗口不是很'好'在系统中搜索文件

    在.gel 文件中、我不知道我可以/应该将什么从 AS2 更改为 AS4 ...所以我可以在任何地方用 AS4 替换 AS2 吗? 还是我需要注意一些事情?

    感谢您发送编修。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最后一个问题是该文件位于 PC 上的哪个位置?

    它应位于:

    \ccs\ccs_base\emulation\gel\f28p55x.gel

    在.gel 文件中、我不知道我可以/应该从 AS2 更改为 AS4 的内容...所以我可以在任何地方用 AS4 替换 AS2 吗? 或者我必须注意一些事情吗?

    我想您可以全部更改。 但我想从您分配相关变量的存储器区域的范围开始(您应该能够在“Expressions"视“视图视图中看到变量的地址)

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

    你(们)好

    我在.gel 文件 AS2 中到处都替换为 AS4、但问题(奇怪的值)仍然存在

    如果您想对工程和.gel 文件进行检查、请附加该工程和.gel 文件

    e2e.ti.com/.../dual_5F00_axis_5F00_servo_5F00_drive_5F00_fcl_5F00_qep_5F00_f28p55x.rar

    e2e.ti.com/.../f28p55x.gel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ]如果要检查工程和.gel 文件
    、我附上该工程

    我看了看随附的 GEL 文件。 我看不到任何使用 AS4 调用的 GEL_MapAddStr 实例。 这是全部 AS2。

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

    我重新下载了我在上一个帖子/回复中附加的文件,我看到 AS4 无处不在:

    我使用 Visual Studio 进行了修改

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

    哦,你是对的,我的错! 我最初查看的是错误的文件。 是的、文件看起来很好。

    您能解释一下“奇怪“的价值吗? 您看到特定变量的值是多少?预期值是多少?

    如果在“Expressions"视“视图中禁用 Continuous refresh 并在 CPU 停止时查看变量、则该值始终正确?

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

    在表达式视图中禁用持续刷新 ,当 CPU 停止时。“当构建完成时,我点击调试按钮,重置 CPU ,重新启动,启用实时模式,然后运行..  变量如下:

    对我来说,他们似乎不正确。

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

    您是否仍能回答:

    预期值是多少?

    谢谢

    Ki

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

    我应该有所有的变态到零

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

    谢谢。 我将进一步研究这一点。 这是一个当地的假期,所以我将需要看看这个明天。  

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

    好吧、没问题。

    谢谢!

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

    很抱歉耽误你的时间。 我现在已拥有器件、稍后会查看这种情况。

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

    我会尝试刷写和运行您的程序。 运行时、我在“Expressions"视“视图中添加了一些表达式、并启用持续刷新。

    我看到:

    这看起来更像您所期望的吗? 您正在使用哪个确切的 CCS 版本? 我曾使用过 CCS 12.8.1。

    另请注意、您的工程已启用最大优化。 优化可以极大地影响源级调试。

    谢谢

    Ki

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

    在屏幕截图中、我看到“enable silicon real time“和“polite real-time mode“选项未启用。

    变量的奇怪值只有在我启用“ 礼貌实时模式 “、无论调试器的优化程度如何(我尝试过重置它,但没有任何变化)。 您能尝试调试并激活该选项并共享屏幕截图吗?

    总之,如果我尝试遵循 pdf 指南中的内容“当构建完成时,我单击调试按钮,重置 CPU ,重新启动,启用实时模式,并运行“,这些变量将正确显示,只有当我禁用“ 礼貌实时模式 “。

    我借此机会询问您应该使用哪种级别的优化?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在您的屏幕截图中、我看到“启用 silicon real time“和“礼貌实时模式“选项未启用。

    是的、我尝试启用它、我注意到只有在程序加载后从一开始启用实时模式和持续刷新时、我才发现这个问题很短暂。 请观看下面的视频、看看从 0:43 - 0:46 的时间:

    e2e.ti.com/.../realtime_5F00_f28p55.mp4

    它短暂显示 3 秒内的奇怪值。 然后它得到正确的刷新,我再也看不到它。 我不知道为什么在这 3 秒内会发生这种情况。 可能只是在进行更新?

    然而,我相信你声称,奇怪的价值总是保留。

    我在 CCS 20.2.0 中尝试了这种方法、但根本看不到奇怪的值。 您可以尝试使用 CCS 20.2.0 吗?

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

    没错、奇怪的值仍然存在、并且不会刷新。

    我正在使用 usando CCS 12.8.1.00005

    但是、如果我通过不激活“启用礼貌实时模式“选项来解决问题、程序的“功能“会丢失什么?

    (...因为通过停用它,问题就会消失)

    如果这样一个选项是“mandomy/required",“,则、则我将尝试使用 CCS 20.2.0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但如果我通过不激活“启用礼貌实时模式“选项来解决问题、程序的“功能“会丢失什么?

    有关更多详细信息、请参阅用户指南的以下部分:

    https://software-dl.ti.com/ccs/esd/documents/users_guide_ccs/ccs_debug-main.html#real-time-mode

    对于 F28x、启用显式实时模式即使目标已停止、也可以处理指定的中断。  

    无论实时模式设置如何、实时存储器/寄存器访问始终处于启用状态。

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

    如果我理解正确、到目前为止、由于问题仍然存在、我们尚未找到 CCS 12.8.1 的解决方案。

    可以通过禁用“礼貌实时模式“来避免这种情况 、即调试器不尊重 DBGM:如果 CPU 位于敏感区域、则调试器在访问之前不会等待它离开该区域

    在实践中,这对我来说也不是很清楚从指南的这个选项,我想一个实际的例子,显示该选项是活动的,而不是...我将尝试搜索更多..

    我还将尝试使用 CCS 20.2

     

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、如果我理解正确、到目前为止、由于问题仍然存在、我们尚未找到 CCS 12.8.1 的解决方案。

    如果我们无法重现此问题、则很难对此进行故障排除。 另一个问题是、CCS Eclipse 环境(CCS 12.x 所基于的环境)在支持方面已被大幅弃用。 CCS 12.x 中发现的任何错误都不会得到修复。

    禁用“礼貌实时模式“可以避免这种情况、即 调试器不尊重 DBGM:如果 CPU 位于敏感区域、则调试器在访问
    之前不会等待它离开该区域

    我*认为*当进行实时内存访问时, CCS 现在将始终尊重 DBGM — 即使禁用了实时模式也是如此。 我需要确认这一点。

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

    好的、谢谢。

    现在 、由于未激活“启用礼貌实时模式“选项、程序似乎工作正常、因此我认为我将在继续操作之前继续操作

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我*认为*当进行实时存储器访问时、CCS 现在将始终尊重 DBGM、即使禁用了实时模式也是如此。 我需要确认此信息。

    我看了看,发现事实恰恰相反。 如果未显式启用极线实时模式、则默认情况下所有实时存储器访问都是粗鲁的。  

    对礼貌与粗鲁之间的区别有更深入的解释:

    实时应用程序设置各种位来指示应用程序是否位于临界区。  在礼貌实时模式下、如果这些位表明目标在临界区中、调试器将检查这些位、而不访问目标。  如果是、调试器将继续等待它离开该段、最终将超时。  在粗鲁模式下、无论如何、调试器都会进行访问。  请注意、无论哪种情况、访问都会使处理器有效地暂停几个周期、因此它的侵入性远低于常规停止模式(在常规停止模式下,会暂停目标来进行访问)、但如果目标处于非常关键的部分、这几个周期可能很重要。  如果未启用实时模式、则所有访问都是粗鲁的。