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.
我正在尝试将 C2000项目(TMS320C28345)从 CCS4和 DSP/BIOS 更新到 CCS10和 SYS/BIOS。
我的项目在硬件上构建并加载,然后出现断点(我没有设置)。 我理解消息中的内容,但需要更改哪些内容才能解决此类错误?
请注意,此项目的.cfg 文件中包含以下内容,并且不使用 malloc:
Defaults.common$.memoryPolicy = types.static_policy;//应用程序将在配置文件中创建所有对象(或此模块的所有对象)。
使用以下工具版本:
CCS 版本:10.4.0.00006
TI C2000 v20.2.5.LTS
SYS/BIOS 6.83.0.18
sysconfig 1.9.0
XDCtools 3.62.1.15_core
如果能就如何解决这一问题提出任何建议,将不胜感激。 谢谢你。
这不是 sysconfig 问题 ,请要求重新分配此问题。 此外,此设备没有基于软件产品的支持(超过 PinMux)。
您好,
您能否分享您尝试在 CCS 中运行的示例? 您是否还能提供从中获取软件的软件包?
请提供 CCS 环境的工具链版本,该示例最后一次被确认起作用。 谢谢
此致,
奥兹诺
Ozino 您好,
不幸的是,这是一个自定义程序,而不是一个示例。 我知道这将使诊断变得更加困难,但如果对这些错误或导致错误的原因做出任何解释,我将不胜感激。
它上次编译并运行 CCS 4.2.4.00033,以及其中包含的工具。 (看起来是 DSP/BIOS 5.41.10.36)我遵循了迁移指南并进行了许多更改,以使其能够在上面列出的新工具中进行编译。
谢谢你。
您好,Nathan,
请向我们发送测试用例,以便我们可以在此处重复此问题。 这将帮助我们加快解决您遇到的问题。
谢谢,
克利须那
很抱歉,我无法共享软件。
在尝试解决这些错误时,我应该考虑哪些方面? 什么原因导致它读数超过内存的末尾?
内森
好的,我理解...我们尝试取得一些进展,但如果我们无法重复您的问题,我们就无法将其分配给合适的专业知识来帮助解决问题。 如果我们无法在任何地方执行后续步骤,我们仍可能要求您创建该项目的简化版本并与我们共享。
因此,请先关闭所有打开的内存,变量视图和寄存器窗口。 您仍有问题吗?
谢谢,
克利须那
关闭所有变量和内存状态窗口后,该行为似乎没有改变。 它会遇到断点,即使手动恢复,也似乎无法正常运行。
当它到达断点时,它在哪里? 在您的代码中? 在 SYS/BIOS 代码中? 如果您查看“拆卸”窗口,它是否位于 ESTOP0?
在您的屏幕截图中,CCS 中的“变量”视图或“表达式”视图是吗? 它们是否是局部变量? 如果您查看.map 文件,您是否看到任何函数或变量被放置在奇怪的无效地址上?
惠特尼
1 00017b3b _ti_sysbios_family_c28_Hwi_interruptReturn__I 1 00017b3c ___default_new_handler__Fv 1 00017b3d __system_post_cinit 1 003f7ff8 _CsmPwl abs 00000001 _xdc_rov_runtime_Mon__checksum abs 00000001 _xdc_rov_runtime_Mon__write abs 00000001 _xdc_runtime_Startup__EXECFXN__C abs 00000001 _xdc_runtime_Startup__RESETFXN__C abs 000007fe __STACK_SIZE abs ffffffff .text abs ffffffff ___TI_pprof_out_hndl abs ffffffff ___TI_prof_data_size abs ffffffff ___TI_prof_data_start abs ffffffff ___binit__ abs ffffffff ___c_args__ abs ffffffff ___etext__ abs ffffffff ___text__ abs ffffffff binit abs ffffffff etext
感谢您提供更多信息。 根据调试器的设置,CCS 可以在加载应用程序后尝试在 main()的开头放置断点。 这不是 main()的起点吗?
由于这些是局部变量,它们应该只是堆栈中的变量。 您的堆栈是否同样奇怪地放置在.map 文件中,或者是否位于正常地址? 链接程序命令文件在哪里放置.text? 您是否收到任何链接程序警告?
惠特尼
嗨,Whitney,
早上好,谢谢你回来。
.stack 1 00000002 000007fe UNINITIALIZED 00000002 000007fe --HOLE--
我将整个 M01SARAM 块分配给堆栈。 我不知道为什么它被列为从00002开始。 在我的.cfg 中,我将其设置为:“program.stack = 0x7fe”,我认为这是整个 SARAM 块的正确大小。
.text : >> L03SARAM | L47SARAM PAGE = 1
这是否有明显的错误?
从 CCS 的调试角度看,您可以转到“工具”->“调试器选项”->“自动运行”和“启动选项”,您将看到“自动运行”选项,您可以在其中配置 CCS 以自动运行到 main()的开头,并在某些事件上停止。 “程序/内存加载选项”部分中还有一些其他停止选项。
堆栈位置正常。 我怀疑 M01SARAM 开头的2个词是代码开始分支,它位于 SARAM 引导入口点,用于分支到应用程序。
在 cmd 文件中,您的.text 位置也很好,尽管地图文件中存在奇怪的问题,但这似乎是您的代码在屏幕截图中的执行位置--我假设0x131e4在 L47SARAM 中。
惠特尼
嗨,Whitney,
感谢您的解释,因此断点似乎并不重要。
即使我恢复或更改选项,代码也无法正常工作。 有时,当我暂停时,我可以在变量窗口中看到相同类型的“读取内存结束”错误。 本地变量(类型:unsigned int)的溢出堆栈的原因是什么? 堆栈是否已满?
您可以在 Core Registers (核心寄存器)下的 Registers (寄存器)视图中查看 SP 的值,以查看其是否已被损坏。 它只是一个16位的寄存器,所以无论其中的值是什么,它都不会像表达式窗口中显示的这些变量的地址。
您是否在编译器设置中启用了优化功能?
让我与 CCS 团队的其他人联系,看看他们是否能在变量视图中指出导致此类错误的原因...
惠特尼
如果我在随机点暂停执行,SP 通常等于0xE5B2 (尽管有时是更低,更合理的值),该值是否意味着什么?
当前优化已关闭。 你为什么要问?
感谢你的帮助。
我忘记了这是一个 SYS/BIOS 项目——我认为任务堆栈可能位于与系统堆栈不同的位置,这可能解释了为什么您看到 的是 M0/M1 RAM 以外的地址。 当您停止代码并且 SP 在0xE5B2范围内时,代码是否在任务上下文中执行? 我想,如果您在.map 文件中查找“taskStackSection”,以查看该位置是否有效。
您能否打开 ROV 并查看它是否报告任何错误?
我一直在问优化问题,因为有时变量会被优化,并且不会出现在表达式视图中,但我认为这在变量视图中并不相关。
您能否详细说明应用程序本身运行不正常的情况? 在 BIOS_START()之后,它是否开始成功执行您的黄禹锡和任务? 它会崩溃吗? 我同意 CCS 中的“变量”视图有一些奇怪的地方,但代码的行为方式可能有一些其他的线索,可以引导我们找到解决方案。
惠特尼
我过去曾看到过类似的问题:
第一个听起来更相关,也是最近的。 如果我不得不猜测,可能是由于某些配置问题而导致某种类型的内存损坏。 如果没有测试案例,很难确定。 我知道您无法按现状共享现有项目。 但是,是否可以将其删除,以便您可以共享它? 我只需要一个非常简单的拆卸测试用例,它可以重现错误。 没有更多了。
.ebss 1 00008000 00005ad8 UNINITIALIZED 00008000 00002403 {PROJECT}_p28FP.o28FP (.ebss:taskStackSection) 0000a403 00000001 rts2800_fpu32.lib : defs.c.obj (.ebss)
我仍在尝试了解软件的哪些部分正在运行,以及软件为何不响应命令。 据我所知,它不会崩溃。 它可能卡在 信号灯代码中。
请改用 ROV Classic。 这里有一些有关 ROV 的常见问题,可能会解释为什么它不起作用: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/859586/faq-what-is-the-rov-runtime-object-viewer
惠特尼
感谢您指出这一点。 现在我要揭示许多错误。
启动时,我收到一个事件,并在“任务”中看到异常
运行大约20秒后,ROV 在 BIOS 下突然出现了大量错误信息-扫描错误
这些错误中的一个看起来像是核心问题,还是我应该调查的第一个问题?
好的,如果 CCS 不能填充“变量”窗口,ROV 也无法正确显示任何内容就不足为奇了。 请继续尝试使用断点,并通过单一步进代码,尝试缩小问题范围。
内存浏览器工作正常吗? 如果是这样,我们至少可以通过这种方式检查堆栈溢出。 使用内存浏览器中的内存填充功能将模式(0x5a5a5a5a 或某些内容)写入堆栈,然后运行应用程序一段时间,以查看该模式是否完全擦除,或者它是否处于适当的堆栈内存范围内。
有时,您可能希望从其中一个示例或模板创建一个新的 SYS/BIOS 项目,并尽可能地从该项目中慢慢地复制代码。 这可能是确定哪个模块导致问题破裂的好方法...
惠特尼
当我使用内存浏览器观看堆栈时,我看到以下进度。 它似乎没有写入可用内存的末尾。 它确实输入了大量的“牛肉”。
开始:
运行10秒后:
此外,我现在看到 HeapBuf 出错了
对于没有动态分配/堆的系统中的 DSP/BIOS BUF,这是否不是正确的替换类? 它在.cfg 文件中定义为全局变量。
我同意这不像是堆栈溢出,但这有点奇怪。 不确定所有的海因来自何处。 我在 SYS/BIOS 中找不到任何使用0xBEEF 值进行任何操作的代码。
诚然,我不是很熟悉 DSP/BIOS,但我确实找到 了这本移植指南 ,它似乎证实了 HeapBuf 是一个合适的替代产品。
惠特尼