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

[复制链接]
 楼主| xvezhe 发表于 2014-2-21 14:51 | 显示全部楼层 |阅读模式
本帖最后由 xvezhe 于 2014-2-21 14:53 编辑


写程序时。data才108字节,怎么就编译不通过了呢
若data为140字节,Keil u4 要设置那些参数的呢?全局变量又是如何定义的呢?
请各位指点啊。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
电子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
你没有**吧。 要注册机。

已经**了
 楼主| xvezhe 发表于 2014-2-21 15:13 | 显示全部楼层
ningling_21 发表于 2014-2-21 15:08
去掉一些多余的变量定义...

变量都需要用到,才定义的啊,估计可能要定义的变量data达到150字节,但现在108字节就不通过了,不知啥原因
ningling_21 发表于 2014-2-21 15:14 | 显示全部楼层
xvezhe 发表于 2014-2-21 15:13
变量都需要用到,才定义的啊,估计可能要定义的变量data达到150字节,但现在108字节就不通过了,不知啥原 ...

有外部RAM的,可以把变量定义到外部RAM里...
 楼主| xvezhe 发表于 2014-2-21 15:17 | 显示全部楼层
本帖最后由 xvezhe 于 2014-2-22 10:03 编辑
ningling_21 发表于 2014-2-21 15:14
有外部RAM的,可以把变量定义到外部RAM里...

硬件不支持外部RAM,只能从软件更改。。。
as564335sa 发表于 2014-2-21 15:18 | 显示全部楼层
尽量优化,少用全局变量,一些使用频率不是特别高的变量用idata,实在不行把small模式改成large模式
ayb_ice 发表于 2014-2-21 15:34 | 显示全部楼层
请注意DATA只有128,IDATA是256
computer00 发表于 2014-2-21 15:54 | 显示全部楼层
应该不是RAM不够的问题
 楼主| xvezhe 发表于 2014-2-21 16:30 | 显示全部楼层
computer00 发表于 2014-2-21 15:54
应该不是RAM不够的问题

那问题在那的呢?
computer00 发表于 2014-2-21 16:50 | 显示全部楼层
将全部编译信息发出来看看。
很忙 发表于 2014-2-21 17:21 | 显示全部楼层
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法了:
1:减少不用的变量。
2:看看编译有没有警告,把警告都解决掉。因为有时候你的一个函数,定义了而没有调用它,也会占用data。
ff8zgs 发表于 2014-2-21 17:26 | 显示全部楼层
keil 在内存管理上 做的不是很好,你先把编译信息完整的贴出来 ,然后看看M51文件,M51文件能告诉你你的RAM怎么分配,你也可以知道哪些文件的变量没有回收。然后再自己一点一点的优化代码。我一般代码都控制在128以下。
xiwang2 发表于 2014-2-21 17:41 | 显示全部楼层
很忙 发表于 2014-2-21 17:21
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法 ...

顶!你定义的变量有点多,都没有多少堆栈空间了,即使你程序通过了,也不一定能出结果,变量挤压堆栈的后果就是程序跑飞,现象足以乱倒连自己也不明白。现在的单片机都是增强型的,将unsigned char型或者susigned char data改写为unsigned char xdata 应该好点,但是速度也会慢点。
woshichuanqi 发表于 2014-2-22 00:06 | 显示全部楼层
xiwang2 发表于 2014-2-21 17:41
顶!你定义的变量有点多,都没有多少堆栈空间了,即使你程序通过了,也不一定能出结果,变量挤压堆栈的后 ...

回答正确
 楼主| 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
 楼主| xvezhe 发表于 2014-2-22 10:00 | 显示全部楼层
很忙 发表于 2014-2-21 17:21
你把一些变量unsigned char xdata这样定义,就是加xdata,看看有没有效果。没有效果的话,那就只能2个做法 ...

xdata 变量不是存储在外部RAM中吗?我这硬件都不支持外部存储
ayb_ice 发表于 2014-2-22 10:13 | 显示全部楼层
先搞清楚什么叫DATA什么叫IDATA再说吧
computer00 发表于 2014-2-22 10:16 | 显示全部楼层
把没有调用的函数先注释掉再试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

225

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部