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:看起来 CLA 不会#39;t 解码汇编操作码[???]

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/588757/ccs-tms320f28379d-it-looks-like-cla-doesn-t-decode-assembly-opcode

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

工具/软件:Code Composer Studio

你(们)好。

我刚刚打开了一个类似的帖子[我在执行 CLA C 代码时有一些行为问题]但是我相信、由于某种奇怪的原因、我在汇编语言中翻译的 CLA C 代码不会对相对操作码进行解码。 我之所以进行此断言、是因为只有 Task1设置为运行时、我的简单代码上的 CLA 汇编步骤执行存在奇怪的行为:我设置 Cla1Regs.MIER = 0x0001、 并且我的测试中只有一个 Cla1ForceTask1andWait()函数。 尽管存在配置、但汇编步进代码仍会超逾 Cla1Task1()函数和 MCP 交叉 Cl1Task2()所拥有的最后 MSTOP iassembly。

请、是否有人向我解释这种奇怪的 CLA 行为。 我不知道如何使用辅助 CPU 以及如何调试这种情况。 是否有方法检查流水线解码[D2]步骤? 在调试寄存器窗口中,我无法更改 MRx CLA 寄存器:这是正常的吗?

非常感谢您的帮助。

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

    您好!

    是为 CLA 所有权配置的 RAMLSx 段中的代码段"Cla1Prog"

    MemCfgRegs.LSxMSEL.bit.MSEL_LS? = 1;
    
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS? = 1; 

    如果 CLA 代码的某些部分位于 CLA 不拥有的 RAM 段中、当单步执行 CLA 代码时、您将会看到奇怪的行为(过度运行 MSTOP 就是这种示例之一)。  

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

    为清楚起见、我记得我的代码与 control_suite 中存在的 CLA_logic_cpu01类似。

    无论如何、我会根据您的建议检查我的代码。 我的 TI 2837xD_RAM_CLA_lnk_CPU1.cmd 文件以以下方式出现:

    #ifdef CLA_C

    CLA_ScratchPad_size = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif //cla_C

    存储器

    第0页:
    /* begin 用于"引导至 SARAM"引导加载程序模式*/

    开始:origin = 0x000000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMD1 :origin = 0x00B800,length = 0x000800
    // RAMLS4:origin = 0x00A000、length = 0x000800
    // RAMLS5 :origin = 0x00A800,length = 0x000800
    RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    复位:origin = 0x3FFFC0,length = 0x000002

    第1页:

    BOOT_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将此用于堆栈*/
    RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */

    RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000、length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800

    RAMGS0 :origin = 0x00C000、length = 0x001000
    RAMGS1 :origin = 0x00D000、length = 0x001000
    RAMGS2 :origin = 0x00E000、length = 0x001000
    RAMGS3 :origin = 0x00F000、length = 0x001000
    RAMGS4. :origin = 0x010000,length = 0x001000
    RAMGS5. :origin = 0x011000,length = 0x001000
    RAMGS6 :origin = 0x012000,length = 0x001000
    RAMGS7 :origin = 0x013000、length = 0x001000
    RAMGS8. :origin = 0x014000、length = 0x001000
    RAMGS9. :origin = 0x015000,length = 0x001000
    RAMGS10 :origin = 0x016000,length = 0x001000
    RAMGS11. :origin = 0x017000、length = 0x001000
    RAMGS12. :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS13. :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    RAMGS15 :origin = 0x01B000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *

    CANA_MSG_RAM :origin = 0x049000、length = 0x000800
    CANB_MSG_RAM :origin = 0x04B000、length = 0x000800

    CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
    CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080


    部分

    codestart :>开始, PAGE = 0
    .TI.ramfunc:> RAMM0,PAGE = 0// 2017年4月添加的部分
    .text :>> RAMD0|RAMD1|RAMLS4_LS5,PAGE = 0
    //.text :>> RAMD0|RAMD1|RAMLS4,PAGE = 0
    //.text :>> RAMD0|RAMD1|RAMLS5,page = 0
    .cinit :> RAMM0, PAGE = 0
    .pinit :> RAMM0, PAGE = 0
    切换 :> RAMM0, PAGE = 0
    复位 :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/

    堆栈 :> RAMM1, PAGE = 1.
    ebss :> RAMLS2,PAGE = 1
    .econst :> RAMLS3,页= 1
    等斯梅姆 :> RAMLS3,页= 1
    filter_RegsFile:> RAMGS0,PAGE = 1

    /* CLA 特定部分*/
    Cla1Prog :> RAMLS4_LS5,PAGE=0
    // Cla1Prog :> RAMLS4,PAGE=0
    // Cla1Prog :> RAMLS5,PAGE=0

    CLADataLS0:>RAMLS0,PAGE=1
    // CLA1DataLS0:> RAMLS0,PAGE=1
    CLADataLS1:> RAMLS1,PAGE=1
    // CLA1DataLS1:> RAMLS1,page=1
    CLA1mathTables:> RAMLS1,PAGE=1 // 2017年4月添加的部分

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

    /*以下部分定义适用于 SDFM 示例*/
    filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}>RAMM0, PAGE = 0
    其他
    ramfuncs:>RAMM0 PAGE = 0
    #endif
    #endif

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

    暂存区 :> RAMLS1、 PAGE = 1.
    .bss_cla:> RAMLS1、 PAGE = 1.
    .const_cla:> RAMLS1、 PAGE = 1.
    #endif //cla_C


    您可以看到、Cla1Prog 是在联合 LS4_LS5本地共享 RAM 中分配的。 在 main 的一部分中、我放置以下代码:

    (笑声)
    Dint;// DB -它只出现在 InitPieCtrl()中;

    // 7) CLA MEM +任务设置
    Cla1Regs.MIER all = 0;
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.CLA1 = 1;
    EDIS;
    CLA_configClaMemory();
    cla_initCpu1Cla1();
    (笑声)

    其中函数为:

    空 CLA_configClaMemory (空)

    extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;
    EALLOW;

    #ifdef _flash
    memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、
    (uint32_t)和 Cla1funcsLoadSize);
    #endif //_FLASH

    //初始化并等待 CLA1ToCPUMsgRAM [第604页 TMR]
    MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};

    //初始化并等待 CPUToCLA1MsgRAM
    MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};

    // MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

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

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

    EDIS;


    void CLA_initCpu1Cla1 (void)


    EALLOW;
    Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1);
    Cla1Regs.MVECT2 =(uint16_t)(&Cla1Task2);
    Cla1Regs.MVECT3 =(uint16_t)(&Cla1Task3);
    Cla1Regs.MVECT4 =(uint16_t)(&Cla1Task4);
    Cla1Regs.MVECT5 =(uint16_t)(&Cla1Task5);
    Cla1Regs.MVECT6 =(uint16_t)(&Cla1Task6);
    Cla1Regs.MVECT7 =(uint16_t)(&Cla1Task7);
    Cla1Regs.MVECT8 =(uint16_t)(&Cla1Task8);

    Cla1Regs.MCTL.bit.IACKE = 1;
    // Cla1Regs.MIER all = 0x00FF;
    Cla1Regs.MIER all = 0x0001;

    //为所有的任务结束中断配置向量
    // 8个任务
    PieVectTable.CLA1_1_INT =&cla1Isr1;
    PieVectTable.CLA1_2_INT =&cla1Isr2;
    PieVectTable.CLA1_3_INT =&cla1Isr3;
    PieVectTable.CLA1_4_INT =&cla1Isr4;
    PieVectTable.CLA1_5_INT =&cla1Isr5;
    PieVectTable.CLA1_6_INT =&cla1Isr6;
    PieVectTable.CLA1_7_INT =&cla1Isr7;
    PieVectTable.CLA1_8_INT =&cla1Isr8;

    //在组和子组级别启用 CLA 中断
    PieCtrlRegs.PIEIER11.all = 0xFFFF;
    IER |=(M_INT11);
    EDIS;


    另外、我对坏 MEM 的 CLA 声明有一些疑问:

    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

    我尝试更改:

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

    但是、现在、当到达上面最后一个 iidu 时、主代码到达0x3FE468位置、在这里没有定义符号!

    我尝试将 LS4和 LS5分开、但会发生相同的事件。

    你有什么建议吗? 如何正确使用 cmd 文件分配 Cla1Prog?

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

    我尝试以下设置、它工作正常:

    1)位于 cmd 文件中

    (笑声)
    存储器

    第0页:
    RAMLS4:origin = 0x00A000、length = 0x000800
    RAMLS5 :origin = 0x00A800,length = 0x000800
    // RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    (笑声)

    部分

    (笑声)
    //.text :>> RAMD0|RAMD1|RAMLS4_LS5,PAGE = 0
    .text :>> RAMD0|RAMD1|RAMLS4,PAGE = 0
    //.text :>> RAMD0|RAMD1|RAMLS5,page = 0
    (笑声)
    Cla1Prog :> RAMLS5,PAGE=0
    CLADataLS0:>RAMLS0,PAGE=1
    CLADataLS1:> RAMLS1,PAGE=1
    (笑声)

    2) 2)在 CLA_configClaMemory (void)功能中:
    (笑声)
    // MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;
    (笑声)

    那么、如何为 Cla1Prog 分配 RAMLS4_LS5? 为什么它在 LS4中不起作用?

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

    [引用用户="Diego Bellachioma">那么、如何为 Cla1Prog 分配 RAMLS4_LS5? 为什么它在 LS4中不起作用?

    您可以将 CLa1Prog 分配给 RAMLS4_5、但将 LS4分配给 CLA 的部分会在代码中注释掉

    [引用用户="Diego Bellachioma"// MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;[/quot]

    取消注释与 LS4相关的两行、它将起作用。

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

    我很抱歉、因为我只是尝试一下、但我在两篇文章之前添加了这篇文章、这会造成混淆。 我在前面说过:

    我尝试在以下位置更改 cmd 文件:

    RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    .text :>> RAMD0|RAMD1|RAMLS4_LS5,PAGE = 0
    Cla1Prog :> RAMLS4_LS5,PAGE=0

    在 main.c (相对函数)中:

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

    但是、现在、当到达上面最后一个结构时、主代码进入0x3FE468程序位置、而该位置没有定义任何符号!

    我尝试将 LS4和 LS5分开、但会发生相同的事件。

    如果我将 LS4和 LS5分开并分配了 Cla1Prog:>RAMLS5,PAGE=0,则它可以正常工作,否则不能

    那么、当我们使用 LS4和 LS5关于 CLA 时、它们之间有何区别?

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

    [引用用户="Diego Bellachioma]RAMLS4_LS5:origin = 0x00A000、length = 0x001000

    当它被定义为这样时、你实际上将物理 RAML4和 RAML5组合到一个逻辑 RAM 块中并将 Cla1Prog 分配给它。 但是、它们仍然是两个单独的物理块、因此必须配置这两个物理块以实现 CLA 所有权。 在您的设置代码中、您需要以下行

    //放置在 LS4和 LS5
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4中的 Cla1Prog = 1;
    MemCfgRegs.LSxCLAPgM.bit.CLAPgm_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;MemCfgRegs.LSg5 =
    1;MemCfgCLAPrgM.LSgM.LSgCMPL.gCMPL.CLGM.1;MemCfgCLGM.LS5 = 1 

    [引述 user="Diego Bellachioma"].text:>> RAMD0|RAMD1|RAMLS4_LS5,page = 0

    Cla1Prog 和.text 不能分配给相同的块(RAMLS4_LS5)、它们不能共享相同的空间。 RAM 所有权针对 CLA 或 C28x 进行配置。 如果 Cla1Prog 被分配给 RAMLS4_LS5、那么.text 必须被分配给一些其他 RAM

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

    为什么以这种方式配置 TI 2837xD_RAM_CLA_lnk_CPU1.cmd 文件:
    (笑声)
    /*RAMLS4.:origin = 0x00A000,length = 0x000800*/
    /*RAMLS5 :origin = 0x00A800,length = 0x000800*/
    RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    (笑声)
    .text :>> RAMD0|RAMD1|RAMLS4_LS5,PAGE = 0
    (笑声)
    /* CLA 特定部分*/
    Cla1Prog :> RAMLS4_LS5,PAGE=0
    (笑声)

    我尝试在我的代码中添加以下内容:

    //在 LS4和 LS5中放置 Cla1Prog
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

    但它不起作用。

    我想总结一下我的工作进度测试。 如果我使用:
    (笑声)
    RAMLS4:origin = 0x00A000、length = 0x000800
    RAMLS5:origin = 0x00A800,length = 0x000800
    (笑声)
    .text :>> RAMD0|RAMD1|RAMLS4,PAGE = 0
    (笑声)
    Cla1Prog :> RAMLS5,PAGE=0



    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

    CLA 的代码确实起作用。 如果我使用:

    (笑声)
    RAMLS4:origin = 0x00A000、length = 0x000800
    RAMLS5:origin = 0x00A800,length = 0x000800
    (笑声)
    .text :>> RAMD0|RAMD1|RAMLS5,page = 0
    (笑声)
    Cla1Prog :> RAMLS4,PAGE=0



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

    它同样起作用。

    最后、我如何扩展存储器空间代码

    .text :>> RAMD0|RAMD1|?,PAGE =0 [es. RAMGS0,ECC. 因为它是以下存储器块。 我只是尝试过,但它不起作用]

    和设置正确的 Cla1Prog?

    我知道我可以充分利用您的优势、但我想问您一个合适的链接器 cmd 配置、它可以为主代码 CPU 扩展程序空间、并设置 CLA 以实现良好的功能。

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

    [引用用户="Diego Bellachioma">为什么以这种方式配置 TI 2837xD_RAM_CLA_lnk_CPU1.cmd 文件:
    (笑声)
    /*RAMLS4:origin = 0x00A000,length = 0x000800*/
    /*RAMLS5:origin = 0x00A800,length = 0x000800*/
    RAMLS4_LS5:origin = 0x00A000、length = 0x001000
    (笑声)
    .text:>> RAMD0|RAMD1|RAMLS4_LS5,page = 0
    (笑声)
    /* CLA 特定部分*/
    Cla1Prog:> RAMLS4_LS5,page=0

    是的、这肯定是一个错误。 输入一个 TT 来修复该问题、.text 不应分配给 LS4_LS5

    [引用用户="Diego Bellachioma">文本:>> RAMD0|RAMD1|?,PAGE = 0 [es. RAMGS0,ECC. 因为它是以下存储器块。 我刚刚尝试过,但它不起作用]

    您应该能够将.text 分配给 RAMD0、RAMD1和 RAMGS0 (或第0页上的任何 GS RAM)、假设它们在第0页上。

    .text:>> RAMD0 | RAMD1 | RAMGS0,PAGE = 0

    将.text 段拆分为3、.text.1、.text.2和.text.3

    [引用 user="Diego Bellachioma"]我知道我可以充分利用您的优势,但我希望向您询问一个合适的链接器 cmd 配置,它可以扩展主代码 CPU 的程序空间并设置 CLA 以获得良好的功能。

    您可以从 C:\ti\c2000\C2000Ware_0_04_00_00\device_support\f2837xd\con\cmd 中使用这个。 CLA 程序被分配给 RAMLS5、LS0和 LS1是 CLA 数据空间

    //如果使用
    // CLA C 编译器
    //项目属性-> C2000链接器->高级选项->命令文件
    //预处理->--,用户必须在项目链接器设置中定义 CLA_C define
    #ifdef CLA_C
    //定义
    将由 CLA 编译器用于局部符号和 temps 的 CLA 暂存区的大小
    //还强制引用标记
    了//暂存区的特殊符号。
    CLA_暂 存区_size = 0x100;
    --undef_sym=__cla_scratchpad 结束
    --undef_sym=__cla_scratchpad 开始
    #endif //cla_C
    
    MEMORY
    {
    PAGE 0:
    /* begin 用于"引导至 SARAM"引导加载程序模式*/
    
    begin:origin = 0x000000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMD1 :origin = 0x00B800,length = 0x000800
    RAMLS4:origin = 0x00A000、length = 0x000800
    RAMLS5 :origin = 0x00A800,length = 0x000800
    reset:origin = 0x3FFFC0,length = 0x000002
    
    page 1:
    
    boot_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
    
    RAMLS0:origin = 0x008000、length = 0x000800
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000、length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    
    RAMGS0 :origin = 0x00C000、length = 0x001000
    RAMGS1 :origin = 0x00D000、length = 0x001000
    RAMGS2 :origin = 0x00E000、length = 0x001000
    RAMGS3 :origin = 0x00F000、length = 0x001000
    RAMGS4 :origin = 0x010000,length = 0x001000
    RAMGS5 :origin = 0x011000,length = 0x001000
    RAMGS6 :origin = 0x012000,length = 0x001000
    RAMGS7 :origin = 0x013000、length = 0x001000
    RAMGS8 :origin = 0x014000、length = 0x001000
    RAMGS9 :origin = 0x015000,length = 0x001000
    RAMGS10 :origin = 0x016000,length = 0x001000
    RAMGS11 :origin = 0x017000、length = 0x001000
    RAMGS12 :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS13 :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS15 :origin = 0x01B000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    
    / CANA_MSG_RAM :origin = 0x049000、length = 0x000800
    CANB_MSG_RAM :origin = 0x04B000、length = 0x000800
    
    CLA1_MSGRAMLOW:origin = 0x001480、length = 0x000080
    CLA1_MSGRAMIGH:origin = 0x001500、length = 0x000080
    }
    
    SECTIONS
    {
    codestart :>开始, PAGE = 0
    ramfuncs :> RAMM0 PAGE = 0.text
    :>> RAMD0|RAMD1|RAMLS4,PAGE = 0
    .cinit :> RAMM0, PAGE = 0.Pinit
    :> RAMM0, PAGE = 0.switch
    :> RAMM0, PAGE = 0.reset
    :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
    
    .stack :> RAMM1, PAGE = 1.ebss
    :> RAMLS2,PAGE = 1.econst
    :> RAMLS3,page = 1
    .esysmem :> RAMLS3,page = 1
    filter_RegsFile:> RAMGS0,page = 1
    
    /* CLA 特定部分*/
    Cla1Prog :> RAMLS5,PAGE=0
    
    CLADataLS0:> RAMLS0,PAGE=1
    CLADataLS1:> RAMLS1,PAGE=1
    
    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1
    CpuToCla1MsgRAM:> CLA1_MSGRAMGCL1,PAGE = 1
    
    *
    过滤器
    :1 *= 1 * 1 * 1:1 * RAM:1 = 1 > RAMGS2、PAGE = 1、fill=0x2222
    Filter3_RegsFile:> RAMGS3、PAGE = 1、fill=0x3333
    Filter4_RegsFile:> RAMGS4、PAGE = 1、fill=0x4444
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>= 15009000
    .TI.ramfunc:{}>RAMM0, PAGE = 0
    #endif
    #endif
    
    #ifdef CLA_C
    /* CLA C 编译器段*/
    //
    //////必须分配给 CLA 具有写入访问
    权限的内存
    :
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS1、page = 1
    
    .scratchpad :> RAMLS1、 PAGE = 1.bss_cla
    :> RAMLS1、 PAGE = 1.CONST_CLA
    :> RAMLS1、 page = 1
    #endif //cla_C
    }
    
    /*//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *
    

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

    请注意、在您实际发帖之前、我只是在遵循您之前的建议的同时找到了一个解决方案。 我以这种方式配置了 cmd 文件:

    (笑声)
    RAMGS0 -> PAGE =1在 PAGE = 0中
    (笑声)
    .text :>> RAMD0|RAMD1|RAMGS0,PAGE = 0
    (笑声)
    Cla1Prog :> RAMLS4_LS5,PAGE=0 我是怎么想的
    (笑声)

    然后

    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

    以分配正确的 CLA RAM 所有权。 现在、至少在 RAM 中、CPU1和 CLA1代码起作用!

    由于这是我第一次使用此论坛,您能告诉我必须如何结束此主题吗?

    也许我必须按下绿色的“验证应答”按钮?

    非常感谢您的耐心、建议和帮助。

    P.S.:我尝试将我的代码放在闪存上、但我遇到了一些问题。 我认为问题出在 DELAY_US 中以及一些必须从闪存加载到 RAM 的代码[es. InitFlash]。 无论如何、我想为它创建一个新的线程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Diego Bellachioma">由于这是我第一次使用此论坛,您能告诉我必须如何完成此主题吗?

    也许我必须按下绿色的“验证应答”按钮?[/引用]

    是的、验证将关闭此帖子。

    很高兴您能正常工作。