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:在发布模式下、访问 C28内核和 CM 内核之间的共享 RAM 时出现问题

Guru**** 2535670 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1175498/tms320f28388d-problem-in-release-mode-when-access-shared-ram-between-c28-cores-and-cm-core

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

您好!

我正在使用 MCU F28388D 开发我的项目、我使用了 MCU 的全部3个内核。

当我在调试模式下为3个内核构建3个项目时、一切仍然正常(优化杆:关闭。 opt_for_speed :Level 2)。

但是、当我在发布模式下构建它们时、会出现问题、详细信息如下:

CPU1内核:--opt_ar杆:o2、opt_for_speed:Level2。

CPU2内核:--opt_ar杆:o2、opt_for_speed:Level2。

CM 芯:-opt_fort:OFF,opt_for_speed:LEVEL2。

我的 C28x 编译器:TI v 18.12.4.LTS 和 ARM 内核:TI v18.12.4.LTS。 C2000ware_motorcontrol_SKD_3_00_01_00内的 C2000ware 版本3.02.00.00。 CCS9.3.0.00012

程序仍在运行、但存在问题、当 CPU2从 CM 内核到 CPU2内核之间的共享 RAM 读取变量时、发现故障(CPU1内核也会发生这种情况)。

我放置在背接地环路中的读取命令(while (1)位于主环路中:

CPU2内核中的示例代码

void main()

       .

     while (1) //后接地环路

      {

            //从共享 RAM CM 读取变量到 CPU2

             sysmode = ipcCMtoCPU2Data.systemMode; =>失败

              …
       }

临时解决   方案,在读取命令"sysmode = ipcCMtoCPU2Data.systemMode"或将-opt_level ->关闭或将 opt_for_speed 更改为1级之前,我将 delay device_delay_US (10U)-大约10us。程序运行正常。

但我不知道根本的内核原因、我认为问题与访问 CPU 内核之间的共享 RAM 和保护芯片的安全功能有关?  

您能否在 TRM、数据表等文档中向我提供有关此问题的原因或信息?

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

    您好!
    systemMode 变量成员是否定义为 volatile? 否则、编译器可能会优化对它的访问。
    编译器必须知道、可以随时通过外部上下文更改此变量。

    此致、
    Andy

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

    Andy 有很好的建议。 这里"失败"的含义是什么? 它读出的值是否错误? 如果是,则如何同步读取? 它是否基于 IPC 中断/状态? 否则、这也会导致这样的问题。

    此致、

    Vivek Singh

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

    您好!

    感谢您的回复、

     -"失败"表示 CPU2无法读取变量、它不是"读取错误值"。 我遵循了 Andy 的建议->问题已解决。 问题可能来自易失性变量。

    但"它是否基于 IPC 中断/状态?"  ->我不使用 IPC 中断或状态、我只是使用两个内核并访问它们的共享 RAM (两个内核可以一起查看的相同地址)、我遵循了这种类型的使用 C2000Ware_MotorControl_SDK 中示例项目电机控制中的共享 RAM - >是否必须使用 IPC 中断?

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

    感谢您的建议、它解决了我的问题。