2019-07-20 18:25发布
刺客mfl 发表于 2016-11-21 14:00 [mw_shl_code=applescript,true]#ifndef __LWIPOPTS_H__ #define __LWIPOPTS_H__
正点原子 发表于 2016-11-21 18:32 我们用的OS,然后是我们综合实验的网络摄像头功能,测试出来的。
刺客mfl 发表于 2016-11-21 21:00 谢谢您能回答我的问题,你们测得时候也时快时慢吗,就像上面两张图一样
最多设置5个标签!
[mw_shl_code=applescript,true]#include "tcp_server_demo.h"
#include "lwip/opt.h"
#include "lwip_comm.h"
#include "led.h"
#include "lwip/lwip_sys.h"
#include "lwip/api.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//NETCONN API编程方式的TCP服务器测试代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2014/8/15
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//*******************************************************************************
//修改信息
//无
//////////////////////////////////////////////////////////////////////////////////
u8 tcp_server_recvbuf[TCP_SERVER_RX_BUFSIZE]; //TCP客户端接收数据缓冲区
u8 tcp_server_sendbuf[TCP_SERVER_TX_BUFSIZE];
u8 tcp_server_flag; //TCP服务器数据发送标志位
//TCP客户端任务
#define TCPSERVER_PRIO 6
//任务堆栈大小
#define TCPSERVER_STK_SIZE 300
//任务堆栈
OS_STK TCPSERVER_TASK_STK[TCPSERVER_STK_SIZE];
//tcp服务器任务
static void tcp_server_thread(void *arg)
{
OS_CPU_SR cpu_sr;
u32 data_len = 0;
struct pbuf *q;
err_t err,recv_err;
u8 remot_addr[4];
struct netconn *conn, *newconn;
static ip_addr_t ipaddr;
static u16_t port;
u8 Recv_Tcp_Flag = 0x80;
LWIP_UNUSED_ARG(arg);
conn = netconn_new(NETCONN_TCP); //创建一个TCP链接
netconn_bind(conn,IP_ADDR_ANY,TCP_SERVER_PORT); //绑定端口 8号端口
netconn_listen(conn); //进入监听模式
while (1)
{
err = netconn_accept(conn,&newconn); //接收连接请求
if (err == ERR_OK) //处理新连接的数据
{
struct netbuf *recvbuf;
netconn_getaddr(newconn,&ipaddr,&port,0); //获取远端IP地址和端口号
remot_addr[3] = (uint8_t)(ipaddr.addr >> 24);
remot_addr[2] = (uint8_t)(ipaddr.addr>> 16);
remot_addr[1] = (uint8_t)(ipaddr.addr >> 8);
remot_addr[0] = (uint8_t)(ipaddr.addr);
printf("主机%d.%d.%d.%d连接上服务器,主机端口号为:%d ",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3],port);
while(1)
{
if((Recv_Tcp_Flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //有数据要发送
{
err = netconn_write(newconn ,tcp_server_sendbuf,8192,NETCONN_COPY); //发送tcp_server_sendbuf中的数据
if((err == ERR_CLSD)||(err==ERR_RST)) //关闭连接或者重启网络
{
netconn_close(newconn);
netconn_delete(newconn);
printf("主机:%d.%d.%d.%d断开与视频服务器的连接 ",
remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3]);
break;
}
else
{
OSTimeDlyHMSM(0,0,0,2);//延时2ms
}
}
}
}
}
}
//创建TCP服务器线程
//返回值:0 TCP服务器创建成功
// 其他 TCP服务器创建失败
INT8U tcp_server_init(void)
{
INT8U res;
OS_CPU_SR cpu_sr;
u16 i;
for(i=0;i<8192;i++)
{
tcp_server_sendbuf = i;
}
OS_ENTER_CRITICAL(); //关中断
res = OSTaskCreate(tcp_server_thread,(void*)0,(OS_STK*)&TCPSERVER_TASK_STK[TCPSERVER_STK_SIZE-1],TCPSERVER_PRIO); //创建TCP服务器线程
OS_EXIT_CRITICAL(); //开中断
return res;
}
[/mw_shl_code]
[mw_shl_code=applescript,true]#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
//线程优先级
#ifndef TCPIP_THREAD_PRIO
#define TCPIP_THREAD_PRIO 5 //定义内核任务的优先级为5
#endif
#undef DEFAULT_THREAD_PRIO
#define DEFAULT_THREAD_PRIO 2
#define SYS_LIGHTWEIGHT_PROT 1 //为1时使用实时操作系统的轻量级保护,保护关键代码不被中断打断
#define NO_SYS 0 //使用UCOS操作系统
#define MEM_ALIGNMENT 4 //使用4字节对齐模式
#define MEM_SIZE 32000 //内存堆heap大小
#define MEMP_NUM_PBUF 30 //MEMP_NUM_PBUF:memp结构的pbuf数量,如果应用从ROM或者静态存储区发送大量数据时,这个值应该设置大一点
#define MEMP_NUM_UDP_PCB 6 //MEMP_NUM_UDP_PCB:UDP协议控制块(PCB)数量.每个活动的UDP"连接"需要一个PCB.
#define MEMP_NUM_TCP_PCB 10 //MEMP_NUM_TCP_PCB:同时建立激活的TCP数量
#define MEMP_NUM_TCP_PCB_LISTEN 6 //MEMP_NUM_TCP_PCB_LISTEN:能够监听的TCP连接数量
#define MEMP_NUM_TCP_SEG 300 //MEMP_NUM_TCP_SEG:最多同时在队列中的TCP段数量
#define MEMP_NUM_SYS_TIMEOUT 8 //MEMP_NUM_SYS_TIMEOUT:能够同时激活的timeout个数
//pbuf选项
#define PBUF_POOL_SIZE 20 //PBUF_POOL_SIZE:pbuf内存池个数
#define PBUF_POOL_BUFSIZE 1500 //PBUF_POOL_BUFSIZE:每个pbuf内存池大小
#define LWIP_TCP 1 //使用TCP
#define TCP_TTL 255 //生存时间
#undef TCP_QUEUE_OOSEQ
#define TCP_QUEUE_OOSEQ 0 //当TCP的数据段超出队列时的控制位,当设备的内存过小的时候此项应为0
#undef TCPIP_MBOX_SIZE
#define TCPIP_MBOX_SIZE MAX_QUEUE_ENTRIES //tcpip创建主线程时的消息邮箱大小
#undef DEFAULT_TCP_RECVMBOX_SIZE
#define DEFAULT_TCP_RECVMBOX_SIZE MAX_QUEUE_ENTRIES
#undef DEFAULT_ACCEPTMBOX_SIZE
#define DEFAULT_ACCEPTMBOX_SIZE MAX_QUEUE_ENTRIES
#define TCP_MSS (1500 - 40) //最大TCP分段,TCP_MSS = (MTU - IP报头大小 - TCP报头大小
#define TCP_SND_BUF (25*TCP_MSS) //TCP发送缓冲区大小(bytes).
#define TCP_SND_QUEUELEN (10* TCP_SND_BUF/TCP_MSS) //TCP_SND_QUEUELEN: TCP发送缓冲区大小(pbuf).这个值最小为(2 * TCP_SND_BUF/TCP_MSS)
#define TCP_WND (10*TCP_MSS) //TCP发送窗口
#define LWIP_ICMP 1 //使用ICMP协议
#define LWIP_DHCP 0 //使用DHCP
#define LWIP_UDP 1 //使用UDP服务
#define UDP_TTL 255 //UDP数据包生存时间
#define LWIP_STATS 0
#define LWIP_PROVIDE_ERRNO 1
//帧校验和选项,STM32F4x7允许通过硬件识别和计算IP,UDP和ICMP的帧校验和
#define CHECKSUM_BY_HARDWARE //定义CHECKSUM_BY_HARDWARE,使用硬件帧校验
#ifdef CHECKSUM_BY_HARDWARE
//CHECKSUM_GEN_IP==0: 硬件生成IP数据包的帧校验和
#define CHECKSUM_GEN_IP 0
//CHECKSUM_GEN_UDP==0: 硬件生成UDP数据包的帧校验和
#define CHECKSUM_GEN_UDP 0
//CHECKSUM_GEN_TCP==0: 硬件生成TCP数据包的帧校验和
#define CHECKSUM_GEN_TCP 0
//CHECKSUM_CHECK_IP==0: 硬件检查输入的IP数据包帧校验和
#define CHECKSUM_CHECK_IP 0
//CHECKSUM_CHECK_UDP==0: 硬件检查输入的UDP数据包帧校验和
#define CHECKSUM_CHECK_UDP 0
//CHECKSUM_CHECK_TCP==0: 硬件检查输入的TCP数据包帧校验和
#define CHECKSUM_CHECK_TCP 0
#else
//CHECKSUM_GEN_IP==1: 软件生成IP数据包帧校验和
#define CHECKSUM_GEN_IP 1
// CHECKSUM_GEN_UDP==1: 软件生成UDOP数据包帧校验和
#define CHECKSUM_GEN_UDP 1
//CHECKSUM_GEN_TCP==1: 软件生成TCP数据包帧校验和
#define CHECKSUM_GEN_TCP 1
// CHECKSUM_CHECK_IP==1: 软件检查输入的IP数据包帧校验和
#define CHECKSUM_CHECK_IP 1
// CHECKSUM_CHECK_UDP==1: 软件检查输入的UDP数据包帧校验和
#define CHECKSUM_CHECK_UDP 1
//CHECKSUM_CHECK_TCP==1: 软件检查输入的TCP数据包帧校验和
#define CHECKSUM_CHECK_TCP 1
#endif
#define LWIP_NETCONN 1 //LWIP_NETCONN==1:使能NETCON函数(要求使用api_lib.c)
#define LWIP_SOCKET 1 //LWIP_SOCKET==1:使能Sicket API(要求使用sockets.c)
#define LWIP_COMPAT_MUTEX 1
#define LWIP_SO_RCVTIMEO 1 //通过定义LWIP_SO_RCVTIMEO使能netconn结构体中recv_timeout,使用recv_timeout可以避免阻塞线程
//有关系统的选项
#define TCPIP_THREAD_STACKSIZE 1000 //内核任务堆栈大小
#define DEFAULT_UDP_RECVMBOX_SIZE 2000
#define DEFAULT_THREAD_STACKSIZE 1500
//LWIP调试选项
#define LWIP_DEBUG 0 //关闭DEBUG选项
#define ICMP_DEBUG LWIP_DBG_OFF //开启/关闭ICMPdebug
#endif /* __LWIPOPTS_H__ */[/mw_shl_code]
根据原子哥网络摄像头实验的Lwipopts.h进行修改,情况有所改善,如下面靓图所示:
谢谢您能回答我的问题,你们测得时候也时快时慢吗,就像上面两张图一样
我没用你这个软件测试,我们直接是网络摄像头,显示拍照的内容,根据实际情况来看,比较稳定,应该没你那种断续的问题
一周热门 更多>