OpenEdv-开源电子网

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

关于LAN8720申请内存的问题

[复制链接]

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
发表于 2018-9-27 11:06:45 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 jiangyy 于 2018-9-27 11:10 编辑

  各位大神,原子哥:
   中午好!
  今天了解了一下网络通信试验,目前我只想将试验保留一种模式(TCP Client),与网络串口助手(TCP Server模式)建立通信,中间已经搭建好环境,能正常通信。但是这个试验代码里面,我删除了UDP,TCP Server,WEB,RTC,Adc_Temperate,LCD,usmart,BEEP的相关代码,然后整理一下还是可以通信。但是我看了tcp_client文件里面的代码,应该是申请的内部内存池,但是我将sram的代码文件删除,为啥就不行了?sram文件里面的代码不是初始化外部SRAM的吗(FSMC)?难道tcp_client申请的是外部SRAM内存?tcp_client申请内存的代码如下:
1.
//设置远端IP地址
void tcp_client_set_remoteip(void)
{
u8 *tbuf;
tbuf=mymalloc(SRAMIN,100); //申请内存
if(tbuf==NULL)return;
//前三个IP保持和DHCP得到的IP一致
lwipdev.remoteip[0]=lwipdev.ip[0];
lwipdev.remoteip[1]=lwipdev.ip[1];
lwipdev.remoteip[2]=lwipdev.ip[2];
sprintf((char*)tbuf,"Remote IP:%d.%d.%d.",lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2]);//远端IP
printf("%s",tbuf);
printf("%d\r\n",lwipdev.remoteip[3]);
myfree(SRAMIN,tbuf);
}

再看看内存池的定义,代码如下:
2.
//定义三个内存池
#define SRAMIN  0  //内部不内存池
#define SRAMEX  1  //外部不内存池
#define SRAMCCM 2  //CCM内存池(此部分SRAM仅仅CPU可以访问!!)
#define SRAMBANK  3 //定义支持的SRAM块数

//mem1内存参数设定,mem1完全处于内部SRAM里面
#define MEM1_BLOCK_SIZE 32     //内存块大小为32字节
#define MEM1_MAX_SIZE  100*1024  //最大管理内存  110K
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE  //内存表大小

//mem2内存参数设定,mem2完全处于外部SRAM里面
#define MEM2_BLOCK_SIZE 32     //内存块大小为32字节
#define MEM2_MAX_SIZE  200*1024  //最大管理内存  200k
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE  //内存表大小

//mem3内存参数设定,mem3处于CCM,用于管理CCM(这部分SRAM,近CPU可以访问)
#define MEM3_BLOCK_SIZE 32     //内存块大小为32字节
#define MEM3_MAX_SIZE  60*1024  //最大管理内存 60k
#define MEM3_ALLOC_TABLE_SIZE MEM3_MAX_SIZE/MEM3_BLOCK_SIZE  //内存表大小

以上可以看出tcp_client申请的是内部SRAM内存,为啥我把SRAM的文件删除,且将主函数的FSMC_SRAM_Init();  //初始化外部SRAM     函数删除掉,发现我的网线接口灯不亮。在这里有点搞蒙了申请的内部SRAM内存到底是不是外部硬件IS62WV51216的内存?还是单片机的RAM?因为我用的另外一块407开发板,没有IS62WV51216外部SRAM内存硬件,我想通过单片机的RAM用来作为申请内存,不知道可不可以。求大神和原子哥帮忙看一下哪里有问题?谢谢

最佳答案

查看完整内容[请看2#楼]

我发现问题了,这节知识根本没用到外部SRAM,但是原子哥的代码不够严谨,在LAN8720_Init()初始化的时候,里面没打开GPIOD时钟,而是将这个时钟使能放在了外部SRAM初始化代码里面去了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-9-27 11:06:46 | 显示全部楼层
我发现问题了,这节知识根本没用到外部SRAM,但是原子哥的代码不够严谨,在LAN8720_Init()初始化的时候,里面没打开GPIOD时钟,而是将这个时钟使能放在了外部SRAM初始化代码里面去了。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-9-27 13:22:21 | 显示全部楼层
没人帮我看看嘛?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-9-27 14:51:26 | 显示全部楼层
本帖最后由 zuozhongkai 于 2018-9-27 14:52 编辑

网络例程用的都是每部ram,没有用外部SRAM,你删除SRAM的文件以后,还要屏蔽掉main函数中动态内存管理初始化外部SRAM内存池的函数
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-9-27 15:48:54 | 显示全部楼层
zuozhongkai 发表于 2018-9-27 14:51
网络例程用的都是每部ram,没有用外部SRAM,你删除SRAM的文件以后,还要屏蔽掉main函数中动态内存管理初始 ...

大哥哥,具体在动态内存管理初始化外部SRAM里面屏蔽哪快代码呢?主函数里面我就保留了mymem_init(SRAMIN);//初始化内部内存池,其他地方需要屏蔽那些?还望指点一下
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2018-6-15
在线时间
33 小时
发表于 2018-11-1 14:23:46 | 显示全部楼层
楼主,问题解决了吗,我正好也遇见同样的问题,楼主出来说下?
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-11-2 09:09:16 | 显示全部楼层
陈其旦 发表于 2018-11-1 14:23
楼主,问题解决了吗,我正好也遇见同样的问题,楼主出来说下?

解决了,你遇到什么问题呢?
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2018-6-15
在线时间
33 小时
发表于 2018-11-3 18:33:31 | 显示全部楼层
jiangyy 发表于 2018-11-2 09:09
解决了,你遇到什么问题呢?

现在正在自己弄了一块板子,用的是STM42F407VGT6,没带外部SRAM,现在想的是,移植LWIP+FREERTOS  楼主成功了嘛  有相关经验或者源码传授下吗
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-11-5 12:33:03 | 显示全部楼层
陈其旦 发表于 2018-11-3 18:33
现在正在自己弄了一块板子,用的是STM42F407VGT6,没带外部SRAM,现在想的是,移植LWIP+FREERTOS  楼主成 ...

你是想做个LWIP+FREERTOS吗?单独让LWIP跑起来吗?
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2018-6-15
在线时间
33 小时
发表于 2018-11-5 14:23:53 | 显示全部楼层
jiangyy 发表于 2018-11-5 12:33
你是想做个LWIP+FREERTOS吗?单独让LWIP跑起来吗?

是的,  主要是想把LWIP移植进FREERTOS   
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-11-8 20:17:00 | 显示全部楼层
陈其旦 发表于 2018-11-5 14:23
是的,  主要是想把LWIP移植进FREERTOS

不难吧,你把不要的一点一点的删除掉,然后一点点的去调试,然后freertos系统创建一个任务,让它跑起来就行了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 21:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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