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.

[参考译文] TMS320F28388D:位于 CPUTOCMRAM 中的指针和位于 CPUTOCMRAM 中的指向元素的问题

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1052205/tms320f28388d-problem-of-pointer-located-in-cputocmram-and-pointing-elements-in-cputocmram

器件型号:TMS320F28388D

您好!

我有一个初始化了指针的结构、用于指向该结构的某些元素。

此处* p_in (0x0000B0A8)指向 id (0x0000B084)、* p_set (0x0000B0AA)指向 IDREF (0x0000B0A4)。

该结构在 CPU1上运行、必须与 CM 内核共享。

结构体位于 LS6 RAM 中的那一刻、必要时、我将结构体的内容复制到 CPUTOCMRAM 中。 一切都运行良好、但传输结构需要时间。

为了改进这一点、我使用#pragma DATA_SECTION 宏将该结构直接定位到 CPUTOCMRAM 中、因为可以从 CPU1读取/写入内存。

当我进行调试时、主结构位于 CPUTOCMRAM 存储器(0x39000)中、但是指针仍然指向 LS6区域、而不是指向 CPUTOCMRAM 中的元素。

现在*p_in (0x000390A8)指向 id@0x0000B084而不是(0x00038084)并且*p_set (0x000390AA)指向 IDREF@0x000B0A4而不是(0x000390A4)。

如何纠正此问题?

此致。

