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.

[参考译文] F28M35H52C:尝试增加大小时IPC循环缓冲区问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1090472/f28m35h52c-ipc-circular-buffer-problem-when-trying-to-increase-size

部件号:F28M35H52C
主题:controlSUITE中讨论的其他部件

您好,

我正在尝试通过将 IPC_BUFFER_SIZE设置为大于4的数字来增加IPC循环缓冲区的大小。

我在 DSP方面对F28M35x_Ipc_drivers.h和ARM方面对ipc.h进行了这一更改。

当更新和运行时,代码在DSP端的while循环中执行,此处为:

IPCCtoMReqMemAccess (&G),sIpcController1,S1_Access,IPC_SX_C28MASTER,
enable_blocking);
while ((RAMRegs.CSxMSEL.ALL & S1_ACCESS)!= S1_ACCESSIE)

}  

有人能帮我解决这个问题吗?

我尝试增加缓冲区大小的原因是,有一次PUT缓冲区已满,没有生成更多中断,因此另一端也无法清除缓冲区,通信停止。

也许有人也知道为什么会发生这种情况?

谢谢!

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

    您好,NIR,

    您是否尝试过增加尺寸并遇到任何问题? 我认为它应该起作用,但我们没有验证它。

    谢谢,此致,

    Santosh

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

    您好,Santosh:

    是的,我尝试过,但它却被卡在我上面提到的代码中。

    您能否尝试看看这是否对您有效?

    谢谢你。

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

    NIR,

    您是否可以评论您为缓冲区大小声明的新大小?  我看到的唯一限制如下:

    1)必须为偶数

    2)不得超过.cmd文件中分配的共享RAM。  controlSUITE中的通用链接器显示了以下大小:

    CTOMRAM    :原始= 0x03F800,长度= 0x0.038万    /* C28至M3消息RAM */
     MTOCRAM    :原始= 0x03FC00,长度= 0x0.038万    /* M3到C28消息RAM */

    我还要仔细检查链接器的长度是否限制为小于缓冲区大小。

    最佳,

    Matthew

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

    wMatthew,

    我尝试了6,8,16的缓冲区大小,但它们都不工作。

    CTOMRAM    :原始= 0x03F800,长度= 0x0.038万    /* C28至M3消息RAM */
     MTOCRAM    :原始= 0x03FC00,长度= 0x0.038万    /* M3到C28消息RAM */

    这正是我在cmd文件中的内容

    [quote userid="8973" url="~ë/support/mspros/c2-mspicer-group/c2000/f/c2000-mspiners-forum/1090472/f28m35h52c-ipc-circirc- buffer-problem-wring-trying2000 buffer-problem-wring-trying to109.0472万 to increase size/4040.404万4040401"[]我404.0401万我还会仔细检查您的长度是否限制为小于您的链接器/您的缓冲区大小。

     您能解释一下您的意思吗? 我应该如何检查?

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

    这是否可能限制了RAM大小? 页面大小是多少?

    CtoM_DataRAM:> RAMS6 PAGE=1
    MTOC_DataRAM:> RAMS7 PAGE=1

    /*使用IPC API驱动程序时,需要以下部分定义*/
    组:> CTOMRAM,页= 1

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }

    组:> MTOCRAM,页= 1

    GETBUFFER:类型= DSECT
    GETWRITEIDX:类型= DSECT
    PUTREADIDX :类型= DSECT
    }

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

    NIR,

    感谢您考虑我的建议,第一个答案就是我想要看到的,0x380的分配与我们的示例相同。  链接程序已分配最大大小-20个字。  因此,2016年6月8日的值应该不是问题。

    对于第二篇文章,如果内存用于程序代码(page=0)或数据(page=1),则页面声明是一个参考,因此这与您的问题无关。

    我认为问题一定出在驱动程序本身;我认为您需要修改2个.h文件(或者我们可能正在使用其中一个),一个用于C28x,另一个用于M3

    M3 .h位于路径C:\ti\controlSUITE_latest\device_support\f28m35x\v220\Mware\driverlib\ipc.h中  

    C28x .h位于路径C:\ti\controlSUITE_latest\device_support\f28m35x\v220\F28M35x_common\include\F28M35x_IPC_drivers中

    您能否确保并更新这两个文件,并查看这是否解决了问题?

    最佳,

    Matthew

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

    Matthew,您好!

    我尝试将文件更新到最新版本(v220),我使用的是207。

    它没有帮助,我也尝试更新. c文件,但这也没有改变。

    我有什么想法可以调试问题?

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

    NIR,

    我仍在与团队中的其他人一起研究这个问题。  请再给我一天时间来提供最新信息。

    最佳,

    Matthew

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

    NIR,

    我们仍在研究此问题,同时,您是否能够单步浏览增加的缓冲区代码,以查看当您超过默认值4时最终会发生什么情况?

    最佳,

    Matthew

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

    Matthew,

    DSP侧ID上的代码卡在该While循环中:

    IPCCtoMReqMemAccess (&g_sIpcController2, S1_ACCESS, IPC_SX_C28MASTER,
    					 ENABLE_BLOCKING);
    while ((RAMRegs.CSxMSEL.all & S1_ACCESS) != S1_ACCESS)
    {
    }

    (无法访问S1)

    谢谢!

    NIR

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

    S1是我写入从DSP传递到ARM的数据的地方。

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

    NIR,

    我也在尝试在我的终端上重新创建这个。  是否可以共享您的项目文件?  现在,我正在尝试修改controlSUITE中的IPC示例,但如果您认为共享文件有任何好处,就需要询问。  如果需要,我可以设置E2E不可见的云共享(如果您的源代码需要私有)。

    最佳,

    Matthew

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

    Matthew,

    对我来说,共享项目的所有源代码是一个问题,如果你认为很少的文件就足够了,那就可以了。 请告诉我您的想法以及您是否取得了一些进展。  

    谢谢!

    NIR。

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

    NIR,

    我一直在查看我们的示例,其中一个不同之处是,我们使用的是S0内存,而您在上面的示例中显示的是S1内存。  虽然这似乎不能解释直接添加IPC缓冲区长度,但C28x停止等待M3的访问权限这一事实让我很想知道M3是不是在启动时或之后没有设置S1。  

    只是确认一下,在增加IPC缓冲区大小之前,S1的使用不是一个问题?  只是想排除多个代码更改会给我们带来一些问题,但看起来像IPC缓冲区。

    最佳,

    Matthew

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

    Matthew,您好!

    是的,我始终使用S1进行DSP到ARM传输,使用S0进行ARM到DSP传输。在增加缓冲区大小之前和之后没有变化。

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

    NIR,

    我们尚未成功复制,如果您可以共享一些与您的设置相关的文件,这将会有所帮助。

    最佳,

    Matthew

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

    您是如何复制的? 您使用的是什么项目?

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

    NIR,

    我使用了C:\ti\controlSUITE\DEVICE_SUPPORT\f28m36x\v220\F28M36x_Examples_Dual\ctom_ipcdrivers\示例。  我修改了.h文件以增加缓冲区大小,但看了示例代码,我不确定它是否以与您的代码相同的方式使用IPC RAM。

    最佳,

    Matthew