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**** 2434500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/954422/tms320f28375d-cla1-issue

器件型号:TMS320F28375D

尊敬的 Veena:

CLA1也出现了同样的问题。

我们开发的函数无法正常工作。 该函数包含多个公式、其中函数的某些部分正常工作、但函数的其他部分不工作。

我在这里附上了两个文件。 一个文件是用 C 语言编写的函数、而另一个文件是 CCS 调试器的反汇编部分。

请认真注意此问题。

此致、

Dushyant Ranae2e.ti.com/.../Source_5F00_File.rar

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

    您好!

    您能否提供有关它如何工作的更多信息? 您是否已单步执行该代码?

    谢谢你

    Lori

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

    您好!

    我们正在工作的项目是使用 PR 控制器进行有源谐波滤波的一部分(参考文档随附)。

    我们已将 PR 控制器的传递函数(离散形式)用于单个谐波补偿、该函数在 CLA1中实现。  

    因为我们的内核以39.06usec 的速率运行。 在 CLA1中执行的单个函数的存储器长度变化时、这个传递函数不能正常工作。

    我已在附加的 rar 文件中附上以下文件供您参考。

     cla1_init.c

    C1_CPU_CLA.CLA  

     C1_CpuCla_data.h

    4.2837x_flash_lnk_cpu1.cmd  

    5. AHF_3800_3LVL_CPU1.MAP

     6. PRController.pdf

    感谢您的支持、

    Dushyant Rana

    e2e.ti.com/.../Project_2D00_Files.rar

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

    [引用 user="amtech"]此传递函数在 CLA1中实现的单个函数的内存长度变化时无法正常工作。

    Amtech、

    这是否意味着当函数达到特定大小时、它将不再工作?  它现在是否跨越了 RAM 物理边界?  

    CLA 无法访问器件上的所有存储器。 这是首先要检查的问题。  在数据表中有一个存储器映射、显示了所有存储器块以及 CLA 可以访问的存储器块。  如果它进入了另一个 RAM 块、则需要配置该块以供 CLA 使用。  这是第二个要检查的问题。  

    如果代码在有效、已配置的 CLA 存储器中运行。  接下来要检查的是单步执行 CLA 代码-您能否判断它是读取错误还是写入错误?  这将有助于我们了解是由数据存储器引起问题、而不是由程序存储器引起。  

    例如、代码安全-如果 CLA 运行在不安全的存储器中、但它尝试访问不允许的安全 RAM。 CLA 只能在 CLA 也被同一个区域抓取时访问安全 RAM。 在这种情况下、要么使 RAM 不安全、要么也从同一个区域中抓取 CLA。

    Lori

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

    您好!


    ->这是否意味着当函数达到一定大小时、它将不再起作用? 它现在是否跨越了 RAM 物理边界?
    否、函数未跨越 RAM 物理边界。

    -> CLA 无法访问器件上的所有存储器。 这是首先要检查的问题。 在数据表中有一个存储器映射、显示了所有存储器块以及 CLA 可以访问的存储器块。

    在我们的项目中、我们使用本地存储器 LS2、LS3和 LS4作为 CLA1的程序存储器。
    我们已将用于 CLA1的 RAM 的 LS0和 LS1组合在一起。
    我们在固件的 cmd 文件中的内存分配下完成的操作。
    第0页:

    /* begin 用于"引导至闪存"引导加载程序模式*/
    开始:origin = 0x080000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMLS0:origin = 0x008000、length = 0x001000
    //RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000,length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    RAMLS4:origin = 0x00A000,length = 0x000800
    RAMGS12:origin = 0x018000,length = 0x004000

    复位:origin = 0x3FFFC0,length = 0x000002
    /*闪存扇区*/
    FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
    FLASHB:origin = 0x082000、length = 0x002000 //片上闪存*
    FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
    FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
    FLASHE:origin = 0x088000、length = 0x030000//片上闪存*/
    FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
    FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
    FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
    FLASHN:origin = 0x0BE000、length = 0x002000 //片上闪存*/

    //in 部分
    Cla1Prog:load = FLASHD,
    运行= RAMLS2、
    load_start (_Cla1funcsLoadStart)、
    load_end (_Cla1funcsLoadEnd)、
    run_start (_Cla1funcsRunStart)、
    load_size (_Cla1funcsLoadSize)、
    PAGE = 0、ALIGN (4)
    // DR-20
    Cla1Prog1:load = FLASHK、
    运行= RAMLS3、
    load_start (_Cla1funcsLoadStart1)、
    load_end (_Cla1funcsLoadEnd1)、
    run_start (_Cla1funcsRunStart1)、
    load_size (_Cla1funcsLoadSize1)、
    PAGE = 0、ALIGN (4)
    // DR-20
    Cla1Prog2:load = FLASHL、
    运行= RAMLS4、
    load_start (_Cla1funcsLoadStart2)、
    load_end (_Cla1funcsLoadEnd2)、
    run_start (_Cla1funcsRunStart2)、
    load_size (_Cla1funcsLoadSize2)、
    PAGE = 0、ALIGN (4)

    我们配置了 CLA、如下所示:
    空 CLA_configClaMemory (空)

    extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;
    extern uint32_t Cla1funcsRunStart1、Cla1funcsLoadStart1、Cla1funcsLoadSize1;// DR-20
    extern uint32_t Cla1funcsRunStart2、Cla1funcsLoadStart2、Cla1funcsLoadSize2;// DR-20
    EALLOW;
    #ifdef _flash
    //将代码从闪存复制到 RAM
    memcpy (((uint32_t *)& Cla1funcsRunStart、(uint32_t *)& Cla1funcsLoadStart、(uint32_t)& Cla1funcsLoadSize);
    memcpy (((uint32_t *)& Cla1funcsRunStart1、(uint32_t *)& Cla1funcsLoadStart1、(uint32_t)& Cla1funcsLoadSize1);// DR-20
    memcpy (((uint32_t *)& Cla1funcsRunStart2、(uint32_t *)& Cla1funcsLoadStart2、(uint32_t)& Cla1funcsLoadSize2);// DR-20
    #endif //_FLASH
    //初始化并等待 CLA1ToCPUMsgRAM
    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)

    };

    //选择 LSxRAM 作为 CLA 的编程空间
    //首先将 CLA 配置为 LSx 的主器件,然后再配置
    //将空间设置为程序块
    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;

    //接下来将 LSxRAM 配置为 CLA 的数据空间
    //首先将 CLA 配置为 LSx 的主器件,然后再配置
    //将空格设置为代码块
    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;

    EDIS;

    ->如果它进入另一个 RAM 块、则需要配置该块以供 CLA 使用。 这是第二个要检查的问题。
    没有任何函数会交叉进入另一个 RAM 块。 所有使用的块都按上述方式进行配置。


    ->如果代码在有效、已配置的 CLA 存储器中运行。 接下来要检查的是单步执行 CLA 代码-您能否判断它是读取错误还是写入错误? 这将有助于我们了解是由数据存储器引起问题、而不是由程序存储器引起。
    您能否指导我如何检查 CLA 代码的读取和写入?

    ->在之前的答复中、我已发送与 CLA1配置相关的所有文件、您能否在查看这些文件后提供指导?

    ->还有一点是、看看 CLA1函数的反汇编代码部分、
    在这里、您可以看到在常规实例中遇到 ITRAP0指令。 这是否会在执行代码时产生问题?
    009000:0000 ITRAP0
    009001:7840 MOV *- SP[0]、AR0
    009002:872A MOVL XT、@0x2a
    009003:74C0 SUB *+ XAR0[0]、AL
    24 cpu_and_cla.r_pr[0].xn2 = cpu_and_cla.r_pr[0].xn1;
    009004:84EC7400 XMAC P、*+ XAR4[5]、*(0x7400)
    25 cpu_and_cla.r_pr[0].xn1 = cpu_and_cla.r_pr[0].xn0;
    009006:84EA7400 XMAC P、*+ XAR2[5]、*(0x7400)
    26 cpu_and_cla.r_pr[0].xn0 = cpu_and_cla.Rin_pr;
    009008:844C73C0 XMAC P、*- SP[12]、*(0x73c0)
    00900a:84EA74C0 XMAC P、*+ XAR2[5]、*(0x74c0)
    27 cpu_and_cla.r_pr[0].yn2 = cpu_and_cla.r_pr[0].yn1;
    00900c:84E67400 XMAC P、*+ XAR6[4]、*(0x7400)
    28 cpu_and_cla.r_pr[0].yn1 = cpu_and_cla.r_pr[0].yn0;
    00900e:84E47400 XMAC P、*+ XAR4[4]、*(0x7400)
    29 cpu_and_cla.r_pr[0].yn0 =((cpu_and_cla.a0[0]*(cpu_and_cla.r_pr[0].xn0 - cpu_and_cla.r_pr[0].xn2))
    009010:84A473C0 XMAC P、@AR4、*(0x73c0)
    009012:84E673D0 XMAC P、*+ XAR6[4]、*(0x73d0)
    009014:84EA73E0 XMAC P、*+ XAR2[5]、*(0x73e0)
    009016:84EE0110 XMAC P、*+ XAR6[5]、*(0x0110)
    009018:84642690 XMAC P、*- SP[36]、*(0x2690)
    00901a:0019 INTR INT10
    00901b:7C00 MOV @0x0、AR4
    00901c:84C42180 XMAC P、*+ XAR4[0]、*(0x2180)
    00901e:84E873D0 XMAC P、*+ XAR0[5]、*(0x73d0)
    009020:0004推送 RPC
    009021:7C00 MOV @0x0、AR4
    009022:84842210 XMAC P、* XAR4++、*(0x2210)
    009024:0004推送 RPC
    009025:7C00 MOV @0x0、AR4
    009026:84E474C0 XMAC P、*+ XAR4[4]、*(0x74c0)
    009028:0000 ITRAP0
    009029:7FA0 MOV @AR0、AR7
    00902a:0000 ITRAP0
    00902b:7FA0 MOV @AR0、AR7
    32 TOTAL_R = TOTAL_R + CPU_AND_CLA.R_pr[0].yn0;
    00902c:872A MOVL XT、@0x2a
    00902d:73C0 ADD *+ XAR0[0]、AH
    00902e:84E473D0 XMAC P、*+ XAR4[4]、*(0x73d0)
    009030:0004推送 RPC
    009031:7C20 MOV @0x20、AR4
    009032:872A MOVL XT、@0x2a
    009033:74C0 SUB *+ XAR0[0]、AL
    34 cpu_and_cla.r_pr[1].xn2 = cpu_and_cla.r_pr[1].xn1;
    009034:84F87400 XMAC P、*+ XAR0[7]、*(0x7400)
    35 cpu_and_cla.r_pr[1].xn1 = cpu_and_cla.r_pr[1].xn0;
    009036:84F67400 XMAC P、*+ XAR6[6]、*(0x7400)
    36 CPU_AND_CLA.R_pr[1].xn0 = CPU_AND_CLA.Rin_pr;
    009038:844C73C0 XMAC P、*- SP[12]、*(0x73c0)
    00903a:84F674C0 XMAC P、*+ XAR6[6]、*(0x74c0)
    37 cpu_and_cla.r_pr[1].yn2 = cpu_and_cla.r_pr[1].yn1;
    00903c:84F27400 XMAC P、*+ XAR2[6]、*(0x7400)
    38 cpu_and_cla.r_pr[1].yn1 = cpu_and_cla.r_pr[1].yn0;
    00903E:84F07400 XMAC P、*+ XAR0[6]、*(0x7400)

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

    amtech 说:
     您能指导我如何检查 CLA 代码的读写操作吗?

    Amtech、

    我们有一个 CLA 技术讲座、其中包括一个调试部分。  请参阅 CLA 软件开发人员指南的"入门"、"技术讲座"部分:

    https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/getting_started.html

    该指南还包含许多有关 CLA 的常见问题解答和调试提示。

    [引用 USER="AMTECH]->另外一件事是查看 CLA1函数的反汇编代码部分、
    在这里、您可以看到在常规实例中遇到 ITRAP0指令。 这是否会在执行代码时出现问题?

    Code Composer Studio 认为您正在考虑 C28x 反汇编。  这些都是 C28x 的操作码。  在 CCS Debug 窗口中、首先单击 CPU1_CLA1内核、右键单击并选择"connect target"。  现在、CCS 将知道您正在查看 CLA 环境、然后查看反汇编。   我在前面提到的研讨会中对此进行了介绍。

    此致

    Lori

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

    您好、

    此问题仍在处理中。

    在调试 CLA1代码期间、我观察到一件事。 我使用 了 RAMLS2、 RAMLS3和 RAMLS4作为 CLA 程序存储器、并为这些存储器分配了 CLA 函数、如下所示。

    extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;
    extern uint32_t Cla1funcsRunStart1、Cla1funcsLoadStart1、Cla1funcsLoadSize1;// DR-20
    extern uint32_t Cla1funcsRunStart2、Cla1funcsLoadStart2、Cla1funcsLoadSize2;// DR-20
    EALLOW;
    #ifdef _flash
    //将代码从闪存复制到 RAM
    memcpy (((uint32_t *)& Cla1funcsRunStart、(uint32_t *)& Cla1funcsLoadStart、(uint32_t)& Cla1funcsLoadSize);
    memcpy (((uint32_t *)& Cla1funcsRunStart1、(uint32_t *)& Cla1funcsLoadStart1、(uint32_t)& Cla1funcsLoadSize1);// DR-20
    memcpy (((uint32_t *)& Cla1funcsRunStart2、(uint32_t *)& Cla1funcsLoadStart2、(uint32_t)& Cla1funcsLoadSize2);// DR-20
    #endif //_FLASH
    //初始化并等待 CLA1ToCPUMsgRAM
    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)

    };

    //选择 LSxRAM 作为 CLA 的编程空间
    //首先将 CLA 配置为 LSx 的主器件,然后再配置
    //将空间设置为程序块
    //MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;//RAMLS2

    //MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1;

    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;

    //接下来将 LSxRAM 配置为 CLA 的数据空间
    //首先将 CLA 配置为 LSx 的主器件,然后再配置
    //将空格设置为代码块
    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;


    EDIS;

    与这些设置一样、当在存储器浏览器中使用0x9000 (RAMLS2)存储器位置调试 I 观测器时、数据会发生变化、如下所示。 就像这个存储器被配置为 CLA 程序存储器一样、这是否发生呢? 这可能是什么原因?

    相关信息。

    Dushyant Rana

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

    您好!

    将代码插入到帖子中时、请使用代码格式器。  这是 按钮。  它使读取变得容易得多。  但是、一般而言、我无法通读大量尝试确定是否出错的代码。

    [引用 USER="AMTECH]当在内存浏览器中使用0x9000 (RAMLS2)内存位置调试 I 观测器时、这些设置会发生变化、如下图所示。 就像这个存储器被配置为 CLA 程序存储器一样、这是否发生呢? 这可能是什么原因?

    检查分配给此存储器区域的内容的最佳方法是检查链接器生成的.map 文件、以了解您不希望分配给此存储器的任何内容。  此文件显示每个符号及其在存储器中的分配位置。   如果它只是 CLA 程序、那么它只应该在 C28x 初始化它时被修改。

    注:由于美国下周的假日,我的答复将推迟到12月的第一周。  

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

    您好!

    我使用的是编译器版本18.1.1 LTS。

    我从  以下链接中研究了编译器缺陷 CodeGen-3676、  

    http://software-dl.ti.com/codegen/esd/cgt_public_sw/C2000/18.1.1.LTS/Closed_defects.html

    我面临的问题与编译器缺陷中描述的问题相同。  

    在下面的代码中、在将实际值复制到存储器之前执行公式的最后一行。

    cpu_and_cla.r_pr[1].xn2 = cpu_and_cla.r_pr[1].xn1;
    cpu_and_cla.r_pr[1].xn1 = cpu_and_cla.r[1].xn0;cpu_and_cla.r.pr[1].xn1 = cpu_and_cla_pr.r1.r1].r.r_r_r.r_r1[r_r_r_r.r_r.r_r.r_r_r_r.r_r.r_r.r_r_r1]1;
    cpu_r_r_r_r_r_r_r_r_r_r_cla.r_r_r_r_r.r_r_r.r_r
    
    
    CPU_AND_CLA.R_pr[1].yn0 =((CPU_and_CLA.a0[1]*(CPU_and_CLA.R[1].xn0 - CPU_and_CLA.R.R[1].xn0)
    -(CPU_and_CLA.pr[1].xn2)-(CPU_AND_CLA.B1[1]* CPU_AND_1.CLA.1]*和 CPU_1.CLA.pr_1.b2]*)
    

    如以下代码所示、在输入单个 NOP 指令后、公式的最后一行正常工作。

    cpu_and_cla.r_pr[1].xn2 = cpu_and_cla.r_pr[1].xn1;
    cpu_and_cla.r_pr[1].xn1 = cpu_and_cla.r[1].xn0;cpu_and_cla.r.pr[1].xn1 = cpu_and_cla_pr.r1.r1].r.r_r_r.r_r1[r_r_r_r.r_r.r_r.r_r_r_r.r_r.r_r.r_r_r1]1;
    cpu_r_r_r_r_r_r_r_r_r_r_cla.r_r_r_r_r.r_r_r.r_r
    
    
    _mnop ();__mnop ();__mnop ();
    cpu_and_cla.r[1].yn0 =((cpu_and_cla0[1])*(cpu_and_cla.r_pr[1].xn0 - cpu_and_cla.r_pr.r_1.b1]]*(cpu_和
    cla1.b1[cpu_r_1.b1.b1.])*(cpu_r_r_cla1.r_r_r_r_r.r_r_1.b1.b1.b1]-ca_r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r1[cpu_r.r1]- 

    但是、我使用了 您在以前的技术论坛之一中建议的三条 NOP 指令、如下链接所示。

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/355184#pi320995=1

    谢谢、

    Dushyant Rana

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

    感谢您的详细介绍、Dushyant。  由于感恩节假期、我将在12月1日之后更仔细地了解这一点。  

    此致

    Lori

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

    Dushyant、

    让我与我们的编译器团队联系、然后返回给您。   

    此致

    Lori

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

    Dushyant、

    如果没有装配体、则很难确定在执行什么操作。

    但是、如果您的反汇编使用了 MMOVD32指令、则可能会遇到此错误:

    https://sir.ext.ti.com/jira/browse/EXT_EP-9923

    遗憾的是、18.1.0.x.LTS 版本没有修复。

    请使用18.12.7.LTS 或20.2.3.LTS 进行测试

    如果问题消失、并且您的反汇编具有 MMOVD32指令、则我希望这是问题、而不是 CodeGen-3676

    此致

    Greg