高手请进KEIL C中编译不能生成.HEX文件的分析

来源:百度知道 编辑:UC知道 时间:2024/05/28 03:07:22
Build target 'Target 1'
assembling Banktp2808.a51...
compiling i2c.c...
compiling root.c...
compiling ir.c...
compiling rmcon.c...
compiling tw2815v.c...
compiling audio.c...
compiling eprom.c...
compiling ghdd.c...
compiling gsearch.c...
compiling md.c...
compiling mdmenu.c...
compiling vloss.c...
compiling gmain.c...
compiling ptz_protocol.c...
compiling cs4954.c...
compiling gcset.c...
compiling gio.c...
compiling sio.c...
compiling lib.c...
compiling gmenu.c...
compiling gosd.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PTZ_SPEED_SELECT?PTZ_PROTOCOL
Program Size: data=36.1 xdata=30443 code=90420
running oc51 on file ".\2808\TP2808"...
BANKED OBJECT FILE CONVERTER OC51 V3.10
COPYRIGHT KEIL ELEKTRONIK GmbH 1991 - 2002
GENERATING STANDARD (UN-BANKED) OBJECT FI

程序大小你看这句Program Size: data=36.1 xdata=30443 code=90420 就可以了,只要这里是对的,你管HEX文件的大小干嘛。
文中有一个警告".\2808\TP2808" - 0 Error(s), 1 Warning(s).

你这里编译后的情况是,只有你的一个PTZ_SPEED_SELECT()函数没有被调用,这个是个警告,一般没有什么影响。
而且你要注意,Keil里一个Bank是64K的大小,而你的160K程序需要3个Bank,所以你需要这样设置:
打开KEIL工程文件,右键点击你的“目标”(一般为Target 1)----“设置选项”(这里有些简写)----“项目”标签页,,,在最下面有个“分页代码”可选框,你需要选中她后,在Banks下拉框中选择3,而后面的Bank范围的开始和结束地址一般不用改,默认的为0x0000---0xffff(这样已经是最大了)(这样的话,你的最大程序容量是64KB*3=192KB,满足你160KB要求),全部确认后,重新编译整个工程文件,如果程序本身没有问题,而只有先前由于代码大小而把写到芯片中的程序部分截掉的问题就应该能解决了。

PS:我还是按照你上面的实际情况来解决的,Good Luck.

上面不是显示已经生成了HEX么? 你没找到?

没有问题啊