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/RM48L952:使用整数数组卡在 dabort.asm 中

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/595149/ccs-rm48l952-getting-stuck-in-dabort-asm-with-integer-arrays

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

工具/软件:Code Composer Studio

您好!

我有一个程序、其中包含5个整数数组、每个数组的长度为64。  这运行正常。  如果我将这些代码的大小增加到128或256、当我运行调试时、代码会在 dabort.asm 中挂起-我认为这是某种堆栈溢出例程。  建议我进入"properties"->"ARM linker"->"basic options"并增加堆栈的大小、但这不会产生任何影响。  相同的代码在另一个 ARMCortex 处理器(Actel)上运行、因此我猜我需要在 CCS 编译器中执行一些操作来启用更多的存储器、或者将数组映射到 RAM 而不是本地寄存器?  是否需要启用 RAM 的头文件?

我将使用最新的 CCS 和 HalCoGen。

一点帮助?

感谢你能抽出时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我应该使用 sys_core.h 吗? 我将浏览 HalCoGen 帮助文件、寻找答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Bailey、

    最可能发生的情况是、您正在过度运行堆栈区域、因为这些数组被定义为静态或全局数组、因此它们放置在堆栈上。 若要解决此问题、可以在链接器命令文件(sys_lnk.cmd)中增大栈大小。 您需要调整文件顶部的.stack 段的大小。 请确保相应地减小 RAM 大小。 下面是您要更改的链接器命令文件中的行。

    您还需要更新 sys_core.asm 以更新用户堆栈指针(userSP)的初始化指针。 摘录如下:

    然后、应该有足够的空间让您的数组被压入堆栈、而不会使其溢出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复。 是否有方法可以声明数组、以便将它们自动分配给 RAM? 例如、使用 malloc 或 calloc?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、但我对这一点理解有点困难。  我获得的部分内容是更改 RAM 和堆栈空间的相对大小、但不是指针。  userSp 是否指向用户堆栈的顶部?  我是否还需要将指针提升到其他5个堆栈?

    谢谢

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

    是的、这是用于初始化指向栈空间顶部的指针的代码、是的、您还需要相对于新调整的用户栈指针的位置调整其他栈指针。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bailey、

    在您的原始实现中查看映射文件也可能是值得的、以查看这些数组的放置位置、这将确认我们是否采用增加堆栈空间的方法走在正确的轨道上。 如果这些数组用于多个函数的上下文、而不仅仅是用于一个函数的范围、则可能还需要将它们声明为静态数。 此外、您是否会在函数之间将这些数组作为参数传递? 如果是、您是直接传递还是仅通过引用传递? 直接通过也会导致堆栈承受过多的负担。