微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SDCC和Keil 8051同码外观不同

如何解决SDCC和Keil 8051同码外观不同

我写了一个延迟函数

void delay(a){
    for (int i=a;i>0;i--) 
        for (int j=0; j<200;j++)
} 

但是当我通过sdcc和keil编译这段代码,并在8051芯片上运行时。 结果就是sdcc编译的delay函数比keil编译的函数运行慢很多。

谁能告诉我为什么...

解决方法

不同的编译器在机器语言中使用不同的实现。有几个问题,不限于,但我脑海中突然出现的:

  • 没有翻译成机器代码的标准定义:每个编译器都可以使用符合标准的任何解决方案。可能的解决方案不止一种。
  • 不同的编译器行为:每个编译器都有自己的一组选项来更改特定的生成变体。
  • 优化级别:例如,空循环可能会被完全优化掉。
  • 变量分配:编译器可以自由选择寄存器或 RAM 单元以用于其变量。
  • (在您的情况下)int 的位宽:可能与 SDCC 和 Keil 相同,但有时存在差异。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。