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:将 CLA 代码从 RAM 移植到闪存

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164533/tms320f28379d-porting-cla-code-from-ram-to-flash

器件型号:TMS320F28379D

您好!

我当前项目需要 CLA。

首先、我从 RAM 运行了 IIR2P2Z 项目。 没有主要问题(必须从运行菜单加载符号)。

现在、我已经将完整的 IIR2P2Z 代码复制到了从闪存运行的非常轻量级的项目中。

但是、IIR2P2Z 函数"void CLA_RunTest (void)"不会完成。 它卡在任务8 上、蓝色调试箭头在第一行停止。 这是奇怪的、因为这个 CLA 任务中没有调试指令:

//任务8将初始化任务1中使用的变量

中断空 Cla1Task8 (空)

W2[0]= 1;W2[1]= 2;
W1[0]= 1;W1[1]= 2;
}  

MIRUN 寄存器中的相应位设置为1、这意味着任务8仍在运行。 CLA 外设时钟被启用。

空 CLA_RunTest (空)

int16_t i;
float fError[NUM_SAMESSALESS];

Cla1ForceTask8andWait();  <--- 卡在这里 ---
WAITSTEP;

for (i=0;i < NUM_SAples;i++)

xn = fAdcInput[i];

Cla1ForceTask1andWait();
WAITSTEP;

fBiquadOutput[i]= yn;

fError[i]= fabs (iir_Expected [i]-fBiquadOutput[i]);

if (fError[i]< 0.01)

pass ++;

其他

FAIL++;

我是否遗漏了什么?

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

    您是否能使 CLA 代码被复制到 配置为 CLA 程序存储器的 LSRAM 中?

    此致、

    Veena

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

    链接器文件出现问题。

    1) 1) 现在我使用 LS0作为数据存储器位置、使用 LS4作为 CLA 的程序存储器位置。 不再有其他代码/数据。

    //
    //选择 LS4RAM 作为 CLA 的编程空间
    //首先将 CLA 配置为 LS5的主器件,然后再配置
    //将空间设置为程序块
    //
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

    //
    //接下来将 LS0RAM 配置为 CLA 的数据空间
    //首先将 CLA 配置为 LS0 (1)的主器件、然后
    //将空格设置为代码块
    //
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;

    2)必须将此代码添加到我的链接器文件(联机找到)。

    //如果使用、用户必须在项目链接器设置中定义 CLA_C
    // CLA C 编译器
    //项目属性-> C2000链接器->高级选项->命令文件
    //预处理->--define
    #ifdef CLA_C
    //为将要使用的 CLA 暂存区定义大小
    //由 CLA 编译器生成局部符号和 temps
    //还强制引用标记的特殊符号
    //暂存区是。
    CLA_ScratchPad_size = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif

    /* CLA 特定部分*/
    Cla1Prog:load = FLASHD,
    运行= RAMLS4、
    load_start (_Cla1funcsLoadStart)、
    load_end (_Cla1funcsLoadEnd)、
    run_start (_Cla1funcsRunStart)、
    load_size (_Cla1funcsLoadSize)、
    PAGE = 0、ALIGN (4)

    /* ClaData:> RAMLS0,PAGE=0,ALIGN=2*/
    CLADataLS0:> RAMLS0,PAGE=1,ALIGN=2

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
    CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.

    #ifdef CLA_C
    /* CLA C 编译器段*/
    //
    //必须被分配给 CLA 具有写入访问权限的内存
    //
    CLAscratch:
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS0、PAGE = 1

    暂存区:>RAMLS0,页=1
    .bss_cla:> RAMLS0,PAGE = 1.
    .const_CLA:负载= FLASHB、
    运行= RAMLS0、
    run_start (_Cla1ConstRunStart)、
    Load_start (_Cla1ConstLoadStart)、
    load_size (_Cla1ConstLoadSize)、
    PAGE = 1.
    #endif //cla_C

    您能否给我指出一个讨论便笺本的文档? 我搜索了 spruhm8h、但找不到任何相关信息。

    谢谢、

    Tomas

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

    https://www.ti.com/lit/ug/spru513w/spru513w.pdf

    这应该包含有关暂存区部分的详细信息

    此致、

    Veena

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

    谢谢你。

    另一个问题-请您向我指出一些文献、这些文献解释了为什么不建议对 CLA 和 CPU 使用相同的存储器块进行读取和写入-如下所示。  如果 CPU/CLA 组合尝试同时访问同一存储器块、这会导致不正确的行为还是只会导致读取/写入延迟?  

    存储器部分

    CPU

    CLA

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

    您可以将 LSRAM 配置为 CLA 数据存储器- CPU 和 CLA 都对该存储器具有读写访问权限。

    使用此类共享存储器没有限制。 由于两个内核都具有读写访问权限、因此应用需要避免 冲突、例如两个内核同时写入同一地址

    此致、

    Veena