本帖最后由 zhoujianwen 于 2016-7-19 11:45 编辑
第一:
udp_server_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p,struct ip_addr *addr, u16_t port)
{ u8_t *buffer;
struct ip_addr destAddr = *addr;
struct pbuf *temp;
u16_t i;
temp=arg;
buffer=p->payload;
if(p != NULL)
{
for(i=0;i<p->len;i++)
{
while((USART2->SR&0X40)==0);
USART_SendData(USART2,buffer);
}
udp_sendto(pcb,p,&destAddr,port);
pbuf_free(p);
}
}
第二:
udp_server_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p,struct ip_addr *addr, u16_t port)
{ u8_t *buffer;
struct ip_addr destAddr = *addr;
struct pbuf *temp;
u16_t i;
temp=arg;
if(p != NULL)
{
for(i=0;i<p->len;i++)
{
while((USART2->SR&0X40)==0);
USART_SendData(USART2,(p->payload));或者是USART_SendData(USART2,p->payload);
}
udp_sendto(pcb,p,&destAddr,port);
pbuf_free(p);
}
}
为什么第一个可以编译通过,第二个就出现 error: #852: expression must be a pointer to a complete object type。
可以帮我解释一下吗,如果我不想经历指针赋值这个操作,直接使用payload这个指针,我该怎么做呢?
下面是结构体的内容:
struct pbuf {
struct pbuf *next;
void *payload;
u16_t tot_len;
u16_t len;
u8_t flags;
u16_t ref;
};
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢解析啊。感谢
我要用的是直接使用p->payload来调用缓存区元素,而不是使用buffer【i】这样的形式去调用元素。我的意思是怎么使用p->payload【i】这样的形式去调用元素。因为我这样写程序出现error
((uint8_t*)(p->payload))[0]
good的,我自己也搞出来了,为什么void类型的不行啊?
一周热门 更多>