OpenEdv-开源电子网

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

mymalloc函数在外存池申请数组无法正常使用

[复制链接]

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
发表于 2018-8-21 13:14:06 | 显示全部楼层 |阅读模式
1金钱
我使用原子的内存管理函数,u8 *net_data_X;   
u8 *net_data_W;   
       net_data_X=mymalloc(2,1200);//2:CCM区  0:内部RAM  1:外SRAM
if(net_data_X!=NULL)
{
for(num=0;num<1200;num++)  net_data_X[num]=0x89;                
}
// net_data_X申请正常

net_data_W=mymalloc(1,1200);  //2:CCM区  0:内部RAM  1:外SRAM
if(net_data_W!=NULL)
{
for(num=0;num<1200;num++)  net_data_W[num]=0x99;       
}       


        for(i=0;i<1200;i++)
{

          FSMC_SRAM_WriteBuffer((net_data_X+i),i,1);


        }
              
        for(i=0;i<1200;i++)
{

          FSMC_SRAM_ReadBuffer((net_data_W+i),i,1);


        }

编译后正常,可以将X数组内容写入到外存的指定区域,经实验FSMC总线读写外存没有问题,如果将net_data_W数组定义到CCM区就正常,但是从外存的指定区域读取的数据无法拷贝到在外部内存池申请的数组net_data_W中,这是怎么回事?就是说 net_data_W=mymalloc(1,1200);  //2:CCM区  0:内部RAM  1:外SRAM   外存内的数组net_data_W数据都是错的无法正常使用?
困扰我很久,麻烦指点一下,多谢!

最佳答案

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

外存申请,原子的TCP_sever程序和内存管理程序一点问题没有,问题出在我自己的程序上,由于我原来没有使用407的外存,有些管脚配置和407的FSMC冲突,尽管我屏蔽了一些初始化,但是跟 FSMC_SRAM_Init(); mymem_init(SRAMIN); mymem_init(SRAMEX); mymem_init(SRAMCCM);三条语句在程序中的位置有关,通过调整位置可以正常使用mymalloc申请外存,怀疑访问的地址线被某些初始化干扰,等正式写程序的时候,我再注意一下!通过这几天 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
 楼主| 发表于 2018-8-21 13:14:07 | 显示全部楼层
zds0311 发表于 2018-8-24 11:27
感谢原子的点睛,原子内存管理实验可以在原子开发板运行环境下正常malloc出地址,通过J_LINK仿真可以正常 ...

外存申请,原子的TCP_sever程序和内存管理程序一点问题没有,问题出在我自己的程序上,由于我原来没有使用407的外存,有些管脚配置和407的FSMC冲突,尽管我屏蔽了一些初始化,但是跟 FSMC_SRAM_Init();                mymem_init(SRAMIN);                mymem_init(SRAMEX);   mymem_init(SRAMCCM);三条语句在程序中的位置有关,通过调整位置可以正常使用mymalloc申请外存,怀疑访问的地址线被某些初始化干扰,等正式写程序的时候,我再注意一下!通过这几天的折腾FSMC访问外存和内存管理深入明白了,感谢原子的回复!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-22 01:58:11 | 显示全部楼层
仿真找下问题
回复

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
 楼主| 发表于 2018-8-22 11:57:35 | 显示全部楼层

感谢原子哥的回复:FSMC初始化没有问题,使用attribute at   定义外存地址,可以通过FSMC对外存数组进行正常操作,但是mymalloc函数还是不好使,继续研究中
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-23 01:39:42 | 显示全部楼层
zds0311 发表于 2018-8-22 11:57
感谢原子哥的回复:FSMC初始化没有问题,使用attribute at   定义外存地址,可以通过FSMC对外存数组进行 ...

用我们内存管理实验的方法,测试下。
正常能malloc出地址,肯定可以用才对。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
 楼主| 发表于 2018-8-24 11:27:27 | 显示全部楼层
        感谢原子的点睛,原子内存管理实验可以在原子开发板运行环境下正常malloc出地址,通过J_LINK仿真可以正常看到数组中的所有值都正确
        net_data_D=mymalloc(1,1200);//申请2K字节
       
        if(net_data_D!=NULL)
        {
          net_data_D[0]=((u32)net_data_D)>>24;   //malloc出的地址是680EFB40
          net_data_D[1]=((u32)net_data_D)>>16;
          net_data_D[2]=((u32)net_data_D)>>8;
          net_data_D[3]=((u32)net_data_D);
          net_data_D[4]=0x55;
          for(num=5;num<1200;num++)
          {
            net_data_D[num]=0x61;
          }       
        }
将原子的内存管理程序下载到我设计的板卡中也好使,说明硬件没问题,原子的内存管理程序我也可以正常mymalloc出地址,但是我自己的以太网程序中的mymalloc  CCM区都可以malloc出地址,但是外存还是不行,继续研究中。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-29 01:47:17 | 显示全部楼层
zds0311 发表于 2018-8-21 13:14
外存申请,原子的TCP_sever程序和内存管理程序一点问题没有,问题出在我自己的程序上,由于我原来没有使 ...

谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 13:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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