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/TMS320F28335:*程序不能装入可用内存

Guru**** 2535750 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/600837/ccs-tms320f28335-program-will-not-fit-into-available-memory

器件型号:TMS320F28335
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

你好

我正在尝试对该 DSP 进行编程、以便为6开关三相电压源逆变器生成 PWM 信号-该位不是很重要、因为我已经弄清楚了如何操作。 我希望能够通过 USB 连接使用 printf 和 stdio.h 库中的其他函数等来发送和读取信息 但是、当我包含 stdio.h 并在 int main 中调用 printf 时、会出现以下错误:

"C:/ti/C2000Ware_1_00_00_00_Software/device_support/f2833x/common/cmd/28335_RAM_lnk.cmd "、第162行:错误:
程序将不能放入可用的内存中。 使用运行放置
".stack"大小为0x400第1页"的对齐/分块失败。

我正在使用 C2000Ware 中"Example_2833xEPwmDeadBand"项目示例的修改版本。 我尝试了优化级别和更改堆栈大小、但似乎什么都不起作用。 我看到一个关于不同 DSP 的类似问题的线程、建议将链接器 cmd 文件更改为一个、按照我的理解、将程序加载到闪存而不是 RAM 中、但我找不到与我的 DSP 等效的文件。

感谢您花时间阅读。

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

    约书亚、您好!

    如果您希望使用 闪存链接器命令文件、 它与 RAM 链接器命令文件位于同一目录中。 文件名为 F28335.cmd。  您是否尝试 扩展.stack 的内存分配? 如果不是尝试、请将.stack 行替换为以下代码行:

    .stack          :>> RAMM1 | RAML4,    PAGE = 1

    如果仍然没有足够的空间、请尝试扩展到 RAML5。 尝试一下、看看这是否会解决您看到的错误。

    此致、

    Ozino

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

    您好 Ozino

    非常感谢您的回复。 我非常感谢。

    我尝试将链接器文件更改为闪存链接器文件、简而言之、它可以正常工作。 但我有几件事不关心。 将.stack 行保留为:".stack:>RAMM1 PAGE = 1"会导致相同的错误。 将其更改为您建议的值、允许程序成功构建并上载到 DSP。 但是、我收到以下警告(以及其他警告)、表示我不确定:

    ".stack"忽略"拆分放置(>>):针对此操作拆分运行放置
    部分是不允许的
    .stack:>> RAMM1 | RAML4,PAGE = 1"

    这使我感到困惑、因为"不允许"的事情显然解决了阻止它建造的错误。 因此、我很难理解它现在是如何成功编译的。 您能不能简单说明一下它为什么会这样做?

    再次感谢您迄今提供的帮助。

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

    约书亚、您好!

    很高兴您现在可以使用它。 因此、某些段必须在存储器中保持连续、并且不能拆分。 这意味着它在内存中只能有一个连续块。  此类段之一是.stack 段。 为了克服这一问题、您需要创建一个组合的 Ramm 段、.stack 可以使用该段、或者让它将存储器分配给任一区域、而不是拆分存储器区域。

    因此、我会尝试将拆分 (>>)切换到单个(>)、看看警告是否被删除。

    如果此操作不起作用、则需要将连续的 Ramm 段组合到更大的存储器中、然后将.stack 放在那里。

    此 wiki 页面详细介绍了分配存储器: http://processors.wiki.ti.com/index.php/Linker_Command_File_Primer#Allocate_to_Multiple_Memory_Ranges

    此 wiki 显示了可用于 为段分配更多可用内存的不同选项:

    http://processors.wiki.ti.com/index.php/C28x_Compiler_-_Understanding_Linking#Q:_The_linker_says_.22placement_fails_for_object_.27.text.27_.22._How_can_I_make_more_memory_available_for_.text.3F

    希望这对您有所帮助。

    此致、

    Ozino

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

    感谢您再次回复。 这回答了我的问题、并删除了警告、链接非常有用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约书亚、您好!

    很高兴您能够解决您的问题。

    此致、

    Ozino