Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
官网手册“一起来学rt_thread教程-多线程TCP服务器”,进入硬件中断的问题
发布于 2015-09-14 23:39:42 浏览:6075
订阅该版
**rt_thread版本:1.2.0RC mcu型号:STM32F103ZE 开发板:魔笛F1 网络调试助手:NetAssit** **问题:**参考论坛挂网手册“一起来学rt_thread教程“ 第20篇-例程1-TCP并发服务器模型-多线程TCP服务器。出现了两个问题: **第一个:**只开启一个NetAssit,反复链接开发板。第二次关闭时,程序进入硬件终端错误(此时链接已经经过4次握手确认FIN),如下所示(详细的finish输出信息可参考“每次只连一个,多次 开关链接的finish输出.txt“): psr: 0x21000000 r00: 0x20006518 r01: 0x10000000 r02: 0xf0000000 r03: 0x00000020 r04: 0x197c5428 r05: 0x68001e1c r06: 0x00000000 r07: 0x00000000 r08: 0xdeadbeef r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x0800c2f5 lr: 0x0800ab61 pc: 0x0800ab60 hard fault on thread: tidle thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- pth01 0x18 close 0x00000068 0x00000800 0x000001d0 0x00000002 000 pth00 0x18 close 0x0000006c 0x00000800 0x000001d4 0x00000002 000 tcp_demo 0x14 suspend 0x00000160 0x00000800 0x00000190 0x00000010 000 tcpip 0x0c suspend 0x000000dc 0x00001000 0x00000204 0x00000005 000 tshell 0x14 suspend 0x0000008c 0x00001000 0x000001b4 0x00000009 000 etx 0x0e suspend 0x0000009c 0x00000800 0x0000009c 0x00000010 000 erx 0x0e suspend 0x00000090 0x00000800 0x000000c0 0x0000000d 000 tidle 0x1f ready 0x00000058 0x00000200 0x0000005c 0x0000000c 000 led 0x14 suspend 0x0000007c 0x00000200 0x0000007c 0x00000005 000 bus fault: SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:197C5448 **第二个:**开启3个NetAssit,全部开启链接。关闭任意一个链接,程序进入硬件终端错误(此时链接已经经过4次握手确认FIN),如下所示(详细的finish输出信息可参考“三个链接同时建立后又关闭其中一个链接时的finish输出.txt“): r00: 0x20006518 r01: 0x10000000 r02: 0xf0000000 r03: 0x00000020 r04: 0xb7b6b5b4 r05: 0x680042a8 r06: 0x00000000 r07: 0x00000000 r08: 0xdeadbeef r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x0800c2f5 lr: 0x0800ab61 pc: 0x0800ab60 hard fault on thread: tidle thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- pth02 0x18 close 0x0000006c 0x00000800 0x000001d4 0x00000001 000 pth01 0x18 suspend 0x000001c0 0x00000800 0x000001c0 0x00000003 000 pth00 0x18 suspend 0x000001c4 0x00000800 0x000001c4 0x00000004 000 tcp_demo 0x14 suspend 0x00000160 0x00000800 0x00000190 0x0000000e 000 tcpip 0x0c suspend 0x000000dc 0x00001000 0x00000204 0x00000007 000 tshell 0x14 suspend 0x0000008c 0x00001000 0x000001b4 0x00000009 000 etx 0x0e suspend 0x0000009c 0x00000800 0x0000009c 0x00000010 000 erx 0x0e suspend 0x00000090 0x00000800 0x000000c0 0x0000000f 000 tidle 0x1f ready 0x00000058 0x00000200 0x0000005c 0x0000001c 000 led 0x14 suspend 0x0000007c 0x00000200 0x0000007c 0x00000005 000 bus fault: SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:B7B6B5D4 **做过的测试:** 1. 在pthread上的主体函数上加断点,每次都可以执行到return 0部分 void* start_routine(void* arg) { ARG *info; info = (ARG *)arg; /* 处理客户端请求 */ process_cli(info->connfd, info->client); rt_free(info); //pthread_exit(NULL); return 0; } 2. 模拟本程序代码格式,写了一个linux下的测试程序。在ubuntu下测试,完全可以实现预想的多任务。详细代码可以参考“tcpserver_linux下测试正常.c“。我把这段代码又抑制回到开发板,但还是不行。相当于做了一次交叉验证吧。 之前在调试LwIP协议栈的时候,也遇到过因为内存分配问题一些进入硬件中断错误的情况。感觉这次还是类似的问题,不知道是LwIP协议栈部分的问题,还是在操作系统部分的问题。从网络的抓包情况看,协议栈是正常close掉的。 关于bus fault的错误,我在论坛上搜了一下,有相应的问题( [topic3482-10.html](http://www.rt-thread.org/phpBB3/topic3482-10.html) )。但最后反映是硬件问题。但是通过select方式是可以实现多任务的(论坛手册上的代码在关闭链接时有一处问题,应该是close(i)写成了close(connfd),具体记不清了。否则wireshark抓不到关闭的4次握手)。 麻烦给位大侠给分析一下。 下载附件 [每次只连一个,多次 开关链接的finish输出.txt](https://oss-club.rt-thread.org/uploads/7645_2c5ab59427a6b3f09aedfbbe81214f76.txt) 下载附件 [三个链接同时建立后又关闭其中一个链接时的finish输出.txt](https://oss-club.rt-thread.org/uploads/7645_326fa8faff992228f53105fabf1f1ce4.txt) 下载附件 [tcpserver_linux下测试正常.c](https://oss-club.rt-thread.org/uploads/7645_4ad1ca539dbb552e73ac09179f7834f1.c) 下载附件 [第20篇-例程1-TCP并发服务器模型-多线程TCP服务器.rar](https://oss-club.rt-thread.org/uploads/7645_f6c0ae2994d7cb058714355d14ea5f0a.rar)
查看更多
4
个回答
默认排序
按发布时间排序
andrew
2015-09-21
这家伙很懒,什么也没写!
是不是发错了版块了?自己先顶一下。
bernard
2015-09-21
这家伙很懒,什么也没写!
记得好像那个例子是有bug的,当反复连接时就非常容易触发错误。多连接传输,建议使用select方式进行,这样资源占用也少,也容易做稳定
andrew
2015-09-24
这家伙很懒,什么也没写!
>记得好像那个例子是有bug的,当反复连接时就非常容易触发错误。多连接传输,建议使用select方式进行,这样资源占用也少,也容易做稳定 --- 测试了一段时间,用select方式实现确实是比较稳定。 对LwIP的内部实现,尤其是内存管理不太了解。以前裸机用回调函数模式使用时,就经常进入硬件中断错误。
撰写答案
登录
注册新账号
关注者
0
被浏览
6.1k
关于作者
andrew
这家伙很懒,什么也没写!
提问
2
回答
3
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
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
【NXP-MCXA153】 定时器驱动移植
2
GD32F450 看门狗驱动适配
3
【NXP-MCXA153】看门狗驱动移植
4
RT-Thread Studio V2.2.9 Release Note
5
CherryUSB的bootuf2配置
热门标签
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
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
15
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
8
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部