请求帮助:使用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参数,编译不报错,但是实际运行会出现意外当机。 在程序中间加接力,进行程序跳转。 虽然已经过去蛮久了,还是回答下,以备后人再遇到,程序大小超出选定器件的内存大小,在设置中将 code room size 改为 large即可 楼主强大,谢谢楼主! zenboys 发表于 2009-12-30 15:15 static/image/common/back.gif
虽然已经过去蛮久了,还是回答下,以备后人再遇到,程序大小超出选定器件的内存大小,在设置中将 code room ...
具体怎么设置啊? DP974896539 发表于 2013-8-8 17:46
具体怎么设置啊?
option->Target面板下左数第3个 Code Rom Size的下拉菜单。。。
页:
[1]