原创 发现Keil软件的一个小bug,已经核实无误!

2010-4-19 18:25 1931 2 4 分类: MCU/ 嵌入式
Keil软件模拟运行时,其中ATMEL公司的AT89C51SND1这款芯片的两个内部寄存器地址定义错误,将BRL、BDRCON寄存器地址错误的定义成了0x9A、0x9B,正确地址应该是0x91、0x92.

导致在软件模拟仿真时凡是涉及这两个寄存器的操作都将无效,并且由于错误可能还会出现误操作。

现在还没找到可行的解决办法,仔细看了Keil的系统文件,似乎并没有开放更改此地址的接口,但应该可以通过更改系统的二进制文件实现,不过我还没找到究竟应该改哪里!

现在的一个解决方法是将错就错,将这两个寄存器的地址定义改为错误的0x9A、0x9B即可,待实际下载运行时再更正过来!

如果有可以直接更正的方法,望一定赐教!

配置文件可以这样写,方便开发工作的进行:
#ifndef keil_debug
Sfr (BRL     , 0x91);  // 正确的定义
Sfr (BDRCON  , 0x92);
#else
Sfr (BRL     , 0x9A);  // 这是错误的地址定义,仅调试时用,Keil的仿真文件错了
Sfr (BDRCON  , 0x9B);
#endif

在电脑上模拟运行时,增加一行:
#define  keil_debug
实际下载前再次编译,并取消此定义即可。

本人不才,这个问题我差不多花了一整天的时间才给找出来,实在太难找了,尤其当你使用内部专用的波特率发生器并且使用printf函数时,仿真时将必死无疑!就死在这个printf函数里!而且最让你郁闷的事情是,模拟运行不行,但实际运行却正确无误!如果你对自己的代码不确信,总相信电脑,一直想让它能仿真通过的话,那不知要浪费多少时间了!所以,千万别迷信电脑,也不能迷信大名鼎鼎的Keil!

我所知道的受影响版本至少是8.02和8.16A版,其它版本我没试了!

我也搜索到有人因为此问题发帖,希望对你有用,有用留个言啊^_^
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户525326 2010-4-27 08:23

早已经忘记汇编。

asus119_412419641 2010-4-24 00:29

好东西!多谢楼主分享。。。以后要避免这问题了啊!
相关推荐阅读
用户253657 2010-04-21 17:35
中国太空望远镜将发射 有望在欧美之前发现黑洞
中国太空望远镜将发射 有望在欧美之前发现黑洞硬X射线调制望远镜X射线辐射的波段范围是0.01—10纳米,其中波长较短(能量较高)的称为硬X射线,波长较长的称为软X射线。天体的X射线是无法到达地面的,因...
用户253657 2010-04-21 17:35
Autonics时间继电器电源设计拆解,可惜看不懂,寻求指点!
手边有一个Autonics的时间继电器,做工是相当的精致,结构也异常的巧妙!前段时间拆下来仔细的看了他的结构,几乎每一个细节都周密考虑认真设计,确实是精品!不得不佩服人家的设计水准及工艺水平,尤其是那...
用户253657 2010-04-21 17:35
一本EMC书上的简单摘录
《电磁兼容的实用技术、技巧和工艺》,这是从上海图书馆借来的,简单的翻了下,还可以,内容正如其名,比较实用,不过一时很难全盘通读,刚全部翻完了,看到了几点可能能用得上的摘录如下:1、CMOS的优先选用次...
用户253657 2010-04-21 11:27
我似乎又发现了卡西欧的一个bug
说明书上说:当进行涉及三角函数的微分计算时,请指定Rad作为计算器的预设角度单位。由于开始我没有注意到这个说明,所以就在度数的单位下尝试计算一些微分值,奇怪的事情发生了,这个fx-991ES偏偏不能计...
用户253657 2010-04-21 11:27
最让我钦佩的logo设计
这是最令我钦佩的logo设计,近来偶然见到了官方的设计说明:一、标识整体造型质朴简约、静动相生、线条流畅,富有动感。字母趋势线的变化组合,具有强烈的时代感和视觉冲击力,传达出一个现代通信企业的崭新形象...
用户253657 2010-04-20 19:49
发现了PADS Layout 2005的Verify Design中一个隐藏的很深的选项!
PADS Layout 2005中的Vverify Design中,检查错误时,仅检查当前窗口!今天偶然发现的,所以在检查时需要整板显示,否则窗口外的错误是不检查的,切记切记!不过不知有没有选项可以设...
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条