Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RTT lwIP在LM3S6432处理器运行WebServer多次刷新无响应
发布于 2013-05-17 19:34:17 浏览:3537
订阅该版
RTT版本:1.1.0 运行平台:LM3S6432 在LM3S6432平台上运行RTT1.1.0,复制了LM3S8962的工程,修改Device为LM3S6432,修改board.h中的LM3S_SRAM_SIZE 为32,编译之后ROM空间太大,去掉了FINSH,配置工程编译为Use Cross-Module Optimization后编译,ROM大小为60多K。 为测试lwIP协议栈,编写了如下应用(使用lwIP常用测试代码): ```const static char indexdata[] = "
A test page
This is a small test page. "; const static char http_html_hdr[] = "HTTP/1.0 200 OK Content-type: text/html "; static void process_connection(struct netconn *conn) { struct netbuf *inbuf; char *rq; u16_t len; if(RT_EOK != netconn_recv(conn, &inbuf)) { rt_kprintf("recv error. "); return; } netbuf_data(inbuf, &rq, &len); rt_kprintf("%c%c%c%c%c%c%c",rq[0],rq[1],rq[2],rq[3],rq[4],rq[5],rq[6]); if( rq[0] == 'G' && rq[1] == 'E' && rq[2] == 'T' && rq[3] == ' ' && rq[4] == '/') { rt_kprintf("Correct request. "); netconn_write(conn, http_html_hdr, sizeof(http_html_hdr), NETCONN_NOCOPY); netconn_write(conn, indexdata, sizeof(indexdata), NETCONN_NOCOPY); netconn_close(conn); } } void lw_thread(void* paramter) { struct netconn *conn, *newconn; conn = netconn_new(NETCONN_TCP); netconn_bind(conn, NULL, 80); netconn_listen(conn); rt_kprintf("Enter While"); while(1) { if (RT_EOK != netconn_accept(conn, &newconn)) { rt_kprintf("Accept error. "); continue; } process_connection(newconn); netconn_delete(newconn); } }``` 以上应用在运行过程中,刷新几次还行,但是刷新大约10次之后,就无响应了。在调试中发现,在luminaryif_rx函数中分配pbuf失败,返回NULL后,导致eth_rx_thread_entry线程等待eth_rx_thread_mb消息邮箱,而消息发送在网络中断产生,以太网接口中断被关闭没有开启,从而陷入死锁。 打开HEAP内存分配调试,发现输出如下信息: ```release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000ff0, size: 32 malloc size 20 allocate memory at 0x20000ff0, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000ff0, size: 32 malloc size 20 allocate memory at 0x20000ff0, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000ff0, size: 32 malloc size 20 allocate memory at 0x20000ff0, size: 32 release memory 0x20000f1c, size: 32 malloc size 20 allocate memory at 0x20000f1c, size: 32 release memory 0x20000f1c, size: 32 malloc size 20``` 上面的代码应该是别的进程输出的,与lwIP运行没什么关系,关键是内存分配失败。RTT+lwIP在32K的SRAM上跑不动吗?自己对内存分配的算法没什么研究,不知道为什么会分配失败,就是因为空间太小吗? 不断分配内存,释放内存,不知道是什么原因,个人认为是内存分配出现了问题,请指教。
查看更多
9
个回答
默认排序
按发布时间排序
bernard
2013-05-17
这家伙很懒,什么也没写!
SRAM size 32k? 那你得好好优化内存占用才可能跑起来
aozima
2013-05-17
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
多行字符串可以不用续行符。
lxk1988
2013-05-17
这家伙很懒,什么也没写!
>SRAM size 32k? 那你得好好优化内存占用才可能跑起来 --- 嗯,我觉得就是内存分配的问题,我在调试的时候发现,一个400多字节的包就分配不了了。但是RTT官方不是说可以支持所有的LM3S系列处理器吗?按理说400字节的包分配应该也没有问题吧。
lxk1988
2013-05-17
这家伙很懒,什么也没写!
>多行字符串可以不用续行符。 --- 呵呵,谢谢,这个照着人家代码粘贴的,也没有注意。
bernard
2013-05-17
这家伙很懒,什么也没写!
>>SRAM size 32k? 那你得好好优化内存占用才可能跑起来 > >--- > > >嗯,我觉得就是内存分配的问题,我在调试的时候发现,一个400多字节的包就分配不了了。但是RTT官方不是说可以支持所有的LM3S系列处理器吗?按理说400字节的包分配应该也没有问题吧。 --- 你得看看还剩多少内存啊,没内存了,1个字节都分配不出来,更何况是400个字节。
lxk1988
2013-05-17
这家伙很懒,什么也没写!
>>>SRAM size 32k? 那你得好好优化内存占用才可能跑起来 >> >>--- >> >> >>嗯,我觉得就是内存分配的问题,我在调试的时候发现,一个400多字节的包就分配不了了。但是RTT官方不是说可以支持所有的LM3S系列处理器吗?按理说400字节的包分配应该也没有问题吧。 > >--- > > > >你得看看还剩多少内存啊,没内存了,1个字节都分配不出来,更何况是400个字节。 --- 嗯,谢谢提示,果然是没内存了,总共有28.9k的堆内存,结果用used_mem变量查看用掉了28k内存。按理说用到的内存也会释放啊,怎么开始的时候好好的,刷新次数多了就不行呢?之前处理的不是都已经释放了吗?不清楚lwIP是怎么进行内存管理的,求大师给个优化的思路,不行的话就只能放弃lwIP或者换别的处理器了。
xiao苦
2013-05-17
这家伙很懒,什么也没写!
我很负责任的告诉楼主,如果你不开finsh,先不跑其他光是lwip,30k完全有余,实际上只要你用10k左右应该是能跑简单的lwip,不过接入用户越多,内存消耗越大, 我stm3220ksram都能跑起来,何况你30k?
lxk1988
2013-05-18
这家伙很懒,什么也没写!
>我很负责任的告诉楼主,如果你不开finsh,先不跑其他光是lwip,30k完全有余,实际上只要你用10k左右应该是能跑简单的lwip,不过接入用户越多,内存消耗越大, 我stm3220ksram都能跑起来,何况你30k? --- 嗯,跑是能跑起来,刷新次数多了就不行了,还是资源受限。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.5k
关于作者
lxk1988
这家伙很懒,什么也没写!
提问
2
回答
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
TinyUSB Demo运行教程
2
RT-Thread学习大礼包一键带走!
3
freemodbus从机调试说明
4
【1024】瑞萨 RA 系列 BSP 制作与适配最新版本的 Keil 、 RSC、固件,较新的 FSP
5
基于 RT-Thread 星火一号开发板的俄罗斯方块
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
张世争
7
个答案
2
次被采纳
用户名由3_15位
10
个答案
1
次被采纳
KunYi
4
个答案
1
次被采纳
踩姑娘的小蘑菇
2
个答案
1
次被采纳
bernard
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部