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:IPC 的使用像 CLA MSG RAM?

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1496856/tms320f28388d-ipc-usage-like-cla-msg-ram

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

工具/软件:

您好、

我在实施 IPC 方面遇到了很多问题、这是一个巨大的问题。 我花了一段时间让一些东西运行起来、最近 CPU 之间共享的数据结构发生了变化、再次破坏了它、我不知道发生了什么问题。 我花了这么多的时间在这些问题上,时间我不花在微控制器的实际操作...这是非常令人沮丧。

有没有办法让事情变得更容易? 例如,有一个类似于 CPU CLA MSG RAM 的软件实现,异步写入和读取数据,没有所有的中断,标志等麻烦?

提前感谢、

此致、

Adrien

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

    尊敬的 Adrien:  

    很遗憾听到您的困难。 您能解释一下是在应用中使用 CLA、还是仅在 IPC 中使用?

    我建议先查看空白 IPC 示例https://dev.ti.com/tirex/explore/node?node=A__APCOgL6qulEhjoVekLevtA__C2000WARE__1kRFgrO__LATEST&placeholder=true

    至于 CLA MSG RAM 示例、我建议查看 CLA Workshop https://www.ti.com/video/series/control-law-accelerator--cla--hands-on-workshop.html 

    请注意、此视频详细介绍了何时使用 MSG RAM。


    此致、

    Ozino

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

    尊敬的 Ozino:

    我在该工程中使用了 CLA 和两个内核。

    CLA 简单。 一个 R/W 部分、另一个只有 R、反之亦然。 数据传输非常简单。

    IPC 是...不是。 我正在传输3个数据包、代码几乎相同、但三分之一的数据包无法正常工作、原因不明。 从提供的示例开始、我已经花了几周的时间才能实现目标。

    所以问题是...是否有可能使 IPC 更容易? 将 IPC 转换为类似于 CLA/CPU 通信的东西?

    例如、这可能是一个非常糟糕的主意、但如果我用1个大表填充 CPU1TOCPU2RAM、并将 CPU1数据放在我在该表中选择的某个位置、会怎么样。 CPU2是否可以在不通过 IPC 中断机制的情况下随时读取此表?

    我知道、由于两个内核的代码是独立编译和链接的、因此无法让另一个程序中内置的变量的位置已知。 它会解释中断机制、该机制会将要传输的数据地址发送到接收内核。 但是、如果可以强制设置 CPU1TOCPU2RAM 中变量的地址、则 CPU2可以在需要时直接获取数据、从而简化传输(并且与 CPU 和 CLA 之间的数据传输类似)。

    提前感谢、

    此致、

    Adrien

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

    尊敬的 Ozino:

    通过浏览"类似的主题",我找到了我的答案,基于以下帖子:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/994087/tms320f28377d-cpu2-to-cpu1-ipc-msg-ram-access

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1092074/tms320f28377d-cpu1-not-receiving-update-of-shared-arrays-whereas-cpu2-can/4044296#4044296

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_methods_to_force_an_ordering_of_global_variables.html

    在共享的.h 文件中,我将要交换的变量的内存地址放在内存中:

    #define CPU1_TO_CPU2_BASE_ADDRESS			0x03A000
    #define CPU1_TO_CPU2_STATUS_ADDRESS			(CPU1_TO_CPU2_BASE_ADDRESS)
    #define CPU1_TO_CPU2_MEASUREMENTS_ADDRESS	(CPU1_TO_CPU2_STATUS_ADDRESS + sizeof(status_t))
    
    #define CPU2_TO_CPU1_BASE_ADDRESS			0x03B000
    #define CPU2_TO_CPU1_STATUS_ADDRESS			(CPU2_TO_CPU1_BASE_ADDRESS)
    #define CPU2_TO_CPU1_MEASUREMENTS_ADDRESS	(CPU2_TO_CPU1_STATUS_ADDRESS + sizeof(status_t))

    然后在每个程序中,具有相同名称和位置的变量:

    #pragma LOCATION(s_status_cpu1_to_cpu2, CPU1_TO_CPU2_STATUS_ADDRESS)
    static status_t s_status_cpu1_to_cpu2	
    
    #pragma LOCATION(s_status_cpu2_to_cpu1, CPU2_TO_CPU1_STATUS_ADDRESS)
    static status_t s_status_cpu2_to_cpu1	
    
    #pragma LOCATION(s_measurements_cpu1_to_cpu2, CPU1_TO_CPU2_MEASUREMENTS_ADDRESS)
    static measurements_t s_measurements_cpu1_to_cpu2;
    
    #pragma LOCATION(s_measurements_cpu2_to_cpu1, CPU2_TO_CPU1_MEASUREMENTS_ADDRESS)
    static measurements_t s_measurements_cpu2_to_cpu1;	

    现在、两个 CPU 都可以异步读取来自另一个 CPU 的数据、而无需执行中断过程。

    这似乎适用于 CPU1和 CPU2、因为两个内核的存储器映射是相同的。 它很容易识别一个内核写入的数据可被另一个内核读取的位置。

    但是、与 CM 之间的存储器映射差别很大。

    CPU1存储器:

       CPUTOCMRAM      : origin = 0x039000, length = 0x000800
       CMTOCPURAM      : origin = 0x038000, length = 0x000800

    CM 内存:

    CPU1TOCMMSGRAM0  : origin = 0x20080000, length = 0x00000800
    CMTOCPU1MSGRAM0  : origin = 0x20082000, length = 0x00000800

    因此、如果 CPU1在 CPUTOCMRAM 中写入数据(例如在基址0x039000处)、我不知道从 CM 中可以读取数据的位置、反之亦然。

    CM 和 CPU1的存储器部分之间的对应关系是什么? CPU1的0x039000是否等于 CM 的0x20080000?

    提前感谢、

    此致、

    Adrien

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

    尊敬的 Adrien:

    很高兴听到您在发展方面取得了进展。 感谢您的反馈。

    关于 CM 和 CPU 之间的存储器共享、我建议查看 C2000Ware 中提供的 CM 示例。

    它将显示在何处可以读取 CM 存储器  

    https://dev.ti.com/tirex/explore/node?node=A__ANwwURrRiqh4Fp5sl6q1qQ__C2000WARE__1kRFgrO__LATEST 

    此致、

    Ozino