Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
MINI2440 LWIP问题
发布于 2011-08-13 19:14:30 浏览:4011
订阅该版
在Application.c文件中增加一个测试TCP通讯的服务器 ``` void rt_tcptest_thread_entry(void* parameter) { int xListenSocket,xClientSocket; int nRet,nLen; struct sockaddr_in xService, xRemote; xClientSocket = -1; xService.sin_family = AF_INET; xService.sin_port = htons(502); xService.sin_addr.s_addr = INADDR_ANY; if( ( xListenSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ) == -1 ) { rt_kprintf( "can't create socket! " ); } else if( bind( xListenSocket, ( struct sockaddr * ) & xService, sizeof( xService ) ) != ERR_OK ) { rt_kprintf( "can't bind on socket! " ); } else if( listen( xListenSocket, 5 ) != ERR_OK ) { rt_kprintf( "can't listen on socket " ); } nLen = sizeof(struct sockaddr); while(1) { // Task body, always written as an infinite loop. xClientSocket = accept (xListenSocket,(struct sockaddr*)&xRemote,&nLen); if (xClientSocket!= -1) { while(1) { nRet = recv (xClientSocket,(void*)&stcpbuf[0],512,0); if (nRet > 0) send(xClientSocket,stcpbuf,nRet,0); else break; } close(xClientSocket); xClientSocket = -1; } } } ``` 然后创建该服务器 tcptest_thread = rt_thread_create("lwip_tcptest",rt_lwiptcptest_thread_entry, RT_NUL,512, 220, 50); 在PC上用TCP程序去测试,过程如下 1 Connect 成功 2 发送数据成功,发送若干次后 3 断开连接成功 然后再Connetct Mini2440时失败,串口打印出如下信息 Execption: r00:0xe59ff018 r01:0x30168140 r02:0x30168110 r03:0xffffffff r04:0x30168170 r05:0x00000000 r06:0x30168170 r07:0x00000000 r08:0x00000000 r09:0x00000000 r10:0x00000000 fp :0x00000000 ip :0x00000000 sp :0x30168ac0 lr :0x30079f14 pc :0x30079f14 cpsr:0x20000013 data abort thread - lwip_tcptest stack: thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tcpip 0x80 suspend 0x000000cc 0x00001000 0x0000026c 0x00000010 000 etx 0x90 suspend 0x00000094 0x00000400 0x00000094 0x00000002 000 erx 0x90 suspend 0x00000094 0x00000400 0x000000d4 0x00000004 000 wb 0x19 suspend 0x000000d4 0x00001000 0x00000248 0x00000004 000 rtgui 0x0f suspend 0x000001ac 0x00000800 0x000001b0 0x00000005 000 tidle 0xff ready 0x0000004c 0x00000100 0x00000088 0x00000017 000 timer 0x08 suspend 0x0000007c 0x00000200 0x0000007c 0x00000009 000 tshell 0x14 suspend 0x00000084 0x00001000 0x00000084 0x00000009 000 lwip_tcptest 0xdc ready 0x00000174 0x00000200 0x00000184 0x00000025 000 led 0xc8 suspend 0x0000007c 0x00000200 0x0000007c 0x00000014 000 shutdown... 不知这是什么问题?请高人指点
查看更多
4
个回答
默认排序
按发布时间排序
bernard
2011-08-13
这家伙很懒,什么也没写!
粗看还看不出什么问题,你可以试试我的代码: ``` /* * TCP socket echo server */ #define TCP_SOCKET_ECHO_PORT 700 #define TCP_SOCKET_BUFFER_SIZE 4096 rt_thread_t tcpecho_socket_tid = RT_NULL; void tcpecho_socket_entry(void *parameter) { char *recv_data; rt_uint32_t sin_size; int sock = -1, connected, bytes_received; struct sockaddr_in server_addr, client_addr; recv_data = rt_malloc(TCP_SOCKET_BUFFER_SIZE); if (recv_data == RT_NULL) { rt_kprintf("no memory "); goto _exit; } /* create a TCP socket */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { rt_kprintf("create socket error "); goto _exit; } /* initialize server address */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(TCP_SOCKET_ECHO_PORT); server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero)); /* bind to server address */ if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { rt_kprintf("bind address failed "); goto _exit; } /* listen */ if (listen(sock, 5) == -1) { rt_kprintf("listen error "); goto _exit; } sin_size = sizeof(struct sockaddr_in); while(1) { /* accept client connected */ connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); if (connected > 0) { int timeout; /* set timeout option */ timeout = 5000; /* 5second */ setsockopt(connected, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); /* handle this client */ while (1) { /* receive data from this connection */ bytes_received = recv(connected,recv_data, TCP_SOCKET_BUFFER_SIZE, 0); if (bytes_received <= 0) { rt_kprintf("close client connection, errno: %d, socket error: %d ", rt_get_errno(), lwip_get_error()); /* connection closed. */ lwip_close(connected); break; } /* send data to client */ send(connected, recv_data, bytes_received, 0); } } } _exit: /* close socket */ if (sock != -1) lwip_close(sock); rt_free(recv_data); return ; } /* network test utilities entry */ void net_test(void) { rt_thread_t tcpecho_socket_tid; if (tcpecho_socket_tid == RT_NULL) { tcpecho_socket_tid = rt_thread_create("techo_s", tcpecho_socket_entry, RT_NULL, 512, RT_THREAD_PRIORITY_MAX/2 + 3, 5); if (tcpecho_socket_tid != RT_NULL) rt_thread_startup(tcpecho_socket_tid); } } ```
Frank_chen
2011-08-18
这家伙很懒,什么也没写!
问题的原因找到了,在我原来的代码中关闭TCP的连接用的是 close(xClientSocket); 改为 lwip_close(xClientSocket); 问题就解决了,是因为在我的工程中包含了RT-Thread的文件系统,而文件系统中 也实现了close函数,而close在lwip也进行了宏定义。所以导致了冲突!
bernard
2011-08-18
这家伙很懒,什么也没写!
以后做一个socket fs的适配估计就不会出这类问题了,现在确实缺少个trace系统,这样有什么问题可以列在那里,然后一个个修复
撰写答案
登录
注册新账号
关注者
0
被浏览
4k
关于作者
Frank_chen
这家伙很懒,什么也没写!
提问
6
回答
6
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
ART-Pi2移植CMSIS-DAP(基于CherryUSB协议栈)
2
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
3
RT-Thread中的time溢出问题,时间戳溢出,解决方法
4
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
5
SystemView线程名字不显示
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
lizimu
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部