【问题标题】:avr-gcc never returning main optimalizationavr-gcc 从不返回主要优化
【发布时间】:2014-04-15 21:43:21
【问题描述】:

我在某处读到,如果我永远不会从 main() 循环返回,我可以通过 avr-gcc 中的一些编译器开关节省 ~66 字节,但我再也找不到该站点了。

这是嵌入式的:

main() {
 while(1)
 {
   // do stuff
 }
}

【问题讨论】:

    标签: c gcc avr


    【解决方案1】:

    对于gcc,您可以使用特殊属性来指示您的函数不返回:

    int main() __attribute__ ((noreturn)) {
        for (;;) {
             // do stuff
        }
        __builtin_unreachable ();
    }
    

    您也可以选择添加__builtin_unreachable (); 以指示代码的某些部分永远无法访问。

    虽然在大多数情况下可以被优化标志正确识别,但没有这样的 while(1) 可以生成比 for(;;) 更多的代码。

    【讨论】:

    • 我一直在寻找非编译器特定的代码部分(如 comp. 标志),但它会做,谢谢!
    • 有趣的 while(1) 与 for(;;) 结果是一样的:stackoverflow.com/questions/885908/…
    【解决方案2】:

    【讨论】:

    • Sergey L 刚刚确定了您要链接的确切点。裸 URL 不是最好的答案;}
    【解决方案3】:

    找到了! 如果你确定你的主程序永远不会退出,你可以在编译时使用“-mendup-at=main”标志。这将节省 6 个字节的 ROM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多