初级会员

- 积分
- 120
- 金钱
- 120
- 注册时间
- 2016-6-15
- 在线时间
- 34 小时
|

楼主 |
发表于 2017-3-24 10:42:26
|
显示全部楼层
void led_task(void *pdata)
{
u8 err;
while(1)
{
LED0 = !LED0;
udp_demo_Send_data();//UDP发送
OSTimeDlyHMSM ((CPU_INT16U ) 0,
(CPU_INT16U ) 0,
(CPU_INT16U ) 0,
(CPU_INT32U ) 50,
(OS_OPT ) OS_OPT_TIME_HMSM_NON_STRICT,
(OS_ERR *)&err); //延时50ms
}
}
//UDP发送
void udp_demo_Send_data(void)
{
u8 key;
key=KEY_Scan(0);
if(key==KEY0_PRES)//KEY0按下了,发送数据
{
udp_demo_senddata(_demo_udppcb); //发送:本机通过UDP发送数据
printf("Key0按下");
}
}
//本机通过UDP发送数据----过程:申请pubf内存->>装上要发送的数据->> udp数据包发送 ->> 释放pbuf内存
void udp_demo_senddata(struct udp_pcb *upcb)
{
struct pbuf *ptr;
u16 err=0;
CPU_SR_ALLOC();
//调用lwip协议栈的pbuf数据包内存申请函数(那个层的数据,数据包内容大小,pbuf的类型)
ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)udp_demo_sendbuf),PBUF_POOL); //申请内存
if(ptr)
{
///把要发送的应用的数据包内容复制到申请的pubf里面
err = pbuf_take(ptr,(char*)udp_demo_sendbuf,strlen((char*)udp_demo_sendbuf));
printf("pbuf_take_err:%d",err);
OS_CRITICAL_ENTER(); //关中断---进入临界区
///发送数据包内容 到 udp控制块upcb里面的记录的 远端IP 和 端口号
err = udp_send(upcb,ptr); //udp发送数据
OS_CRITICAL_EXIT(); //开中断---退出临界区
printf("udp_send_err:%d",err);
///释放申请的pbuf数据包内存
pbuf_free(ptr);
}
else
{
printf("pbuf数据包内存申请失败");
pbuf_free(ptr);
}
} |
|