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.

[参考译文] TMS320F28379D:内存分配

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1352805/tms320f28379d-memory-allocation

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

您好!  

是否可以访问闪存并将它们与 RAMGS 组合在一起以形成一个内存块、这样我就可以如下所示写入一个包含26个变量(理想值)的数组? 每个变量包含2000个数据点。 我将所有 RAMGS 合并在一起、仍然需要更多空间。  

我已经将屏幕截图附加到了存储器分配中。

//定义结构
结构 Data_struct{

Float arrayVA[2000];//保存 VA 读数的阵列
float arrayVb[2000];//保存 Vb 读数的数组
float arrayVc[2000];//保存 Vc 读数的数组
Float arrayVn[2000];

Float arrayDCYA[2000];
Float arrayDCYb[2000];
Float arrayDCYc[2000];

Float arrayVaLP[2000];//用于保存 VaLP 读数的阵列
float arrayVbLP[2000];//保存 VbLP 读数的数组
float arrayVcLP[2000];//保存 VcLP 读数的数组
Float arrayVnLP[2000];

Float arrayIa[2000];
Float arrayIb[2000];
Float arrayIc[2000];

Float arrayVdc [2000];
Float arrayVnx[2000];

// float arrayId[2000];
//float arrayIq[2000];

//float arrayId_REF[2000];
//float arrayIq_REF[2000];

//float arrayVdSS[2000];
//float arrayVqSS[2000];
//float arrayV0SS[2000];


Float arrayPLL[2000];

//float arrayVd[2000];
//float arrayVq[2000];

//float arrayMPC_pll[500];

}数据;

此致

埃德温

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

    您好、Edwin:

    虽然编译器允许此操作、但不建议这样做。 RAM 和闪存以不同的频率运行、且具有不同的硬件、尝试将它们组合在一起以访问单个结构/变量/阵列 可能会产生时序问题、访问 过时数据 等。 更好的方法是在闪存中对整个结构进行编程、而不仅仅是其中的一部分。 应该在闪存扇区内有足够的空间来执行此操作。

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

    您好、Omer:  

    当我尝试对 FLASHI_M 进行分配时、它表示有一个 FLASHN 的 ovelap。  不确定是否操作正确

    此致

    埃德温

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

    我已成功使用 FLASHI_M、它的编译正常、但观察窗口中的所有变量都是 NaN、如附件所示

    FLASHI_M:origin = 0x0A8000、length = 0x0016000 /*片上闪存*/
    //FLASHJ:origin = 0x0B0000,length = 0x008000 /*片上闪存*/
    //FLASHK:origin = 0x0B8000,length = 0x002000 /*片上闪存*/
    //FLASHL:origin = 0x0BA000、length = 0x002000 /*片上闪存*/
    //FLASHM:origin = 0x0BC000、length = 0x002000 /*片上闪存*/

    此致

    埃德温

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

    您好、Edwin:

    当您在链接器命令文件中手动修改现有的闪存扇区时、看起来好像您在重叠扇区本身。 如果计划组合.text 等特定段的一组存储器、而不是组合 页本身中的存储器段、则应在各段中连接这些段:

    您只需手动 使用与现有段地址重叠的更多存储器。 如果您想要修改、您可以 进行修改、但还需要手动检查自己是否使用了正确的存储器范围:

    这个表格来自数据表、如果您计划继续使用定制内存部分、请参考它。

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

    您好、Omer:  

    在我连接 FLASHI 和 FLASHJ 时、会发生构建错误(如下所示)

    描述资源路径位置类型
    #10099-D 程序将无法放入可用内存中,或者该段包含的调用站点需要无法为该段生成 trampoline。 针对".ebss"大小0xddb5 page 1的段运行对齐/分块定位失败。 可用存储器范围:2837xD_FLASH_lnk_cpu1.cmd /NG_initial_V2.7_flash line 98 C/C++问题

    组合存储器、编译良好、但观察窗口中的变量全部为 NaN。  

    此致

    埃德温

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

    您好、Edwin:

    如果您使用闪存的默认链接器命令文件、则需要检查"Memory Allocation"窗口、以查看哪个段没有为其分配足够的存储器。 基于此、您可以向该部分添加更多"| FLASH"、直到适合为止。 "Memory Allocation"窗口将告诉您需要添加多少内容。

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

    您好、Omer:  

    无论我添加了多少个 trampoline 错误都将以 trampoline 错误结尾(请参阅下面的)。 这是数据结构中的16个变量

    如果我在16个变量上使用 RAMGS0_13、那么我能够进行编译且工作正常。

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

    构建项目后、能否发送"Memory Allocation"窗口的屏幕截图?

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

    您好、Omer:  

    请参阅下面的

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

    您好、Edwin:

    这不是 Memory Allocation 窗口、而是.map 文件。 我要查找的是以下窗口:

    您可以通过转至 View > Memory Allocation 打开此窗口。

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

    道歉。 请参阅下面的

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

    它看起来不像你在分配时有任何错误,我认为你在程序不适合内存之前得到了一个错误。 您是使用现有 C2000Ware 示例中的标准链接器命令文件、还是使用自定义/组合的段制作自己的文件? 到目前为止、只要您使用的是连续的有效存储器范围、似乎不会出现任何问题。

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

    您好、Omer:  

    我正在使用标准链接器命令文件。 这些文件来自现有项目、我只想添加额外的变量。

    如果我遵循您提供的建议或存储器重叠、会出现 trampolining 问题

    我认为我们已经完成了一个完整的圆、没有解决问题、所以我可以附加一个压缩文件吗?

    此致

    埃德温  

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

    尊敬的 Edwin:

    您可以尝试、但如果除了您最初提到的错误之外还有其他构建错误、我将无法提供更多帮助。

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

    您好、Omer:  

    没有其他生成错误。 一切运行正常。 一直到我尝试从使用 RAMGS 切换到.ebss 的闪存时为止

    e2e.ti.com/.../3583.NG_5F00_Initial_5F00_V2.7_5F00_FLASH_5F00_Master.zip

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

    您好、Omer:  

    请查看随附的文件。 我注意到 FLASHI 有一个错误、但仍然存在 trampolining 问题

    e2e.ti.com/.../8171.NG_5F00_Initial_5F00_V2.7_5F00_FLASH_5F00_Master.zip

    此致

    埃德温

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

    您好、Edwin:

    我修复了一些构建错误、并将 F2837xD 的 C2000Ware 中的 empty_driverlib_project 示例中的链接器命令文件替换成了其中一个、并设法看到了内存分配问题:

    看起来堆栈和.ebss (全局变量)段无法分配足够的内存。 为什么您有价值56K 的全局变量? 这些寄存器可能需要分配给闪存(使用"#pragma DATA_SECTION"预处理器指令)。 在运行时、您将从需要存在的引导文件中向堆栈分配什么内容? 堆栈没有理由出现这个问题、您可能需要重新检查 在这个项目中使用的内存大小、这不是我必须自行判断的、尽管这里指出的错误是一个有效的问题。

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

    感谢 Omer。

    将坚持 RAMGS 并根据 我的情况最大限度地发挥它的能力。

    不是原始作者,因此我不能评论为什么有这么多全局变量。

    感谢你的帮助。

    此致

    埃德温