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.

[参考译文] EK-TM4C1294XL:尽管可用的 SRAM 要多得多、堆容量在2K+时失败

Guru**** 2470720 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/678113/ek-tm4c1294xl-heap-size-fails-at-2k-despite-much-more-sram-available

器件型号:EK-TM4C1294XL

大家好、我正在尝试使用 EK-TM4C1294XL 上的堆。  我将使用 CCS 8.0进行开发。  将堆设置为2048字节并调用 new()可以正常工作。  但是,一旦我达到2368个字节以上,那么当 malloc()在 memory.c 中调用 minit()时,new()就会将我抛入 FaultISR()  我不确定原因、但我猜是因为总数据非常接近64K。

"模块摘要"中的总计:

代码:54945 RO 数据: 2727  RW 数据:5837 = 63、509  

加 BSS:464字节

但是、我认为这个电路板上有256K 的 SRAM。  有人知道为什么我被限制在64K?

 

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

    尊敬的 Terence:

     您是否第一次尝试将堆大小增加到所需的大小?

    在下面的帖子中、Chester 建议了另一种保留其余 RAM 以减小堆大小的方法、您可能会认为这种方法很有用。

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

    查尔斯您好-感谢您的回复。  我对您的问题/评论的答复:

    [引用用户="Charles Tsaa"]

     您是否第一次尝试将堆大小增加到所需的大小?

    [/报价]

    是的、这正是我设置堆大小的方式。  我的问题是,小于2368字节或小于2368字节的任何内容都可以正常工作,并且2432字节或更多字节会在使用 new()时导致故障。  是的、我需要超过2、432字节的动态内存分配...  更多(如64K)会更好。

    [引用用户="Charles Tsaa"]

    在下面的帖子中、Chester 建议了另一种保留其余 RAM 以减小堆大小的方法、您可能会认为这种方法很有用。

    [/报价]

    很有趣  我现在正在看这个  

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

    [引用 user="Terence D">是的、这正是我设置堆大小的方式。  我的问题是,小于2368字节或小于2368字节的任何内容都可以正常工作,并且2432字节或更多字节会在使用 new()时导致故障。  是的、我需要超过2、432字节的动态内存分配...  更多(如64K)会更好。以下为 EK-TM4C1294XL 附加的 C++程序使用 Compiler/DK-TM4C129X 中的自动堆大小调整:是否有办法最大化堆大小?

    这是一个使用 TI ARM 编译器 v18.1.1的最小程序,在该程序中,调试器用于查看可由 new()分配的最大分配。 它不断调用大小不断增加的 new(),直到出现故障。

    链接器为 堆分配了261608个字节、而 new()分配的最大 值为261596个字节。

    e2e.ti.com/.../TM4C129_5F00_max_5F00_heap_5F00_size.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Chester。 非常有帮助。 一个问题:在为编译器提供--heap_size 选项时,有什么想法,为什么这不是编译器的默认行为?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Terence D">一个问题:在为编译器提供-heap_size 选项时、为什么这不是默认行为?[/quot]我不知道-heap_size 选项背后的历史记录。 目前、堆大小的分配分布在:

    a)运行时库中的 memory.c 源文件、该文件需要一个特殊段.sysmem 和链接器符号 __SYSMEM_size 来表示堆的基址和大小。

    b)链接 器、创建由--heap_size 选项指定大小的.sysmem 段、并将__SYSMEM_size 符号设置为堆大小。

    c)特定于器件的链接器命令文件、该文件必须将.sysmem 段放置在合适的可写存储器区域中。

    CodeGen-4635已提出增强请求、但尚不知道 a)、b)或 c)中的哪一项将会更改、但不会破坏与现有项目的向后兼容性。