Keil C51 总线外设操作问题的深入分析
电子元件,电子元器件深圳市创唯电子有限公司
您现在的位置: 首页 > 电子技术
Keil C51 总线外设操作问题的深入分析  2012/3/1
在实际工作中遇到对同一端口反复连续读取,Keil C5l编译并未达到预期的结果。原文作者对C编译出来的汇编程序进行分析发现,对同一端口的第二次读取语句并未被编译。但可惜原文作者并未分析没有被编译的原因,而是匆忙地采用一些不太规范的方法试验出了两种解决办法。 对此问题,翻阅Keil C51的手册很容易发现:KellC51的编译器有一个优化设置,不同的优化设置,会产生不同的编译结果。一般情况缺省编译优化设置被设定为8级优化,

       在实际工作中遇到对同一端口反复连续读取,Keil C5l编译并未达到预期的结果。原文作者对C编译出来的汇编程序进行分析发现,对同一端口的第二次读取语句并未被编译。但可惜原文作者并未分析没有被编译的原因,而是匆忙地采用一些不太规范的方法试验出了两种解决办法。   

       对此问题,翻阅Keil C51的手册很容易发现:KellC51的编译器有一个优化设置,不同的优化设置,会产生不同的编译结果。一般情况缺省编译优化设置被设定为8级优化,实际最高可设定为9级优化:   

       ①Dead code elimination。   
       ②Data overlaymg。   
       ③Peephole optimization。   
       ④Register variables。   
       ⑤Common subexpression elimination。   
       ⑥Loop rotation。   
       ⑦Extended Index Access 0ptimizing。   
       ⑧Reuse Common。Entry Code。   
       ⑨Common Block Subroutines。   

       而以上的问题,正是由于KeiI C5l编译优化产生的。因为在原文程序中将外设地址直接按如下定义:    unsigned char xdata MAXl97_at_Ox8000;   

       采用_at_将变量MAXl97定义到外部扩展RAM指定地址Ox8OOO。因此,Keil C51优化编译理所当然认为重复读第二次是没有用的,直接用第一次读取的结果就可以了,因此编译器跳过了第二条读取语句。至此,问题就一目了然了。

       由以上分析很容易就能提出很好的解决办法。

       最简单最直接的办法   

       程序一点都不用修改,将Keil C5l的编译优化选择设置为0(不优化)就可以了。   

       选择project窗口的Target,然后打开“Options forTarget”设置对话框,选择“C5l”选项卡,将“Code Optimiztaion”中的“Level”选择为“0:Costant folding”。再次编译后,大家会发现编译结果为:   

   

       两次读取操作都被编译出来了。

       最好的方法   

与《Keil C51 总线外设操作问题的深入分析》相关列表
电话:400-900-3095
QQ:800152669
库存查询
Copyright(C) 2011-2021 Szcwdz.com 创唯电子 版权所有 备案号:粤ICP备11103613号
专注电子元件代理销售  QQ:800152669  电子邮件:sales@szcwdz.com  电话:400-900-3095