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.

[参考译文] AM2634:指令和时钟计算

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1388966/am2634-instructions-and-clock-calculation

器件型号:AM2634

工具与软件:

尊敬的团队:

我想计算程序执行时间来定义项目的状态机周期。

我想知道如何  在 CCS 中计算程序执行时间

SDK - mcu_plus_sdk_am263x_09_02_00_56

 

下面举例说明:

空洞 initializeStringArray (){

 

字符 stringArray[10][100];

字符 buff[100]={ 0 };

 

//初始化字符串数组

的说明 ( 内部 i = 0;i < 10;++I){

的说明 ( 内部 j = 0;j < 100;j++){

stringArray[i][j]= j;

}

stringArray[i][99]='\0';

}

我们必须计算执行上述代码所花费的时间。

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

    以下是如何获取执行周期数: AM263x MCU+ SDK:周期计数器(TI.com)

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

    感谢您的支持和回答

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

    尊敬的 Kier:

    我有2个观察结果

    1. 无优化:-  

    CycleCounterP_RESET();

    cycleCountBefore = CycleCounterP_getCount32 ();
    initializeStringArray();                           //用户功能
    cycleCountAfter = CycleCounterP_getCount32 ();

    void initializeStringArray()

    字符串阵列[10][100];
    char buff[100]={ 0 };

    //初始化字符串数组
    对于(int i = 0;i < 10;++i){
    对于(int j = 0;j < 100;j++){
    stringArray[i][j]= j;
    }
    stringArray[i][99]='\0';
    }
    }

    如果不优化、它会显示与之无关的23154个时钟、如何利用如此多的时钟  

    2. 使用 Optimizatoin:-

    通过优化、它仅显示9个时钟、这也是无关紧要的

    请告诉我如何测试任务执行时间  

    /--------------- 未优化的代码汇编------------------------------------------------------- /

     47 void initializeStringArray(){
    initializeStringArray():
    70051ed0:b580按{r7、r14}
    70051ed2:F5AD6D8B sub.w R13、R13、#0x458
    70051ed6:A803增加了 r0、R13、#0xc
    70051ed8:2164 MOVs R1、#0x64
    50字符 buff[100]={ 0 };
    70051eda:F001EB36 blx _aeabi_memclr
    70051ede:2000 MOV r0、#0
    54表示(int i = 0;i < 10;++i){
    70051ee0:9002 str r0、[R13、#8]
    70051ee2:E7FF b #0x70051ee4
    70051ee4:9802 LDR r0、[R13、#8]
    70051ee6:2809 CMP r0、#9
    70051ee8:DC20 bgt #0x70051f2c
    70051eea:E7FF b #0x70051eec
    70051eec:2000 MOVs r0、#0
    55 for (int j = 0;j < 100;j++){
    70051eee:9001 str r0、[R13、#4]
    70051ef0:E7FF b #0x70051ef2
    70051ef2:9801 LDR r0、[R13、#4]
    70051ef4:2863 CMP r0、#0x63
    70051ef6:DC0C bgt #0x70051f12
    70051ef8:E7FF b #0x70051efa
    56 stringArray[i][j]= j;
    70051efa:9801 LDR r0、[R13、#4]
    70051efc:9902 LDR R1、[R13、#8]
    70051efe:AB1C 添加 R3、R13、#0x70
    70051f00:2264 MOVS R2、#0x64
    70051f02:FB013102 MLA R1、R1、R2、R3
    70051f06:5408 strb r0、[r1、r0]
    57 }
    70051f08:E7FF b #0x70051f0a
    55 for (int j = 0;j < 100;j++){
    70051f0a:9801 LDR r0、[R13、#4]
    70051f0c:3001添加了 r0、#1
    70051f0e:9001 str r0、[R13、#4]
    70051f10:E7EF b #0x70051ef2
    58 stringArray[i][99]='\0';
    70051f12:9802 LDR r0、[R13、#8]
    70051f14:AA1C 添加 R2、R13、#0x70
    70051f16:2164 MOVs R1、#0x64
    70051f18:FB002101 MLA R1、r0、R1、R2
    70051f1c:2000 MOV r0、#0
    70051f1e:F8810063 strb.w r0、[R1、#0x63]
    59 }
    70051f22:E7FF b #0x70051f24
    54表示(int i = 0;i < 10;++i){
    70051f24:9802 LDR r0、[R13、#8]
    70051f26:3001添加了 r0、#1
    70051f28:9002 str r0、[R13、#8]
    70051f2a:E7DB b #0x70051ee4
    60 }
    70051f2c:F50D6D8B add.w R13、R13、#0x458
    70051f30:BD80 Pop{r7、PC}
    145}

    /------------------ /  

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

    尊敬的 Vikas:  

    正如您在代码中尝试过的那样、使用周期计数器是正确的。

    uint32_t startend、most开销
    
    /*计算开销*/ 
    CycleCounterP_RESET()
    
    start = CycleCounterP_getCount32 (); 
    end = CycleCounterP_getCount32 (); 
    开销=结束-开始
    
    DebugP_log ("总开销:%d 个周期\r\n"开销); 


    由于这是一个32位计数器、您可以处理如下类型的溢出:

    uint32_t cycleCountBeforecycleCountAfter、cpuCycles /*启用并重置 CPU 周期输出器*/ CycleCounterP_RESET() cycleCountBefore = CycleCounterP_getCount32 (); /*调用函数来分析*/ cycleCountAfter = CycleCounterP_getCount32 (); /*检查溢出并绕回。 * *此逻辑仅适用于一次溢出。 *如果在系统配置期间发生多次溢出, *那么 CPU 周期数将会出错。 */ if (cycleCountAfter>cycleCountBefore) cpuCycles = cycleCountAfter - cycleCountBefore; } 设计 cpuCycles =(0xFFFFU - cycleCountBefore)+ cycleCountAfter; }

    如果需要测量更长的持续时间、建议使用  时钟模块中的 ClockP_getTimeUsec () API。

    您还可以使用 CCS 内置分析选项;请参阅以下链接以了解更多信息:

    此致、
    Akshit