OpenEdv-开源电子网

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

使用原子的STM32F4探索者开发板的外部SRAM,需要进行设置吗?

[复制链接]

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
发表于 2017-11-7 12:05:18 | 显示全部楼层 |阅读模式
1金钱
我在自己的程序中定义了一个结构体,并使用例程中malloc.c的mymalloc来申请了外部的SRAM空间,但是无论我对结构体的成员如何赋值,成员变量的值均为0;
而当我使用mymalloc来申请内部的SRAM空间时,就可以正常赋值。
所以请问下大家,使用外部的SRAM空间,还需要在什么地方进行设置吗?

最佳答案

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

找到原因了,需要在system_stm32f4xx.c中,将宏 #define DATA_IN_ExtSRAM 打开。但是奇怪的是,我在原子的内存管理实验中并未发现有system_stm32f4xx.c这个文件,也并没有#define DATA_IN_ExtSRAM这个宏,却没有出现不能赋值的情况。不知道原因何在
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
 楼主| 发表于 2017-11-7 12:05:19 | 显示全部楼层
找到原因了,需要在system_stm32f4xx.c中,将宏 #define DATA_IN_ExtSRAM 打开。但是奇怪的是,我在原子的内存管理实验中并未发现有system_stm32f4xx.c这个文件,也并没有#define DATA_IN_ExtSRAM这个宏,却没有出现不能赋值的情况。不知道原因何在
回复

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
 楼主| 发表于 2017-11-7 12:06:15 | 显示全部楼层
我打印了结构体的地址,确实已经指向了外部的SRAM
回复

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
 楼主| 发表于 2017-11-7 14:08:05 | 显示全部楼层
为什么在原子的内存管理例程上就能对定义在外部SRAM的结构体正常赋值,在自己的程序就不行呢
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-7 14:59:47 | 显示全部楼层
要想使用外部SRAM,首先要先初始化外部SRAM,只要初始化完外部SRAM以后才能对定义到外部SRAM中的变量做操作。
开往春天的手扶拖拉机
回复

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
 楼主| 发表于 2017-11-7 15:09:02 | 显示全部楼层
zuozhongkai 发表于 2017-11-7 14:59
要想使用外部SRAM,首先要先初始化外部SRAM,只要初始化完外部SRAM以后才能对定义到外部SRAM中的变量做操作 ...

        FSMC_SRAM_Init();                       
        mymem_init(SRAMEX);       
这些都已经初始化了       
回复

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2017-10-19
在线时间
71 小时
 楼主| 发表于 2017-11-7 15:12:30 | 显示全部楼层
zuozhongkai 发表于 2017-11-7 14:59
要想使用外部SRAM,首先要先初始化外部SRAM,只要初始化完外部SRAM以后才能对定义到外部SRAM中的变量做操作 ...

test *TE;
TE=mymalloc(SRAMEX,sizeof(test));
TE->i=6;
printf("TE->i:%d\r\n",TE->i);
打印出来i的值为0,而不是6。但是TE的地址为0x680e0fe4,也就是说TE已经在外部SRAM里了,但是就是不能赋值
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 08:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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