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.

[参考译文] TMS320F28384S:将 NULL 基准从 C28传递到 CM

Guru**** 2393075 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1225643/tms320f28384s-passing-null-reference-from-c28-to-cm

器件型号:TMS320F28384S

您好!

在我的应用程序中,我需要 使用 IPC_sendCommand() API 将几个数据结构的地址和长度与其他信息一起传递给 CM。

但是、在一个情况下、我需要传递 NULL:

IPC_sendCommand (
  IPC_CPU1_L_CM_R
  ESBUS_IPC_FLAG_TX_Outputs、
  IPC_ADDR_CORRECTION_ENABLE、
  info.ch、
  (uint32_t) NULL、
  0);

在 本例中、我注意到在 CM 侧、在0xA000E000中转换为 NULL (=0)。

这不会给我带来任何问题、但我 想知道这种行为是否 可行。

谢谢!

Carlo

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

    Carlo,

    您正在尝试将 typecast NULL 转换为无符号整数。 您不能这样做。 通常为指针分配 null。 无法直接发送实际无符号整数值的原因。

    此致、

    Manoj

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

    您好 Manoj:

    感谢您的答复。 我很抱歉现在只能回答,但我已经不在办公室了几天了。

    我不确定我是否理解了您的答案。

    如 TI 示例所示、数据结构地址作为32_t 的稳态点类型传递、如 ipc_ex1_basic_c28x1示例中的以下代码片段所示。

    #pragma DATA_SECTION (ReadData、"MSGRAM_CPU_TO_CM")
    uint32_t ReadData[10];


    IPC_sendCommand (IPC_CPU1_L_CM_R、IPC_FLAG0、IPC_ADDR_CORRECTION_ENABLE、
    IPC_CMD_READ_MEM、(uint32_t) ReadData、10);

    这样、为了实现代码紧凑和清理、我也 对 NULL 使用了此模式、在这种情况下、我没有任何数据结构从 C28传递到 CM。

    如前所述、NULL (在 string.h 中定义为0)在 CM 端的0xA000E000中进行转换、我想知道为什么。

    谢谢!

    Carlo。

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

    Carlo,

    Unknown 说:
    IPC_sendCommand (IPC_CPU1_L_CM_R、IPC_FLAG0、IPC_ADDR_CORRECTION_ENABLE、
    IPC_CMD_READ_MEM、(uint32_t) ReadData、10);

    你是否尝试单步执行代码并从 C28x 端检查从 C28x 端写入了什么? 我目前生病了、需要几天时间才能恢复。 我可以在周五回到办公室时尝试这种方法。

    此致、

    Manoj

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

    您好 Manoj:
    我希望你感觉更好。

    我试图进入 IPC_sendCommand (),但我有一些排序符号分解问题,我无法获得很多。
     我唯一认为的是、如果设置了 IPC_ADDR_CORRECTION_ENABLED 标志、则会执行以下调整:

    IPC_Instance [ipcType].IPC_SendCmd_Reg->IPC_SENDADDR = addr - IPC_Instance [ipcType].IPC_MsgRam_LtoR;  

    谢谢!
    Carlo

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

    启用地址校正后问题是否会消失? M4 - C28x (或) C28x - M4需要启用地址校正、因为如果是16位且 M4字大小为8位、则 C28x 的字大小会为8位。

    此致、

    Manoj

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

    您好 Manoj:
    我已经在使用  IPC_ADDR_CORRECTION_ENABLE 标志。

    在 C28侧、我会调用:

    IPC_sendCommand (
      IPC_CPU1_L_CM_R
      my_IPC_FLAG、
      IPC_ADDR_CORRECTION_ENABLE、
      我的信息、
      (uint32_t) NULL、
      0);

    在 CM 侧、我会调用:

    if (IPC_readCommand (
      IPC_CM_L_CPU1_R
      my_IPC_FLAG、
      IPC_ADDR_CORRECTION_ENABLE、
      我的信息(&M)、
      地址(&A)、
      不使用(&UNUSED))

    'addr'等于 0xA000E000。

    此致、
    Carlo

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

    好的。 我需要自己检查一下,并与你回去。 请给我3 - 4个工作日与您联系。

    此致、

    Manoj