This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2806:针对优化级别4的编译器验证

Guru**** 2391705 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1130580/tms320f2806-compiler-validation-for-optimization-level-4

器件型号:TMS320F2806

我们正在尝试对 C2000编译器进行验证、并使用优化级别4。

您能给我们提供一个将在4级进行优化的示例代码片段吗?

我们需要一种方法来证明该设置是有效的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请考虑此示例。

    C:\examples>type f1.c
    int gets_inlined();
    
    int main()
    {
        return gets_inlined();
    }
    
    C:\examples>type f2.c
    int gets_inlined()
    {
        return 0x1234;
    }
    
    C:\examples>cl2000 f1.c f2.c -z -o no_opt.out
    [f1.c]
    [f2.c]
    <Linking>
    
    C:\examples>dis2000 no_opt.out > no_opt_dis.txt

    前两条命令显示源文件。  第三个命令将这些文件构建到程序中。  (由于它使用链接器默认存储器范围、因此几乎肯定不会在您的系统上运行。)  第四条命令将程序反汇编到文件 no_opt_dis.txt 中。  检查该文件并搜索函数 main ...

    00000118        _main:
    00000118   7640   LCR          0x00011b
    00000119   011b
    0000011a   0006   LRETR        
    0000011b        _gets_inlined:
    0000011b   28a9   MOV          AL, #0x1234
    0000011c   1234
    0000011d   0006   LRETR        
    

    LCR 指令执行调用。  操作数是被调用函数的地址。  在这种情况下、它会调用地址0x11b 处的函数 ges_inlined。  该函数 ges_inlined 返回累加器低半部分中的值0x1234。   

    再次构建、但优化级别为4。  然后反汇编到 opt4_dis.txt 文件中。   

    C:\examples>cl2000 --opt_level=4 f1.c f2.c -z -o opt4.out
    [f1.c]
    [f2.c]
    <Linking>
    
    C:\examples>dis2000 opt4.out > opt4_dis.txt

    检查 opt4_dis.txt 并搜索函数 main...

    0000010e        _main:
    0000010e   28a9   MOV          AL, #0x1234
    0000010f   1234
    00000110   0006   LRETR 

    现在 main 不调用任何函数、它返回值0x1234。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 George!  我们必须添加 RTS 库的路径才能使其编译、但它不起作用!

    您是否还有其他优化级别的示例?  我们的验证组也希望测试其他优化级别。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="531059" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forume/1130580/TMS320F2806-compiler-validation-for-optimizing-leve-4/4196906#4196906"]您是否还有其他优化级别的示例?

    不幸的是、不

    但是、既然您已经大致了解了如何查看优化的发生、那么您可能可以创建自己的。  有关执行哪些其他优化的一些指导、 请在 C28x 编译器手册中搜索 标题 为"What kind of Optimization is performed (正在执行何种优化)"的子章节。  要查看在哪个级别执行了哪些优化、请在同一手册中搜索标题为 调用优化的子章节。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    明白了、谢谢 George!