本帖最后由 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用来作为申请内存,不知道可不可以。求大神和原子哥帮忙看一下哪里有问题?谢谢
网络例程用的都是每部ram,没有用外部SRAM,你删除SRAM的文件以后,还要屏蔽掉main函数中动态内存管理初始化外部SRAM内存池的函数
一周热门 更多>