lizengmao 发表于 2008-11-10 20:46:07

请求帮助:使用KEIL UV2编译ASM出现L121:IMPROPER FIXUP错误【恢复】

一直在自己学习89C52。终于使用ASM写出4K的程序了。虽然不是很顺利,断断续续写了很久,但毕竟写了。

由于程序较大,为了方便维护,因此使用SEGMENT指令把程序分割成小段。刚开始没有什么问题。

现在程序大了,问题就多了。本来好好的程序,加入某一行代码后出现了L121:IMPROPER FIXUP错误。

开始认为是定义的段太大,拆分段后OK。

随着程序的不断变大,频频出现这个错误,不堪其扰,决心找到一个彻底解决的方法。

打开KEIL UV2的A51.PDF,据说在使用ASM的ACALL等指令时超出2K范围就会出现这个错误,于是把这个段的ACALL全部改为LCALL,JMP改为LJMP,重新编译依然出现错误。

再看SEGMENT的使用说明,在后面加上INBLOCK参数,编译OK。但是实际运行到某一处,则89C52会当机。使用仿真器追踪也无法定位出问题的地方。看来只是KEIL UV2蒙蔽自己的手段而已。

上网搜索“IMPROPER FIXUP”,没有得到预期的结果,因此在这里向各位求助。希望有经验的可以帮一把。

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_492712.jpg

 (原文件名:ERROR.jpg) 

这是出现错误的图片

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_492713.jpg

 (原文件名:OK.jpg) 



在SEGMENT后面加入INBLOCK参数,编译不报错,但是实际运行会出现意外当机。

elecfun 发表于 2008-11-10 20:53:16

在程序中间加接力,进行程序跳转。

zenboys 发表于 2009-12-30 15:15:40

虽然已经过去蛮久了,还是回答下,以备后人再遇到,程序大小超出选定器件的内存大小,在设置中将 code room size 改为 large即可

onlyme945 发表于 2012-7-1 09:41:47

楼主强大,谢谢楼主!

DP974896539 发表于 2013-8-8 17:46:36

zenboys 发表于 2009-12-30 15:15 static/image/common/back.gif
虽然已经过去蛮久了,还是回答下,以备后人再遇到,程序大小超出选定器件的内存大小,在设置中将 code room ...

具体怎么设置啊?

zi_yang 发表于 2014-5-11 05:26:44

DP974896539 发表于 2013-8-8 17:46
具体怎么设置啊?

option->Target面板下左数第3个 Code Rom Size的下拉菜单。。。
页: [1]
查看完整版本: 请求帮助:使用KEIL UV2编译ASM出现L121:IMPROPER FIXUP错误【恢复】