OpenEdv-开源电子网

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

429 emwin例程为何占用SRAM这么大

[复制链接]

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-1-14 16:19:07 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 hi我歌月徘徊 于 2017-1-14 16:20 编辑

看原子哥emwin例程,每个例程所占用的SRAM都得有24M以上,这也太大了,又看看探索者的emwin例程,sram只有1M多,对比一下工程文件,
TE]KCV{O3F[`D8E$]9SZ0XN.jpg

对比一下工程吧,407和429的,emwin实验 bmp图片显示,编译之后的大小 如图。


不仅仅是这一个工程,几乎429的每一个emwin都在24m以上,407的在1m以上。

额~~~ 为啥差别那么大呢 这个跟分配给enwin的内存好像没有关系吧,429分配了8M给enwin,改成和407一样,也就是100k,编译报的信息还是那么多。。。。

还请大神指点

最佳答案

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

一是因为429有内部显示控制器LTDC,所以需要在内存当中开辟一块显存作为缓冲区。 如果是800*480*24bit,那至少就需要1152000B的内存了,而一般F429还分前景层和背景层,那就需要2304000B内存。而F407不能这样做,它是使用的外部显示控制器,所以没有内部显存,代价就是需要额外控制器以及速度慢上几十倍。 而最主要的原因是因为原子的F429开发板外部内存比较大(有SDRAM控制器,可以用便宜容量大的SDRAM),所以能够被内存分配算 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-14 16:19:08 | 显示全部楼层
本帖最后由 yyx112358 于 2017-1-14 17:49 编辑

一是因为429有内部显示控制器LTDC,所以需要在内存当中开辟一块显存作为缓冲区。
如果是800*480*24bit,那至少就需要1152000B的内存了,而一般F429还分前景层和背景层,那就需要2304000B内存。而F407不能这样做,它是使用的外部显示控制器,所以没有内部显存,代价就是需要额外控制器以及速度慢上几十倍。
而最主要的原因是因为原子的F429开发板外部内存比较大(有SDRAM控制器,可以用便宜容量大的SDRAM),所以能够被内存分配算法mymalloc()用上的就比较多(不信你进malloc.h看看),仅此而已
“未被初始化的变量”意思是这些变量只是告诉编译器可能会用上,但是只有用上之后才会分配内存,甚至可能不会真的用上。
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-1-14 16:30:13 | 显示全部楼层
Code:表示程序所占用 FLASH 的大小( FLASH)。
RO-data:即 Read Only-data, 表示程序定义的常量( FLASH)。
RW-data:即 Read Write-data, 表示已被初始化的变量( SRAM)
ZI-data:即 Zero Init-data, 表示未被初始化的变量(SRAM)

表示未被初始化的变量(SRAM)  这个能不能查看呢?
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-1-17 09:51:39 | 显示全部楼层
yyx112358 发表于 2017-1-14 17:47
一是因为429有内部显示控制器LTDC,所以需要在内存当中开辟一块显存作为缓冲区。
如果是800*480*24bit,那 ...

恩恩 懂了 谢谢指点
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-1-17 10:12:37 | 显示全部楼层
本帖最后由 hi我歌月徘徊 于 2017-1-17 10:14 编辑
yyx112358 发表于 2017-1-14 16:19
一是因为429有内部显示控制器LTDC,所以需要在内存当中开辟一块显存作为缓冲区。
如果是800*480*24bit,那 ...

还有一个问题想请教一下, WPPN@@YGK}6`V02IL9E[U32.png
在malloc文件中 定义了外部SDRAM的地址,是从0XC0600000开始的,后面注释说前面2M给了ltdc,我大概算了一下,外部 SDRAM,地址是从 0XC000 0000 开始的,共 32768KB( 32MB),0XC060 0000 - 0XC000 0000 =60 0000 =6291456byte/1024/1024=6M,不是分了2M啊?

回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-1-17 10:19:08 | 显示全部楼层
hi我歌月徘徊 发表于 2017-1-17 10:12
还有一个问题想请教一下,
在malloc文件中 定义了外部SDRAM的地址,是从0XC0600000开始的,后面注释说前 ...

奥~知道了 后面注释说的是1280*800分辨率的,按照565的方式每个像素占2byte,1280*800*2/1024/1024=1.95M,还要分两层,1.95*2=3.9M,所以外部SRAM分了6M过去,这样分析可以吧?
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-17 11:10:20 | 显示全部楼层
hi我歌月徘徊 发表于 2017-1-17 10:19
奥~知道了 后面注释说的是1280*800分辨率的,按照565的方式每个像素占2byte,1280*800*2/1024/1024=1.95M ...

没错,留了一定裕量,可能是为了支持更大的屏幕吧
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
 楼主| 发表于 2017-1-17 11:17:23 | 显示全部楼层
yyx112358 发表于 2017-1-17 11:10
没错,留了一定裕量,可能是为了支持更大的屏幕吧

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 02:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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