[STM32F4]

为什么lwip raw模式不适合带操作系统?

[复制链接]
1768|10
手机看帖
扫描二维码
随时随地手机跟帖
nuc990|  楼主 | 2017-11-15 10:34 | 显示全部楼层 |阅读模式
本帖最后由 nuc990 于 2017-11-15 11:52 编辑

为什么用UCOS LWIP  都是socket或者netconn模式。
    带系统用RAW模式不行么?
关键TFTP传输文件都是RAW模式,又要跑系统加LWIP不好处理
yiyigirl2014| | 2017-11-15 11:01 | 显示全部楼层
这个就是为裸奔量身定制的,你说适合吗

使用特权

评论回复
yiyigirl2014| | 2017-11-15 11:01 | 显示全部楼层
LW这两个单词就已经定位好了它的位置了。

使用特权

评论回复
稳稳の幸福| | 2017-11-15 16:02 | 显示全部楼层
1.   LWIP有3种编程接口,分别为RAW,NETCONN和SOCKET。
   RAW:RAW编程接口不需要操作系统的支持,可以直接裸机使用LWIP,但是RAW编程接口比较复杂,使用的是回调机制。
   NETCONN和SOCKET:这两种编程接口都需要有操作系统的支持。

使用特权

评论回复
稳稳の幸福| | 2017-11-15 16:02 | 显示全部楼层
看懂了吧,那个模式就是为没有操作系统的实现准备的。

使用特权

评论回复
稳稳の幸福| | 2017-11-15 16:03 | 显示全部楼层
2.  UDP协议简介
     UDP协议的中文名字是用户数据包协议,是一种无连接的(TCP是面向连接的),不可靠的传输协议。
     缺点:因为UDP自身没有确认机制来确认数据包是否正确的发送到目的主机,因此UDP报文有可能丢失,出错等。
     优点:UDP的协议代码量少,处理过程简洁,实时性好,因此适合那些对轻微的数据差错不敏感的应用,如网络电话和网络视频等。
3.  UDP组织形式
    LWIP中使用UDP控制块来描述UDP,UDP控制块是一个结构体,这个结构体在udp.h中。
struct udp_pcb {
  IP_PCB;      //见下文中3.1对IP_PCB的定义

  struct udp_pcb *next;   //完成链表

  u8_t flags;    //状态信息  可用的见下面3.2定义

  u16_t local_port, remote_port;  //本地端口和远端端口

#if LWIP_IGMP

  ip_addr_t multicast_ip;
#endif

#if LWIP_UDPLITE

  u16_t chksum_len_rx, chksum_len_tx;
#endif


  udp_recv_fn recv;  //接收回调函数  定义见3.3  将函数写好,赋给PCB的这个字段,LWIP在接收到数据的时候                                 //会自动调用这个函数进行处理

  void *recv_arg;  
};

3.1   IP_PCB定义
#define IP_PCB \
  ip_addr_t local_ip; \
  ip_addr_t remote_ip; \
  u8_t so_options;      \
  u8_t tos;              \
  u8_t ttl               \
  IP_PCB_ADDRHINT
3.2  UDP_PCB的状态信息
#define UDP_FLAGS_NOCHKSUM       0x01U
#define UDP_FLAGS_UDPLITE        0x02U
#define UDP_FLAGS_CONNECTED      0x04U
#define UDP_FLAGS_MULTICAST_LOOP   0x08U
3.3  recv回调函数
typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port);

4.  RAW_UDP相关API函数
new_udp()    新建一个UDP的PCB控制块
udp_remove()   将一个PCB控制块从链表中删除,并释放这个控制块的内存
udp_bind()    为UDP的PCB绑定一个本地IP地址和端口号
udp_connect()   连接到指定IP地址主机的指定端口号,其实就是设置PCB控制块的remote_ip和remote_port。
udp_disconnect()  断开连接
udp_send()   通过一个PCB控制块发送数据

使用特权

评论回复
john_lee| | 2017-11-16 15:30 | 显示全部楼层
RTOS + lwip RAW 就相当于 netconn 或 socket 了,如果你自认为你能够来做这个事(RTOS + lwip RAW)而且比 netconn 或 socket 做得好,大家都支持你。

使用特权

评论回复
gujiamao12345| | 2017-11-16 16:08 | 显示全部楼层
学习一下

使用特权

评论回复
Soraka| | 2017-11-21 17:21 | 显示全部楼层
RAW编程接口不需要操作系统的支持,可以直接裸机使用LWIP

使用特权

评论回复
android2| | 2017-11-21 18:20 | 显示全部楼层
UDP控制块是一个结构体,这个结构体在udp.h中

使用特权

评论回复
xinpian101| | 2017-11-21 20:00 | 显示全部楼层
这个模式专门为裸奔而设计

使用特权

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

本版积分规则

95

主题

191

帖子

0

粉丝