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.

[参考译文] TMS320C28345:"尝试读取内存结尾处的内容..."

Guru**** 633810 points
Other Parts Discussed in Thread: TMS320C28345, SYSCONFIG, SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067847/tms320c28345-attempted-to-read-past-the-end-of-memory-at

部件号:TMS320C28345
在“线程 :sysconfigtestSysBIOS”中讨论的其它部分

我正在尝试将 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 文件,您是否看到任何函数或变量被放置在奇怪的无效地址上?

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 断点似乎出现在我的代码中。
    • 当在“调试”窗口中选择了“sys_manager.cpp:540 0x0131E4中的 main()”时,屏幕截图中的错误来自“变量”窗口。
    • 这是选择相同项目时拆卸窗口显示的内容:
    • 列出的变量都是同一文件中的局部变量。
    • 在快速查看.map 文件时,结尾看起来有点奇怪,比如.text 没有找到地址?

    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,

    早上好,谢谢你回来。

    • 是的,既然你提到了它,那么断点看起来就在主句的开头。
      • 如何禁用该断点?
    • 堆栈在.map 文件的“分区分配映射”部分中列出,如下所示:

    .stack     1    00000002    000007fe     UNINITIALIZED
    
                      00000002    000007fe     --HOLE--

     

    我将整个 M01SARAM 块分配给堆栈。 我不知道为什么它被列为从00002开始。 在我的.cfg 中,我将其设置为:“program.stack = 0x7fe”,我认为这是整个 SARAM 块的正确大小。

    • 我将.text 设置为在 LSRAM 中拆分:

    .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 中的“变量”视图有一些奇怪的地方,但代码的行为方式可能有一些其他的线索,可以引导我们找到解决方案。

    惠特尼

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

    我过去曾看到过类似的问题:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067914/tms320f28379d-debug-error-attempted-to-read-past-the-end-of-memory-at-0xfffffffffffffffe-data/

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/918298/ccs-tms320f28388d-debug-error-attempted-to-read-past-the-end-of-memory-at-0xfffffffffffffffe-data/

    第一个听起来更相关,也是最近的。 如果我不得不猜测,可能是由于某些配置问题而导致某种类型的内存损坏。 如果没有测试案例,很难确定。 我知道您无法按现状共享现有项目。 但是,是否可以将其删除,以便您可以共享它? 我只需要一个非常简单的拆卸测试用例,它可以重现错误。 没有更多了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 是的,它似乎位于任务上下文中,例如在 SysBIOS 信号类中。
    • 此处显示在.map 文件中:

    	.ebss      1    00008000    00005ad8     UNINITIALIZED
    	                    00008000    00002403     {PROJECT}_p28FP.o28FP (.ebss:taskStackSection)
                            0000a403    00000001     rts2800_fpu32.lib : defs.c.obj (.ebss)

    • ROV 失败,出现了我不理解的错误。
      •  错误:无法使用'comm=DSLite:0,wsPort=60236':InternalError:找不到方法 xdc.rta.Formatter.setOFReader(org.mozilla.javascript.Undefined 启动 ROV)。 (C:/ti/Ccs1040/xdctools_3_62_01_15_core/packages /XDC/ROV/Model.xs#315)

     

    我仍在尝试了解软件的哪些部分正在运行,以及软件为何不响应命令。 据我所知,它不会崩溃。 它可能卡在 信号灯代码中。

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

    请改用 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 是一个合适的替代产品。

    惠特尼