OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5228|回复: 11

LWIP内存申请改为外部SRAM报错

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
发表于 2017-8-28 13:13:42 | 显示全部楼层 |阅读模式
1金钱
在做LWIP实验时 用MALLOC 为内部SRAM时 正常
在用MALLOC 改为外部SRAMEX时 报错

QQ图片20170828131631.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-8-29 09:15:20 | 显示全部楼层
在初始化LWIP时,LWIP相关的内存申请是可以直接改成SRAMEX的,不过我的建议是直接把动态申请的这部分内存,弄成静态的数组来用,这样更稳定
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 10:41:15 | 显示全部楼层
改成静态数组的话,这部分内存一直得不到释放,所以这也是教程用MALLOC的原因吧,
改成外部的SRAM 作为堆的空间 我主要是想用内部的SRAM来跑应用程序
所以就把原来在内部申请的内存空间  改为了外部空间  并在启动文件中 __heap_limit    EQU     0x68000000+0x00100000
做了堆空间的定义  结果就出现了这个状况  
不知道问题出在哪里
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-8-29 11:27:03 | 显示全部楼层
sidou521 发表于 2017-8-29 10:41
改成静态数组的话,这部分内存一直得不到释放,所以这也是教程用MALLOC的原因吧,
改成外部的SRAM 作为堆 ...

改成这样难怪会出问题啊,你把启动文件都改成了使用外部SRAM,但关键是在使用外部SRAM之前都还要对相应的引脚等做初始化,这样一来程序都直接死掉了,例程改用动态申请是因为它有个退出的功能,也就是把LWIP线程给删除掉等,但实际使用中,LWIP是上电后就一直开启的,不会再退出,所以这个时候最好是做成数组来用,我之前用动态内存,LWIP会经常出现不稳定的状况
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 11:49:28 | 显示全部楼层
已经做了初始化的啊  ;
Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]

                IMPORT  SystemInit
                IMPORT  FSMC_SRAM_Init
                IMPORT  __main
                 LDR     R0, =SystemInit
                 BLX     R0
                LDR     R0, =FSMC_SRAM_Init
                BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
我是在启动文件做了外部SRAM的初始化,然后用动态内存管理 来分配为外部SRAM的
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 11:54:17 | 显示全部楼层
另外我做的 __heap_limit    EQU     0x68000000+0x00100000
只是用来说明 MALLOC申请的内存 应该在外部SRAM的吧
然后在调用的mymalloc()函数中全部改为 SRAMEX的 ,
我试试不用动态管理  把数组直接申请到外部SRAM试试看
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-8-29 13:14:49 | 显示全部楼层
sidou521 发表于 2017-8-29 11:54
另外我做的 __heap_limit    EQU     0x68000000+0x00100000
只是用来说明 MALLOC申请的内存 应该在外部SR ...

直接用原子哥的例程就可以了啊,不用改那么多吧,申请的时候不就是用mymalloc(SRAMEX,size)这样子就可以直接用了,没必要把堆栈那些都改了,改堆栈很容易出问题
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 13:23:06 | 显示全部楼层
我就是在原子哥的历程上改的  一开始就发现上面的问题  
楼上仁兄 可以试试  在原子哥例程上 直接改mymalloc(SRAMEX,size) 试试
不知道哪里的问题的
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 13:23:37 | 显示全部楼层
我就是在原子哥的历程上改的  一开始就发现上面的问题  
楼上仁兄 可以试试  在原子哥例程上 直接改mymalloc(SRAMEX,size) 试试
不知道哪里的问题的
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-8-29 13:34:34 | 显示全部楼层
sidou521 发表于 2017-8-29 13:23
我就是在原子哥的历程上改的  一开始就发现上面的问题  
楼上仁兄 可以试试  在原子哥例程上 直接改mymall ...

我在F407探索者的55网络实验例程上直接改,没有问题,就是把lan8720.c,lwip_comm.c里面用到的内存SRAMIN都替换成SRAMEX就可以了
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-8-2
在线时间
4 小时
 楼主| 发表于 2017-8-29 13:45:32 | 显示全部楼层
o 我是在LWIP扩展例程改的 就出现了这个问题 我试试那个55的那个例程
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-8-29 15:09:29 | 显示全部楼层
sidou521 发表于 2017-8-29 13:45
o 我是在LWIP扩展例程改的 就出现了这个问题 我试试那个55的那个例程

我在59那个综合实验例程上改也一样,没有出这个问题,你也可以试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-18 17:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表