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.

[参考译文] TMS320F28375D:CLA1的本地存储器组合

Guru**** 2439710 points
Other Parts Discussed in Thread: TMS320F28375D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/916134/tms320f28375d-local-memory-combination-for-cla1

器件型号:TMS320F28375D

我们的产品使用 TMS320F28375D DSP。

在本产品的固件中、我们将 CLA 用于控制环路。
为此、我们使用了三个本地存储器、分别是用于 CLA 程序的 RAMLS2、RAMLS3和 RAMLS4
以及用于 CLA RAM 存储器的 RAMLS0和 RAMLS1。
在我们的程序中、我们已将这3个本地 RAM 合并到"2837x_flash_lnk_cpu1.cmd"文件中的 RAMLS2中、如下所示。

RAMLS0:origin = 0x008000、length = 0x001000
//RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x001800
//RAMLS3:origin = 0x009800,length = 0x001000
//RAMLS4:origin = 0x00A000,length = 0x000800

现在、我们已将 CLA 的2个函数分配给 RAM、如下所示。

#pragma CODE_SECTION (Cla1Task2、"Cla1Prog");//用于此函数的内存为2480字节
#pragma CODE_SECTION (calc_PR_CLA、"Cla1Prog");//用于此函数的存储器为2430字节

现在、我们在一个特定代码行中开发了"calc_PR_cla"故障的函数。如果我们删除该行并将其放置在同一函数的单独位置、它就可以正常工作。
这可能是由于与存储器相关的问题、因为函数的存储器大于任何单个本地存储器(例如 RAMLS2 = 2048字节)
是否可以在固件中组合本地存储器?

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

    您好!

    可以组合 LSRAM、更新链接器命令文件的方式看起来正确。 您需要确保所有这些 LRAM 都分配给 CLA。

    如果您使用的是 driverlib、则 MemCfg_setLSRAMMasterSel 是设置 LS RAM (CPU 或 CLA)所有者的函数、MemCfg_setCLAMemType 是将存储器配置为数据/程序的函数。

    如果将 LS2、LS3、LS4组合为 LS2、则需要为这些 LS RAM 中的每个调用这些函数。 你已经完成了吗?

    此致、
    Veena

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

    您好、Veena、

    感谢您的回复、


    以下是在固件中完成的设置、

    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;//RAMLS2
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1;//RAMLS3
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;//RAMLS4
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;//RAMLS0
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;//RAMLS1
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;

    仍然是我们在同一特定代码行中开发的"calc_PR_CLA"故障功能。 如果我们删除该行并将其放在同一函数的单独位置、它确实起作用。 如上一帖子中所述、此函数消耗的是2430字节的存储器。
    下面是地图文件的突出显示部分、供您参考、

    0 00009000 _Cla1funcsRunStart
    0 00009000 _calc_PR_CLA
    0 0000997c _Cla1Task2
    0 0000a2bc _d死 区时间_gen
    0 0000a2f0 _Cla1Task1
    0 0000a2f8 _Cla1Task3
    0 0000a300 _Cla1Task4
    0 0000a308 _Cla1Task5
    0 0000a310 _Cla1Task6
    0 0000a318 _Cla1Task7
    0 0000a320 _Cla1Task8
    如果您在上面的映射文件中看到、您可以看到_calc_PR_CLA 函数的起始地址是 RAMLS2的起始地址、因为该函数大于2048字节、它会重叠并写入 RAMLS3中。 那么、这是否会在执行期间给程序计数器带来问题。(我们已经将 RAMLS2、RAMLS3和 RAMLS4组合在一起)。
    或者、这种类型的故障可能是什么原因、我们如何进行故障排除?

    此致、

    Dushyant

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

    您好 Dushyant、

    对延迟答复表示歉意。

    我无法重现此问题。 我在 CLA 任务中添加了一些虚拟指令、并使函数大小大于0xA00。 我将 LS2和 LS3合并为一个段、也将这两个 RAM 配置为 CLA 程序存储器。

    任务按预期运行、从 LS2移动到 LS3时未看到任何不同的行为。

    您能否向我们提供有关您所面临的错误的更多信息? 如果可能、请共享代码、以便我们可以在结尾重现问题

    此致、

    Veena

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

    尊敬的 Veena:
    感谢您的支持、

    根据您的请求、我无法向您发送我的产品代码、因为它违反了我的公司政策、
    但我在 rar 文件夹中附加了 CLA 源文件和头文件、内存分配文件和映射文件供您参考。

    以下是在固件中完成的设置、仅供您参考、

    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;//RAMLS2
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1;//RAMLS3
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;//RAMLS4
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;//RAMLS0
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;

    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;//RAMLS1
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;


    在第276行的 CLA 源文件中:"total_Y = total_Y + CPU_and_CLA.Y_pr[8].yn0;"代码发生故障。

    此致、

    Dushyant Rana

    e2e.ti.com/.../6562.query_2D00_cla.rar

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

    您好 Dushyant、

    出于某种原因、我无法提取 rar 内容。 是否可以重新发送?

    执行该行时观察到什么? 内核是否正在复位? 是否未执行指令提取? 是否未进行寄存器/存储器访问? 内核是否返回与总和不同的值?

    此致、

    Veena

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

    尊敬的 Veena:

    请查找附加的文件。

    我们观察到的问题看起来是  、没有执行指令取指令、或者可能没有发生内存访问。

    请务必尽快查看此问题、因为我们长时间处于此问题中。

    此致、

    Dushyant Ranae2e.ti.com/.../CLA_5F00_Query.rar

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

    尊敬的 Amtech:

    当 Veena 尝试在我们的本地设置中重现此问题时、我从您的解释中了解到、如果您更改这些函数的位置、那么它可以正常工作、因此可能需要多次迭代。 您能帮助回答以下问题吗-

    • 发生故障时 - 此代码的地址位置是多少(total_Y = total_Y + cpu_and_cla.Y_pr[8].yn0)
    • 通过时- 此代码的地址位置是多少(total_Y = total_Y + cpu_and_cla.Y_pr[8].yn0)

    所有 RAM 块都是相同的、因此不可能出现取指令问题。 变量被覆盖 、从而无法按预期工作、这是否是个问题? 您是否在通过和失败的情况下都检查了变量的值?

    此致、

    Vivek Singh

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

     您好 Dushyant、

    您使用的是哪个编译器版本? 如果不是最新版本、您可以切换到最新的编译器吗?

    我包含了您在我的示例 C28x 项目中共享的 CLA 文件、并运行了代码。 我还在.cla 文件中添加了以下定义、因为它缺失:

    struct cla_vARS cla_vars;
    结构 CPU_CLA CPU_AND_CLA;

    uint32_t total_R、total_Y、total_B;

    由于我没有使用有效值填充结构、因此我在 加法之前更新了变量 TOTAL_Y 和 CPU_AND_CLA.Y_pr[8].yn0、并  使用正确的值更新变量 TOTAL_Y。

    此致、

    Veena

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

    尊敬的先生:

    请查找随附的 zip 文件夹。

    在此 zip 文件中有两个文件夹、一个文件夹包含 CLA1函数的汇编文件和源文件、这会导致故障、另一个文件夹包含汇编文件和源文件、该文件运行正常。

    失败时 - 此代码的地址位置(TOTAL_Y = TOTAL_Y + CPU_AND_CLA.Y_pr[8].yn0)为"0094e0"

    通过时- 此代码的地址位置(TOTAL_Y = TOTAL_Y + CPU_AND_CLA.Y_pr[8].yn0)为"0094fe"  

    我使用的编译器是"TI v18.1.0.LTS "。

    此致、

    Dushyant Rana

    e2e.ti.com/.../Disambly_2D00_Files.rar

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

     您好 Dushyant、

    对延迟答复表示歉意。 我们无法重现此问题。 我们检查了您共享的反汇编文件、但无法找出失败的任何原因。

    您是否仍面临此问题?

    此致、

    Veena

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

    尊敬的女士:

    我们已将本地 RAM 分配重新配置为 CLA。 这样做之后、我们没有任何问题。

    但是、如果使用之前的本地 RAM 配置、代码仍然失败。 因此、我想在使用 CLA 时、本地存储器配置存在一些问题。

    谢谢、此致、

    Dushyant Rana

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

    您好 Dushyant、

    我不确定是否正确。 为了使 CLA 使用 LSRAM、必须将 LSRAM 的所有权设置为 CLA、并且需要将 LSRAM 配置为程序存储器。 我相信您已经配置了这个。

    您添加了哪些更改来使其正常工作?

    此致、

    Veena

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

    尊敬的女士:

    请查找附加的文件。 附加文件中有两个文件夹、每个文件夹包含固件中使用的 LSRAM 分配设置和 CLA 设置、还包含编译代码的.map 文件。 这些文件夹被归类为失败意味着固件在此设置下失败、而工作意味着固件正常。

    谢谢、此致、

    Dushyant Ranae2e.ti.com/.../Config_2D00_Files.rar

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

    谢谢 Dushyant。

    我无法找到组合 LSRAM 不工作的任何原因、并且将段映射到单个 LSRAM 工作正常。

    从技术上讲,两者都不应产生任何影响。

    如果我明白原因、我将与专家进行核实、并与您联系。 目前、我建议您使用单个 LRAM 来分配 CLA 程序存储器。

    此致、

    Veena