打印

keil U4 写程序,data过大如何处理

[复制链接]
5532|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xvezhe|  楼主 | 2014-2-21 14:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
电子write_cai| | 2014-2-21 15:00 | 只看该作者
你没有**吧。 要注册机。

使用特权

评论回复
板凳
ningling_21| | 2014-2-21 15:08 | 只看该作者
去掉一些多余的变量定义...

使用特权

评论回复
地板
xvezhe|  楼主 | 2014-2-21 15:08 | 只看该作者
电子write_cai 发表于 2014-2-21 15:00
你没有**吧。 要注册机。

已经**了

使用特权

评论回复
5
xvezhe|  楼主 | 2014-2-21 15:13 | 只看该作者
ningling_21 发表于 2014-2-21 15:08
去掉一些多余的变量定义...

变量都需要用到,才定义的啊,估计可能要定义的变量data达到150字节,但现在108字节就不通过了,不知啥原因

使用特权

评论回复
6
ningling_21| | 2014-2-21 15:14 | 只看该作者
xvezhe 发表于 2014-2-21 15:13
变量都需要用到,才定义的啊,估计可能要定义的变量data达到150字节,但现在108字节就不通过了,不知啥原 ...

有外部RAM的,可以把变量定义到外部RAM里...

使用特权

评论回复
7
xvezhe|  楼主 | 2014-2-21 15:17 | 只看该作者
本帖最后由 xvezhe 于 2014-2-22 10:03 编辑
ningling_21 发表于 2014-2-21 15:14
有外部RAM的,可以把变量定义到外部RAM里...

硬件不支持外部RAM,只能从软件更改。。。

使用特权

评论回复
8
as564335sa| | 2014-2-21 15:18 | 只看该作者
尽量优化,少用全局变量,一些使用频率不是特别高的变量用idata,实在不行把small模式改成large模式

使用特权

评论回复
9
ayb_ice| | 2014-2-21 15:34 | 只看该作者
请注意DATA只有128,IDATA是256

使用特权

评论回复
10
computer00| | 2014-2-21 15:54 | 只看该作者
应该不是RAM不够的问题

使用特权

评论回复
11
xvezhe|  楼主 | 2014-2-21 16:30 | 只看该作者
computer00 发表于 2014-2-21 15:54
应该不是RAM不够的问题

那问题在那的呢?

使用特权

评论回复
12
computer00| | 2014-2-21 16:50 | 只看该作者
将全部编译信息发出来看看。

使用特权

评论回复
13
很忙| | 2014-2-21 17:21 | 只看该作者
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法了:
1:减少不用的变量。
2:看看编译有没有警告,把警告都解决掉。因为有时候你的一个函数,定义了而没有调用它,也会占用data。

使用特权

评论回复
14
ff8zgs| | 2014-2-21 17:26 | 只看该作者
keil 在内存管理上 做的不是很好,你先把编译信息完整的贴出来 ,然后看看M51文件,M51文件能告诉你你的RAM怎么分配,你也可以知道哪些文件的变量没有回收。然后再自己一点一点的优化代码。我一般代码都控制在128以下。

使用特权

评论回复
15
xiwang2| | 2014-2-21 17:41 | 只看该作者
很忙 发表于 2014-2-21 17:21
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法 ...

顶!你定义的变量有点多,都没有多少堆栈空间了,即使你程序通过了,也不一定能出结果,变量挤压堆栈的后果就是程序跑飞,现象足以乱倒连自己也不明白。现在的单片机都是增强型的,将unsigned char型或者susigned char data改写为unsigned char xdata 应该好点,但是速度也会慢点。

使用特权

评论回复
16
woshichuanqi| | 2014-2-22 00:06 | 只看该作者
xiwang2 发表于 2014-2-21 17:41
顶!你定义的变量有点多,都没有多少堆栈空间了,即使你程序通过了,也不一定能出结果,变量挤压堆栈的后 ...

回答正确

使用特权

评论回复
17
xvezhe|  楼主 | 2014-2-22 09:32 | 只看该作者
computer00 发表于 2014-2-21 16:50
将全部编译信息发出来看看。

Build target 'Target 1'
assembling STARTUP.A51...
compiling dj72z130824组合式程序.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?SYSINIT?DJ72Z130824组合式程序
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?COMMUNICATION?DJ72Z130824组合式程序
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?DJ72Z130824组合式程序
    LENGTH:  005FH
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ONESTEPT
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  K
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  J
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  I
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  TIMER2_COUNT
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  DAT_BUG
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NUM
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  FAULT_NUM
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  TIME_DAT
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  SUB
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CH
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  LOADADDR
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  STATE_MACHINE
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NOWSTEP
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  TIMER_COUNT
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_DJS
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ONESTEP
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  RYG_A
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  JIAOYM
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_F
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_E
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_D
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_C
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_B
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NOWSTEPT
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  CNT_A
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NUM3
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NUM2
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NUM1
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  NEXTSTEP
    SEGMENT: ?DT?DJ72Z130824组合式程序
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  MAIN
    MODULE:  D:\KEIL\C51\LIB\C51S.LIB (?C_INIT)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  MAIN
    MODULE:  D:\KEIL\C51\LIB\C51S.LIB (?C_INIT)
    ADDRESS: 01DDH
Program Size: data=108.0 xdata=0 code=1035
Target not created

使用特权

评论回复
18
xvezhe|  楼主 | 2014-2-22 10:00 | 只看该作者
很忙 发表于 2014-2-21 17:21
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法 ...

xdata 变量不是存储在外部RAM中吗?我这硬件都不支持外部存储

使用特权

评论回复
19
ayb_ice| | 2014-2-22 10:13 | 只看该作者
先搞清楚什么叫DATA什么叫IDATA再说吧

使用特权

评论回复
20
computer00| | 2014-2-22 10:16 | 只看该作者
把没有调用的函数先注释掉再试试看

使用特权

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

本版积分规则

54

主题

225

帖子

2

粉丝