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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。