正点原子lwIP学习笔记——NETCONN接口UDP实验

1. NETCONN接口UDP配置

  1. netconn_new:创建NETCONN控制块(udp_new/udp_recv);
  2. netconn_bind:绑定本地IP地址和端口号;
  3. netconn_connect:绑定目的IP地址和目的端口号并且插入PCB链表;
  4. send/recv:调用NETCONN相关函数发送和接收数据。

具体的原理,在UDP实验中已经有过介绍,其实就是netconn再次封装去调用udp的函数

2. NETCONN接口UDP实验

例程功能:
本实验使用 NETCONN 编程接口实现 UDP 连接,我们可通过按下 KEY0 按键发送数据至网络调试助手,还可以接收网络调试助手发送的数据,并在 LCD 显示屏上显示。

在main.c中,最后调用freertos_demo开启OS;FreeRTOS中先配置各个任务的优先级和任务堆栈;freertos_demo中,创建start_task任务,然后开启任务调度

start_task中,先调用lweip_test_ui开启lcd的一些显示界面的内容;taskENTER_CRITICAL进入临界区后,xQueueCreate创建消息队列

然后通过xTaskCreate创建lwIP任务、key任务、LED任务和显示任务;然后vTastDelete删除开始的start_task任务后,taskEXIT_CRITICAL退出临界区;

key和LED就不多做讲解比较简单;

显示任务就是display_task,会先mymalloc申请内存给数据缓冲区buffer,如果有消息了,消息队列g_display_queue非空,就把buffer用memset先清零,然后xQueueReceive接收消息,在通过lcd的函数进行显示;显示完成后,myfree释放buffer内存;

lwIP的任务就是lwip_demo_task,会调用lwip_demo;这个函数中就是本次课程的重点lwIP协议的各个实现;先通过netconn_new创建控制块,NETCONN_UDP是传入的初值,等于0x20代表采用UDP;然后定义接收超时时间;

创建完成后,调用netconn_bind绑定控制块的本地IP地址和端口;然后netconn_connect连接本地和远程;

完成后,判断指定按键是否按下,按下了就会netbuf_new构建一个sentbuf的pbuf数据,然后netbuf_alloc创建内存,用memcpy把数据拷贝仅这个pbuf里面,最后把判断的数据位清零并调用netbuf_delete释放sentbuf内存;

接收数据则调用netconn_recv,把数据传入recvbuf,如果recvbuf非空,就可以遍历pbuf链表用memcpy把数据拷贝到数据缓冲区g_lwip_demo_recvbuf(先用memset清零);然后调用xQueueSend以消息队列方式发送到显示任务中显示;最后netbuf_delete释放recvbuf的内存

总结

使用NETCONN实验UDP,比使用RAW接口要简单很多,回调函数不需要自己实现,只需要在FreeRTOS中创建对应任务之后,在构建消息队列完成数据的传输就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值