打印
[开发工具]

关于ZI-DATA过大的问题。

[复制链接]
11214|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyzjacky|  楼主 | 2017-12-25 17:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xyzjacky 于 2017-12-25 17:44 编辑

当前我有一个工程,用的是STM32F103RC的单片机。程序最近做了一点点改动,发现老是跑飞,当前分析后,可能是内存的使用出错(debug发现,程序并非停在某一句,而是完全不运行,反复点击RUN也没有用),朋友提醒说ZI-DATA过大,如下:


Program Size: Code=47984 RO-data=15872 RW-data=228 ZI-data=1049236  
在.map文件中看到的信息如下
    Total RO  Size (Code + RO Data)                63856 (  62.36kB)
    Total RW  Size (RW Data + ZI Data)           1050488 (1025.87kB)
    Total ROM Size (Code + RO Data + RW Data)      64084 (  62.58kB)


然后我的启动文件信息如下:
Stack_Size      EQU     0x00000400
Heap_Size       EQU     0x00000200




现在求教的是:
1. 有哪些原因会导致ZI-DATA过大?怎么优化才能使其不那么大?
2. 我程序跑飞是不是与Stack_Size小了,而ZI Data过大有关?




望各位大哥大姐,师兄师姐,以及各位新老朋友不吝赐教,拜谢,拜谢!
沙发
mmuuss586| | 2017-12-25 18:01 | 只看该作者
程序用了大数组吧;

使用特权

评论回复
板凳
捉虫天师| | 2017-12-25 19:35 | 只看该作者
ZI-data 表示 未初始化的全局变量

使用特权

评论回复
地板
捉虫天师| | 2017-12-25 19:35 | 只看该作者
你看看有多少全局变量吧,搞太大了。

使用特权

评论回复
5
wahahaheihei| | 2017-12-25 21:14 | 只看该作者
不是有个贴讲跑飞的原因吗?你找找看。

使用特权

评论回复
6
dongnanxibei| | 2017-12-26 10:53 | 只看该作者
这个是你定义的变量。

使用特权

评论回复
7
xyzjacky|  楼主 | 2017-12-27 10:16 | 只看该作者
经过和原子哥的沟通,找到原因了,本来我只想使用mymemcpy和mymemset两个函数,但是我把正点原子开发板中内存管理的所有的代码全部复制过来了,导致编译后,编译器在内存中申请了很大的堆栈,虽然我只使用了mymemcpy和mymemset两个函数。而今把其他没有用到的和内存管理相关的代码注释掉,ZI-DATA就小多了。

下面是现在的编译信息,小多了。
Program Size: Code=49556 RO-data=15872 RW-data=236 ZI-data=6372

另一个办法是把启动文件中的Stack_Size改大,改成0x800,这样也没有问题。

使用特权

评论回复
评论
李小川希比 2018-5-13 22:12 回复TA
@xyzjacky :好的,谢谢 
xyzjacky 2018-4-9 12:57 回复TA
@李小川希比 :这是指编译器分配的堆的大小。关于STM32的堆和栈,你可以百度进行了解。 
李小川希比 2018-3-29 10:31 回复TA
你好,那请问启动文件中的Stack_Size又是什么意思呢? 
8
赎罪1544| | 2023-3-16 16:44 | 只看该作者
xyzjacky 发表于 2017-12-27 10:16
经过和原子哥的沟通,找到原因了,本来我只想使用mymemcpy和mymemset两个函数,但是我把正点原子开发板中内 ...

中微是要把Stack_Size      EQU     0x00000400
改小才行 比如0x00000200

使用特权

评论回复
9
Henryko| | 2023-3-16 22:14 | 只看该作者
全局变量搞大了吧

使用特权

评论回复
10
LLGTR| | 2023-3-23 09:49 | 只看该作者
程序跑飞肯定和这个ZI-data跑不了关系。

使用特权

评论回复
11
芯路例程| | 2023-3-23 09:49 | 只看该作者
你这程序有驱动屏幕?要这么大的RAM空间。

使用特权

评论回复
12
Pretext| | 2023-3-23 09:50 | 只看该作者
只能减少变量的内存,看看map文件是哪里用了这么大的内存。

使用特权

评论回复
13
huanghuac| | 2023-3-27 20:45 | 只看该作者
申请了很大的堆栈

使用特权

评论回复
14
hanwe| | 2023-4-1 18:06 | 只看该作者
程序用了大数组吧;

使用特权

评论回复
15
wangpe| | 2023-4-1 18:11 | 只看该作者
ZI-data 表示 未初始化的全局变量

使用特权

评论回复
16
llljh| | 2023-4-1 18:13 | 只看该作者
你看看有多少全局变量吧,搞太大了。

使用特权

评论回复
17
llljh| | 2023-4-1 18:14 | 只看该作者
不是有个贴讲跑飞的原因吗?你找找看。

使用特权

评论回复
18
gongche| | 2023-4-1 18:16 | 只看该作者
这个是你定义的变量。

使用特权

评论回复
19
songqian17| | 2023-4-1 18:20 | 只看该作者
全局变量搞大了吧

使用特权

评论回复
20
dingy| | 2023-4-1 18:22 | 只看该作者
程序跑飞肯定和这个ZI-data跑不了关系。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

112

帖子

4

粉丝