Jérôme μ A

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

    您好 Jérôme、

    您将需要将指针指向的成员放置在 CPUTOCMRAM 结构内部、例如 p_in 指向'MOTOR_foc'的成员、在这种情况下、MOTOR_FOCr 也需要放置在 CPUTOCMRAM 中。

    谢谢、

    Ashwini

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

    您好、Ashwini、

    感谢您的回复。 如需相关信息、MOTOR_focsis 放置在 CPUTOCMRAM 中。 正如您在第二张图片中看到的 、所有元素都位于 CPUTOCMRAM 中。 * p_in@0x000390A8、id@0x00038084、* p_set@0x000390AA 和 IDREF@0x000390A4。

    此致。

    Jérôme μ A

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

    您好 Jerome、

    我不小心点击了"TI 认为已解决"、请忽略它。

    在快照中、我会看到"moter_enc "、但不会看到"moter_soc"。您能否确认映射到结构的"moter_soc"也会放置在 CPU-CM 共享 RAM 上。

    谢谢、

    Ashwini

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

    您好、Ashwini、

    是的、MOTOR_focs 实际上位于 CPUTOCMRAM 中、起始值@0x00039000。

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

    您好 Jerome、

    请在内存浏览器中查找地址0xB084和0xB0A4、并检查它是否映射到另一个数据结构 instacne。 该实例可能链接到数据结构?

    谢谢、

    Ashwini

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

    您好、Ashwini、

    我不知道如何解释拆解时的结果

    这里是我@0x0000B084的值。

    00b084:  0000       ITRAP0       
    00b085:  3F00       MOV         @0x0、P
    00b086:  0000       ITRAP0       
    00b087:  0000       ITRAP0       
    00b088:  0000       ITRAP0       
    00b089:  0000       ITRAP0       
    00b08a:  0000       ITRAP0       
    00b08b:  0000       ITRAP0       
    00b08c:  0000       ITRAP0       

    这里是我@0x0000B0A4的值

    00b0a4:  0343       SUBL        ACC、*- SP[3]
    00b0a5:  037A       SUBL        ACC、*- SP[58]
    00b0a6:  0243       MOVB        ACC、#67
    00b0a7:  0001       ABORTI       
    00b0a8:  0000       ITRAP0       
    00b0a9:  0000       ITRAP0       
    00b0aa:  00800343   LC          0x000343
    00b0ac:  0343       SUBL        ACC、*-SP[3]
    00b0ad:  037A       SUBL        ACC、*- SP[58]
    00b0ae:  0243       MOVB        ACC、#67
    00b0af:  0001       ABORTI       
    00b0b0:  0000       ITRAP0       
    00b0b1:  0000       ITRAP0       
    00b0b2:  00800343   LC          0x000343
    00b0b4:  0343       SUBL        ACC、*- SP[3]
    00b0b5:  037A       SUBL        ACC、*- SP[58]
    00b0b6:  0243       MOVB        ACC、#67
    00b0b7:  0001       ABORTI       
    00b0b8:  0000       ITRAP0       
    00b0b9:  0000       ITRAP0       
    00b0ba:  00800343   LC          0x000343
    00b0bc:  0343       SUBL        ACC、*- SP[3]
    00b0bd:  037A       SUBL        ACC、*- SP[58]
    00b0be:  0243       MOVB        ACC、#67
    00b0bf:  0001       ABORTI       
    00b0c0:  0000       ITRAP0       
    00b0c1:  0000       ITRAP0       
    00b0c2:  0000       ITRAP0       
    00b0c3:  3F80       MOV         * XAR0++、P
    00b0c4:  0000       ITRAP0       
    00b0c5:  4080       TBIT        *XAR0++、#0x0
    00b0c6:  0001       ABORTI       

    从@0xB0A0开始、我知道我有一个结构(DRV 寄存器结构)、但是没有与 MOTOR_FOC 的链接。

    此致。

    Jérôme μ A

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

    您好 Jerome、

    请在内存浏览器中查看地址"0x0000B084"、而不是在反汇编窗口中查看。

    检查调试器显示的值是否不正确或结构元素是否确实映射到0xB084地址的另一种方法是:在应用程序中创建一个变量来保存结构元素 p_in 和 p_set 的值(而不是地址)。 由于这些是指针、它们的值应该是指针指向的地址。 如果这些指针的值为0xB084、则应用程序将 p_set 和 p_in 分配给存储在0xB084的数据结构。 如果不是、那么看起来我们遇到了调试器问题。

    谢谢、

    Ashwini

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

    您好 Ashwini、

    经过一些调查、我确定了主要问题。 实际上、当结构(MOTOR_FOC)位于0xB000时没有问题、该结构在启动时初始化良好。

    0x0000B000   MOTOR_Foc
    0x0000B000   3333   3F33   825A   390C   CCF7   3912   0000   4396   D289   3ADE   CCCD   3DCC   000c   0000   7400   0000   7480   0000   7580   0000   7500
    0x0000B015   0000   0000      0000 0B00   0000   0B20   0000   0B60   0000   0B40   0000      0000   0B10   0000   0B30   0000   0B70   0000   0B50   0000
    0x0000B02A   0B14   0000   0B34   0000   0B74   0000   0000   0000   0000 0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000   0000 0000   0000 0000   22EB
    0x0000B03F   3D95   5BA3   3F6D   0000      0D82   0001   5100   0000   000c   0000   4000   469C   0000      0000 0000   0000 0000   0000 0000 0000 0000 0000    0000   0000   0000 0000
    0x0000B054   0000   0000   0000   0000   0000    0000   597C   45C4   0000   0000   6FDA   44F5   0000      0000 0000   0000   0000 0000   0000 4348   8536   3CF9   33D6
    0x0000B069   3F78   4000   471C   0000      0000 0000      0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   22EB   3D95   5BA3   F6D   0000    
    0x0000B07E   0000   0000   0000      0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0000B093   0000   0000   0000   0000   0000 0000    0000   41A0   6666   3F66   CCCD   3DCC   0000      0000   0000   0000    0000   0000   0000 0000   0000   0000 0000
    0x0000B0A8   0000      0000 0000   0000   0000    0000   89D4   3ED7   307A   3D61   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0000B0BD   0000   0000   0000   307A   3E1   307A   3D61   0000      0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000
    0x0000B0D2   0000   0000   0000   0000   0000    0000   0000   3F80   D70A   3CA3   0000   0000   0000   0000   0000    0000   0000 0000   4080   0000      0000 0000 0000 0000
    0x0000B0E7   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   3333   3F33   825A   390C   CCF7   3912   0000   4396   D289   3ADE
    0x0000B0FC   CCCD   3DCC   000c   0000   7400   0000   7480   0000   7580   0000   7500   0000      0000 0000   0B00   0000   0B20   0000   0B60   0000   0B40
    0x0000B111   0000   0000   0000   0B12   0000   0B32   0000   0B72   0000   0B50   0000   0B16   0000   0B36   0000   0B76   0000   0000   0000   0000 0000 0000 0000   0000 0000 0000 0000 0000 0000 0000 0000 0000
    0x0000B126   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000 0000   22EB   3D95   5BA3   F6D   0000      0D8A   0001   5140   0000   000c
    0x0000B13B   0000   4000   469C   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000   0000 0000   597C   45C4   0000   0000
    0x0000B150   6FDA   44F5   0000   0000      0000   0000   0000 4348   8536   3CF9   33D6   3F78   4000   471C   0000      0000   0000   0000 0000 0000 0000    0000   0000
    0x0000B165   0000   0000      0000   0000   22EB   3D95   5BA3   F6D   0000      0000   0000 0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000
    0x0000B17A   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   41A0   6666   3F66   CCCD
    0x0000B18F   3DCC   0000   0000   0000      0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   89D4   3ED7   307A   3D61
    0x0000B1A4   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000   0000 0000   0000 307A   3E1   307A   3D61   0000      0000
    0x0000B1B9   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   3F80   D70A   3CA3
    0x0000B1CE   0000      0000 0000   0000   0000    0000   0000 0000   4080   0000   0000   0000   0000 0000   0000 0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000
    0x0000E3 B10000    

    但是、当我使用 pragma (#pragma DATA_SECTION (MOTOR_FOCd、"MSGRAM_CPU_TO_CM")在 MSG CPU 至 CM 存储器(0x39000)中声明它时、根本不会初始化该结构。

    0x00039000   MOTOR_foc
    0x00039000   0000      0000 0000      0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039015   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003902A   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003903F   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039054   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039069   0000   0000   0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003907E   0000   0000   0000      0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039093   0000   0000   0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000390A8   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000390BD   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000390D2   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000390E7   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000390FC   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039111   0000   0000   0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039126   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003913B   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039150   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x00039165   0000   0000   0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003917A   0000      0000 0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x0003918F   0000   0000   0000      0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000391A4   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000391B9   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000391CE   0000      0000 0000      0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000391E3   0000   0000   0000   0000   0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000   0000   0000 0000   0000   0000 0000    0000
    0x000391F8   0000   0000   0000   0000   0000    0000   0000   0000 0000

    下面是创建和初始化结构的方法:

    #pragma DATA_SECTION (MOTOR_Cfoc,"MSGRAM_CPU_TO_CM");
    静态 FOC_STRUCT_MOTOR_foc[]=

     {
     ///---- MOTOR_1 ------------------------------------------------
     //----马达参数结构------------------------
     .mmotor_cfg.Rs                        =(float32_t) motor1_RS、
     .mmotor_cfg.LD                        =(float32_t) motor1_LD、
     .mmotor_cfg.lq                        =(float32_t) motor1_lq、
     .mmotor_cfg.kV                        =(float32_t) motor1_kV、
     .mmotor_cfg.ke                        =(float32_t) motor1_KE、
     .mmotor_cfg.ki                        =(float32_t) motor1_Ki、
     .mmotor_cfg.polePairs                 =(float32_t) motor1_polars_pairs、
     ///----电机购置结构----------------------------------
     MOTOR_ACQ.p_adcRegs[0]              = MOTOR12_IVA_ADC_regs、
     MOTOR_ACQ.p_adcRegs[1]              = MOTOR12_IVB_ADC_regs、
     MOTOR_ACQ.p_adcRegs[2]              = MOTOR12_IVC_ADC_regs、
     MOTOR_ACQ.p_adcRegs[3]              = MOTOR12_VBUS_ADC_regs、
     MOTOR_ACQ.p_adcResultRegs[0]        = MOTOR12_IVA_ADC_RESULT_regs、
     MOTOR_ACQ.p_adcResultRegs[1]        = MOTOR12_IVB_ADC_Result_Regs、
     MOTOR_ACQ.p_adcResultRegs[2]        = MOTOR12_IVC_ADC_Result_Regs、
     MOTOR_ACQ.p_adcResultRegs[3]        = MOTOR12_VBUS_ADC_Result_Regs、
     MOTOR_ACQ.p_vaMeasReg               =(volatile uint16_t *)(motor1_va_adc_PPB_Result_ADDR)、
     MOTOR_ACQ.p_vbMeasReg               =(volatile uint16_t *)(motor1_VB_ADC_PPB_Result_ADDR)、
     MOTOR_ACQ.p_vcMeasReg               =(volatile uint16_t *)(motor1_VC_ADC_PPB_Result_ADDR)、
     MOTOR_ACQ.p_vBusMeasReg             =(volatile uint16_t *)(MOTOR12_VBUS_ADC_PPB_RESULT_ADDR)、
     MOTOR_ACQ.p_iaMeasReg               =(volatile Int16_t *)(motor1_IA_ADC_PPB_RESULT_ADDR)、
     MOTOR_ACQ.p_ibMeasReg               =(volatile Int16_t *)(motor1_IB_ADC_PPB_RESULT_ADDR)、
     MOTOR_ACQ.p_icMeasReg               =(volatile Int16_t *)(motor1_IC_ADC_PPB_RESULT_ADDR)、

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

    最后我发现了这个问题。

    这确实是启动初始化的问题。

    在"2838x_RAM_lnk_CPU1.cmd"文件的末尾处有"MSGRAM_CPU_TO_CM  > CPUTOCMRAM、type=NOINIT"

    删除"type=NOINIT"可以解决我的问题。 现在、结构已初始化良好、指针也已初始化。

    Jérôme μ A