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.

一个关于cppi_desc.h中结构体定义的困惑



在pdk下面cppi/cppi_desc.h中定义了QMSS的描述符定义:

typedef struct{
    ....
}Cppi_HostDesc;

typedef struct{
    ....
}Cppi_MonolithicDesc;

typedef union{
    Cppi_HostDesc *ptrHostDesc;
    Cppi_MonolithicDesc *ptrMonoDesc;
}Cppi_Desc;

对于Cppi_Desc union为什么里面是指针呢? LLD的代码里面很多定义描述符是使用 Cppi_Desc * pCppiDesc; 然后调用 pCppiDesc = (Cppi_Desc*)Qmss_queuePop(queue); 来获得描述符指针,但这个 pCppiDesc 是指向union的指针,该union才是描述符指针,虽然代码里面都是直接使用强制转换从一种指针转换成(Cppi_HostDesc*)或(Cppi_MonolithicDesc*), 没有问题,但我觉得这里对Cppi_Desc的定义有点不妥,应该改成下面这样。

typedef union{
    Cppi_HostDesc ptrHostDesc;
    Cppi_MonolithicDesc ptrMonoDesc;
}Cppi_Desc;

不知道我的理解是否正确,还请各位工程师答疑。谢谢.

  • Hi, 您好!

    pCppiDesc = (Cppi_Desc*)Qmss_queuePop(queue); 这里只是用pCppiDesc 临时保存了描述符的首地址。

    所以Cppi_Desc定义成是哪种数据类型都是可以的:原来的定义是可以的, 您提出的修改的方法也是可以的

    事实上Cppi_Desc定义成任何数据类型都可以正常运行, 主要原因是代码并没有用Cppi_Desc定义去解析结构体,只是用指针临时保存了首地址

    谢谢!

  • 你好, Kevin Cai.

    看来我把自己的想法说清楚了。用肯定没有错,只是指针的强转,因为没有使用union内的具体数据,只是在理解上钻牛角尖 的话有点不妥。 

    谢谢你的回复。