Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
LwIP接收数据出现Hard fault,求解决
发布于 2012-08-25 13:54:05 浏览:11751
订阅该版
CPU:LM3S9B92 系统版本:RT-Thread 1.0.2 1.在RTT上建立了一个TCP server线程,代码如下: a.线程初始化源代码: ``` int rt_application_init() { rt_thread_t init_thread; init_thread = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 1024, 21, 20); rt_thread_startup(init_thread); #ifdef RT_USING_LWIP static struct rt_thread tcpserv_thread; rt_thread_init(&tcpserv_thread, "tcpserv", tcpserv_thread_entry, RT_NULL, &tcpserv_thread_stack[0], sizeof(tcpserv_thread_stack), 22, 20); rt_thread_startup(&tcpserv_thread); #endif return 0; } ``` b.tcp server只是建立连接后一直等待接收,并把接收的字符串打印到串口,源代码如下,: ```#include
#include
char tcpserv_thread_stack[512]; static const char send_data[] = "This is TCP Server from RT-Thread."; static char recv_data[1024]; int init_tcpserver(rt_uint16_t port) { int sock; struct sockaddr_in server_addr; /* 一个socket在使用前,需要预先创建出来,指定SOCKSTREAM为TCP的socket */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /* 创建失败的错误处理*/ rt_kprintf("Socket error "); return -1; } /* 初始化服务端地址*/ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); /* 服务端工作的端口*/ server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero)); /* 绑定socket到服务端地址*/ if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { /* 绑定失败*/ rt_kprintf("Unable to bind "); return -1; } /* 在socket上进行监听*/ if (listen(sock, 5) == -1) { rt_kprintf("Listen error "); return -1; } return sock; } void tcpserv_thread_entry(void* parameter) { rt_uint32_t sin_size; int ret, bytes_received; int sock, connected; struct sockaddr_in client_addr; fd_set readset; fd_set writeset; struct timeval timeout; ret = -1; bytes_received = -1; timeout.tv_sec = 1; timeout.tv_usec = 0; sock = init_tcpserver(5000); while(1) { sin_size = sizeof(struct sockaddr_in); connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); rt_kprintf("I got a connection from (%s , %d) ", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port)); while( connected >= 0 ) { FD_ZERO(&readset); FD_ZERO(&writeset); FD_SET(connected, &readset); FD_SET(connected, &writeset); ret = select(connected+1, &readset, &writeset, 0, &timeout); if( ret == -1 ) { lwip_close(connected); rt_kprintf("select error. "); break; } else if( ret == 0 ) { /* timeout */ rt_kprintf("select timeout. "); } else { if( FD_ISSET(connected, &readset) ) /* connected 是否可读 */ { bytes_received = recv(connected, recv_data, 1024, 0); if (bytes_received <= 0) { lwip_close(connected); break; } else { recv_data[bytes_received] = ' '; rt_kprintf("RECIEVED DATA = %s " , recv_data); } } if( FD_ISSET(connected, &writeset) ) /* connected 是否可写 */ { //send(connected, send_data, strlen(send_data), 0); } } } } lwip_close(sock); return ; }``` 2.在PC上连接RTT上的tcp server,建立连接后,PC一直发送数据给tcp server.大约1分钟,出现hard fault,如下: ``` pc: 0x0000f238 lr: 0x000128dd r12: 0x0000000a r03: 0x0000a8c0 r02: 0xff00a8c0 r01: 0x20004c94 r00: 0x0000c068 hard fault on thread: tcpip thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tcpip 0x0c ready 0x000000ac 0x00000400 0x000001e4 0x00000013 000 tidle 0x1f ready 0x0000004c 0x00000100 0x0000005c 0x00000004 000 tshell 0x14 suspend 0x00000070 0x00000800 0x00000070 0x0000000a 000 tcpserv 0x16 ready 0x000000a4 0x00000200 0x00000154 0x00000009 000 etx 0x0f suspend 0x00000084 0x00000200 0x00000084 0x00000010 000 erx 0x0f ready 0x000000a4 0x00000200 0x000000a4 0x00000010 000 ``` 根据出现hard fault时候的PC值,我找到发生错误的地方是在udp_input函数中,如下图: ![QQ截图20120825135317.png](/uploads/2828_48a57c68ced56fcef39da55d26dca771.png) 4.PC上的客户端软件,如下: ![QQ截图20120825135530.png](/uploads/2828_587fceab2ee8a57b86f215c6b9a0c832.png)
查看更多
14
个回答
默认排序
按发布时间排序
kingreat
2012-08-26
这家伙很懒,什么也没写!
从官网下载的RT-Thread v1.0.2我基本没做过任何改动。只是加了一个tcp server线程。 而且tcp server我只是实现了接收。 是不是RT-Thread + LwIP还是不够稳定?
shaolin
2012-08-26
这家伙很懒,什么也没写!
查下是否有可能跟驱动有关系吧。
kingreat
2012-08-26
这家伙很懒,什么也没写!
>查下是否有可能跟驱动有关系吧。 --- MCU型号是:LM3S9B92 驱动倒是没仔细看过,驱动用的也是RT-Thread 1.0.2中原来的。
shaolin
2012-08-26
这家伙很懒,什么也没写!
很像是哪儿数据没有4字节对奇。
kingreat
2012-08-26
这家伙很懒,什么也没写!
>查下是否有可能跟驱动有关系吧。 --- 我在RTT上建立了一个UDP server。 PC机一直发送数据,发送了两个小时了,没有出现hard fault的问题。 这样是不是应该不是驱动的问题了。
aozima
2012-08-26
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
UDP发送的是同一数据,且不会重叠。 只要发一次OK,再发N次也是完全一样的情况。 可以先对比一下 8962的驱动,另可以请教一下其它使用RT-Thread+LWIP在LM3S上面做过产品的同学。
bernard
2012-08-26
这家伙很懒,什么也没写!
最好做随机长度数据发送。 网络是其中比较大的一块了,aozima 我们是否可以给出个低成本的网络评估板以方便用户,但这样就加重工作量了
kingreat
2012-08-26
这家伙很懒,什么也没写!
>最好做随机长度数据发送。 > >网络是其中比较大的一块了,aozima 我们是否可以给出个低成本的网络评估板以方便用户,但这样就加重工作量了 --- 我愿意提供网络评估板,你门可以提出设计需求,我来做硬件。 我愿意把硬件部分的原理图与PCB全部给你们。 如果你们愿意在我这里加工焊接也可以,价钱由你们定。 我可以把我手头上的这块板子给你们先用。 还有,我有AT91RM9200与AT91SAM9261的开发板,我也愿意免费提供一块。
kingreat
2012-08-26
这家伙很懒,什么也没写!
一个发现,RTT上跑tcp server,当出现Hardfault的时候 psr的值是 0x61000200 ``` psr: 0x61000200 ```
bernard
2012-08-27
这家伙很懒,什么也没写!
>>最好做随机长度数据发送。 >> >>网络是其中比较大的一块了,aozima 我们是否可以给出个低成本的网络评估板以方便用户,但这样就加重工作量了 > >--- > > > >我愿意提供网络评估板,你门可以提出设计需求,我来做硬件。 >我愿意把硬件部分的原理图与PCB全部给你们。 >如果你们愿意在我这里加工焊接也可以,价钱由你们定。 >我可以把我手头上的这块板子给你们先用。 > >还有,我有AT91RM9200与AT91SAM9261的开发板,我也愿意免费提供一块。 --- 你们还可以加工焊接?可否邮件里细谈?
撰写答案
登录
注册新账号
关注者
0
被浏览
11.8k
关于作者
kingreat
这家伙很懒,什么也没写!
提问
5
回答
17
被采纳
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
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
7
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
11
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部