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/TMS320F28379D:在 cmd 文件中配置内存分配显示和内存分配。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/961290/ccs-tms320f28379d-memory-allocation-display-and-memory-allocation-configured-in-cmd-file

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

尊敬的 TI 您好、

我对存储器分配有疑问、

我正在使用我的全部内存 RAMGS1到 RAMGS13来编译我的项目、但是当我打开内存分配时、我的大部分内存都是空的!

下面是内存分配和 cmd 文件的捕捉。

我将存储器空间设置为4、因为我使用的是 FreeRTOS 项目、而在 portmacro.h 文件中、我具有以下内容:

#define portBYTE_alignment   4.  

您是否有一个表面化的 cmd 文件、其中所有段都有一个段用于 RAMGS 和 RAMLS?  

提前感谢您的澄清、

S.Tarik

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

    您好!

    看起来 ebss 段足够小、可以安装在 LS5和 GS0中。 其他 GSRAM 中没有分配变量、因此您会看到它们为空。

    如果需要、您可以将它们组合在一起并将其作为单个存储器块。

    例如、

    RAMGS0:origin = 0x00C000、length = 0x001000
    RAMGS1:origin = 0x00D000、length = 0x001000

    这可以组合为单个块

    RAMGS01:origin = 0x00C000,length = 0x002000

    只要地址是连续的、就可以组合 n 个 RAM。

    默认情况下、我们将它们保留为单独的存储器块、以防应用程序希望将它们用于不同的用途。

    此致、

    Veena

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

    Veena、

    感谢您的回答、

    我在.cmd 文件中解决了我的问题、  

    我还有另外一个问题:

    我正在使用 FreeRTOS、PC 在执行 portasm.asm 中的_portRESTORE_FIRST_Context 后跳转到中断 void ILLEGAL_ISR (void)。

    _portRESTORE_FIRST_CONTEXT
    ;从新任务控制块恢复堆栈指针。
    MOVL XAR0、#_pxCurrentTCB
    MOVL XAR0、*XAR0
    MOVL XAR0、*XAR0
    MOV @SP、AR0

    ;从保存的任务堆栈恢复 XAR4和 RPC。
    ;并返回主任务函数。
    ; SP 应该被设置为堆栈启动加 LRETR 之前的2。
    SubB SP、#28
    弹出 XAR4
    SubB SP、#14
    弹出 RPC
    SubB SP、#10
    LRETR

    我不太熟悉 TI 汇编代码、但如果您能帮我、我可以深入了解详情。

    我使用 TMS320f28379D 启动 XL 进行测试、

    我修改了 cmd 文件、您可以在工程中找到它、无需链接任何内容、所有资源都在工程中。

    在进行此修改之前、RTOS 运行良好。

    提前感谢您、

    S.Tarik  

    univcadiayyad-my.sharepoint.com/.../EeO_RCHXm6xDlJ6KQtT5mcsBVOcDf7YCL03T66XUCLjRQQ

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

    尊敬的 S.Tarik:

    因此、该问题发生在您更新 cmd 文件后。 对吗?

    能否在 LRETR 指令之前检查 RPC 寄存器的值? 这将保存第一个任务的地址。

    此致、

    Veena

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

    您好、Veena、

    Veena Kamath 说:
    SO,问题发生在您更新 cmd 文件后。 是这样吗?[/引述]

    是的、

    RPC = 0x0 befor LRETR!

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

    尊敬的 S.Tarik:

    您的任务堆栈未按预期更新。

    我希望这是在 CPU1一侧。 GSRAM 在 CPU1和 CPU2之间共享、我相信所有 GSRAM 的所有权都已正确分配。 默认情况下、GSRAM 由 CPU1拥有。

    此致、

    Veena  

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

    [引用 user="Veena Kamath"]您的任务堆栈似乎未按预期更新。

    Venna、

    您如何假设这是堆栈问题?

    我将.ESS 部分从 GSRAM 更改为 LSRAM、看起来效果不错。 一个段不足以容纳、我连接了许多 LSRAM 以进行正确编译、并且运行良好。

    我只激活了 CPU1、我可以理解为什么无法使用 GSRAM?

    谢谢

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

    您好!

    任务堆栈通常包含 任务的返回地址、任务恢复例程将使用该地址。  

    我不知道为什么在 GSRAM 中分配它们不起作用。 您能否创建全局变量、分配给 GSRAM、在 main 中初始化变量并检查您是否可以在存储器中看到该值?

    此外、如果未完成、请将 GSRAM 所有权配置为 CPU1。  

    此致。

    Veena

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

    您好!

    在过去几周里,我没有听到您的声音,因此我假设您能够解决您的问题。 如果情况并非如此,请拒绝此解决方案并回复此主题。 如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

    新年快乐!

    此致、

    Veena

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

    您好、Veena、

    我必须将 LSRAM 用于.ESS 变量、它运行良好、

    很抱歉、延迟重放、我不知道为什么这不能使用 GSRAM

    谢谢你