KEIL编译综合实验,ZI-data那么大,超过stm32RAM容量,为什么还能运行

2019-07-21 05:33发布

RT,综合实验的编译结果

Program Size: Code=191462 RO-data=87366 RW-data=5700 ZI-data=1104356  

可以看到ZI-data已经有1M的大小了。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
xiaoyan
1楼-- · 2019-07-21 08:14
 精彩回答 2  元偷偷看……
杨帆
2楼-- · 2019-07-21 13:36
回复【2楼】xiaoyan:
---------------------------------
额,抱歉,问了弱智的问题,,,,主要是我自己的东西编译之后:
Program Size: Code=58880 RO-data=176552 RW-data=1048 ZI-data=260120  
我这个没有外扩RAM的,这个zi-data都已经260K了,居然也能用。。。以前一直能用就没注意这个东西。

后来又加了一些东西,编译后大了一点,直接进入hardfault了。。。在启动汇编那一段之后,直接进入hardfault了,怀疑是RAM不够的问题。
我自己的工程上面用了FATFS+USB+jpeg解码+一些基本外设,自己做的图形菜单界面。
杨帆
3楼-- · 2019-07-21 18:20
驱动框架代码(可用)             rogram Size: Code=58880 RO-data=176552 RW-data=1048 ZI-data=260120  
加入上层应用代码(hardfault)Program Size: Code=80572 RO-data=184124 RW-data=1400 ZI-data=264888  

对比了一下,其实ZI-DATA增加的两不是很多,倒是FLASH,驱动框架代码大约480K,但是加入上层应用后的代码就超过512K了。
我找找原子的资料,吧FATFS的字库文件放到FLASH中去。

但是为什么驱动框架代码已经260K了还能用呢?我没有外扩RAM。    因为驱动框架用了USB+FATFS我刚才试了下,只要加入USB库,编译后的RAM占用已经超过64K了。  是不是keil显示的这个ZI-DATA是不准确的?
杨帆
4楼-- · 2019-07-21 19:49
仅仅是一个USB库,编译过后占用的RAM大小已经有200K左右了,就算超过64K,keil也不报错,我的RAM没有外扩,也没有设置外扩。
正点原子
5楼-- · 2019-07-21 20:37
回复【4楼】杨帆:
---------------------------------
你没外扩,只要你程序里面有类似这样的代码:
__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); //外部SRAM内存池

MDK就人为你外扩了。这就是定义在外部内存地址的数据。
和你外部外扩没关系,但是你下载到没外扩的板子,就可能死机了。
正点原子
6楼-- · 2019-07-22 02:02
 精彩回答 2  元偷偷看……

一周热门 更多>