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.

CCS 编译问题 函数层数越多,运行越慢



大家好:

      我用CCS5.2,编译3359的程序,发现:我的程序中调用的函数层数越多,程序运行速度越慢,并且,同样的代码,只是调换代码的顺序,执行的时间也不一致。

     请问这个问题该如何处理?

  • 这个和编译器没关系,层数越多,压栈越多,速度会慢。

    你问的都属于代码的优化,建议你google下arm 代码优化,应该有些技巧。

  • 跟编译器有关系

    (1)我同样的一段用于测试消耗时间的代码,在CCS中如果在优化栏中,不选择优化的情形下,会慢很多。选择了优化后会快一些。

    (2)还是同样的代码,在CCS和IAR编译器,测试运行的时间不一致,IAR编译出来运行的时间要短。

    (3)我有套协议栈,在3359平台上(720M主屏),用CCS编译器,数据处理运行时间 竟然比在STM32F103平台上(72M的主屏,用keil编译器)还要长?

             这套协议栈,子函数层数比较多,如果减少函数的调用层数,STM32当然跑不过3359。

            在子函数层数较多的情况下,STM32运行时间比3359要短。

           请问,在这种情形下,要如何设置编译器才能将应用程序提速?

  • 可否将短的子函数设为inline,以减少函数调用的开销,同时请问STM32F103平台上(72M的主屏,用keil编译器)的编译结果是否是将函数inline了?

  • 在编译后的“xxxx.i”文件中有这样的语句

    #line 1 "..\\..\\..\\..\\..\\Objdicts\\DS401_3P\\Objdict.c"

    #line 1 "..\\..\\..\\..\\..\\Include\\copinc.h"

    #line 1 "..\\..\\..\\..\\..\\Include\\cop.h"

    #line 1 "..\\..\\..\\..\\..\\Include\\global.h"

    这种算不算是将函数inline?  

    在程序文件中没有见到“inline”之类的关键字!