打印
[STM32F1]

KEIL 编译器报的一个语法错误

[复制链接]
1656|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dudongdao|  楼主 | 2014-7-17 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
__packed struct SPacketQueue
{
        struct SPacketQueue  *pNext;
        struct SPacketQueue  *pPre;
        DWORD        Seq;                                /* sequence of this packet */
        struct SMemHead  *MemHead;        /* packet store in MemHead' playload */
};

/* tcb (transmit control block). used to keep tcp state
information */
__packed struct STCB
{
        struct STCB  *pNext;   /* Next Node */

        BYTE        TCPState;
        WORD        PortScr;
        WORD        PortDest;
        IP_ADDR        IPScr;
        IP_ADDR IPDest;

        DWORD        SeqMine;

        struct SPacketQueue  *QUnacked;               


};

上面是定义的结构体,函数如下:

void TCPRelease(struct STCB  *pTCB)
{
        struct SPacketQueue  *pQ;

        /* reclaim Q, and free packet in queue */

        while(pQ = TCPOutQ(&(pTCB->QUnacked)))
                MemFree(pQ->MemHead);


}
这个函数里面报错  error:  #167: argument of type "struct SPacketQueue *__packed *" is incompatible with parameter of type "struct SPacketQueue **"

如果去掉 __packed struct STCB前面的__packed ,就不报错,请问各位大侠,这是什么毛病,我想所有的参数都对其。
沙发
mmuuss586| | 2014-7-17 13:31 | 只看该作者
结构体里又定义结构体,这样不支持吧;

使用特权

评论回复
板凳
爱不孤单| | 2014-7-17 13:54 | 只看该作者
pTCB->QUnacked本来就是 struct SPacketQueue  *,如果你再一次取地址就变成struct SPacketQueue  **类型,我想TCPOutQ()函数参数类型应该不是吧,struct SPacketQueue *__packed *这个是什么类型,LZ最好把TCPOutQ()的函数原型也发出来

使用特权

评论回复
地板
dudongdao|  楼主 | 2014-7-18 10:51 | 只看该作者
好的~~   

/* move the last unit in queue outof queue,if the queue
is empty return FALSE.actrually last unit is *ppQ */
struct SPacketQueue  * TCPOutQ(struct SPacketQueue  ** ppQ)
{
        struct SPacketQueue  *pQ;

        /* a empty queue? */
        if((pQ = *ppQ) == NULL)
                return NULL;

        /* after remove it, the queue is empty? */
        if(pQ->pNext == pQ)
                *ppQ = NULL;
        else
        {
                /* relink */
                pQ->pPre->pNext = pQ->pNext;
                pQ->pNext->pPre = pQ->pPre;

                /* and the queue head *ppQ point to pQ->pPre */
                *ppQ = pQ->pPre;
        }
       
        /* relaim it. link to QFreeList */
        pQ->pNext = QFreeList;
        QFreeList = pQ;
        return pQ;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

413

帖子

1

粉丝