关于LAN8720申请内存的问题

2019-07-20 05:14发布

本帖最后由 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 ",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用来作为申请内存,不知道可不可以。求大神和原子哥帮忙看一下哪里有问题?谢谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
jiangyy
1楼-- · 2019-07-20 05:46
我发现问题了,这节知识根本没用到外部SRAM,但是原子哥的代码不够严谨,在LAN8720_Init()初始化的时候,里面没打开GPIOD时钟,而是将这个时钟使能放在了外部SRAM初始化代码里面去了。
jiangyy
2楼-- · 2019-07-20 09:04
 精彩回答 2  元偷偷看……
taizonglai
3楼-- · 2019-07-20 15:02
本帖最后由 zuozhongkai 于 2018-9-27 14:52 编辑

网络例程用的都是每部ram,没有用外部SRAM,你删除SRAM的文件以后,还要屏蔽掉main函数中动态内存管理初始化外部SRAM内存池的函数
jiangyy
4楼-- · 2019-07-20 16:40
zuozhongkai 发表于 2018-9-27 14:51
网络例程用的都是每部ram,没有用外部SRAM,你删除SRAM的文件以后,还要屏蔽掉main函数中动态内存管理初始 ...

大哥哥,具体在动态内存管理初始化外部SRAM里面屏蔽哪快代码呢?主函数里面我就保留了mymem_init(SRAMIN);//初始化内部内存池,其他地方需要屏蔽那些?还望指点一下
陈其旦
5楼-- · 2019-07-20 18:08
 精彩回答 2  元偷偷看……
jiangyy
6楼-- · 2019-07-20 20:21
陈其旦 发表于 2018-11-1 14:23
楼主,问题解决了吗,我正好也遇见同样的问题,楼主出来说下?

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

一周热门 更多>