工具/软件:
我正在关注 dual_axis_servo_drive 指南。
“编译完成时、点击 Debug(调试)按钮、重置 CPU、重新启动、启用实时模式、然后运行。“
执行这些步骤后、变量具有这个奇怪的值:

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

问题是什么?
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.
工具/软件:
我正在关注 dual_axis_servo_drive 指南。
“编译完成时、点击 Debug(调试)按钮、重置 CPU、重新启动、启用实时模式、然后运行。“
执行这些步骤后、变量具有这个奇怪的值:

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

问题是什么?
我假设受影响的变量为浮点值。 如果是、这看起来与以下主题中提到的问题密切相关:
通过查看 f28p55x.gel 文件、我可以看到访问大小为 2 的几乎所有存储器范围。
请参阅此相关票证: https://sir.ext.ti.com/jira/browse/EXT_EP-10722
请注意、此行: 为 AS2 而不是 AS4 配置了存储器映射。 可以更改 C2000 GEL 文件以使用 AS4 解决此问题。
AS2 会强制调试器进行两次 16 位访问、以获取 32 位浮点值的值。 启用实时模式时、该值处于“介于“状态。 正如 Darian 在他的帖子中提到的:
之所以会发生这种情况、是因为调试器未以原子方式读取两个字、因此、如果在两次读取之间发生写入、该值将是两个不正确值中的一个。
谢谢
Ki
请注意、“在任何调试器访问之前暂停目标“属于侵入式 — 它将在每次存储器访问时暂停目标。 因此、如果在启用了该选项的情况下启用了连续刷新、则每次刷新的目标都会持续停止。 这会极大地影响实时性能。
正确实时访问的权变措施是我在上面的评论
内存映射是为 AS2 而不是 AS4 配置的。 可以更改 C2000 GEL 文件以使用 AS4 来解决此问题。
在 f28p55x.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 上的哪个位置?
它应位于:
\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
在屏幕截图中、我看到“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 吗?
但如果我通过不激活“启用礼貌实时模式“选项来解决问题、程序的“功能“会丢失什么?
有关更多详细信息、请参阅用户指南的以下部分:
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、即使禁用了实时模式也是如此。 我需要确认此信息。
我看了看,发现事实恰恰相反。 如果未显式启用极线实时模式、则默认情况下所有实时存储器访问都是粗鲁的。
对礼貌与粗鲁之间的区别有更深入的解释:
实时应用程序设置各种位来指示应用程序是否位于临界区。 在礼貌实时模式下、如果这些位表明目标在临界区中、调试器将检查这些位、而不访问目标。 如果是、调试器将继续等待它离开该段、最终将超时。 在粗鲁模式下、无论如何、调试器都会进行访问。 请注意、无论哪种情况、访问都会使处理器有效地暂停几个周期、因此它的侵入性远低于常规停止模式(在常规停止模式下,会暂停目标来进行访问)、但如果目标处于非常关键的部分、这几个周期可能很重要。 如果未启用实时模式、则所有访问都是粗鲁的。