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.

C6748 TSCL/TSHL寄存器计数问题

您好,

我用了C6748的板子,用TSCL/TSHL寄存器测得程序运行时间为2.4s,但是CCS5.5中跑完的实际时间远大于这个数(大概几分钟),请问这是什么原因呢?

  • "但是CCS5.5中跑完的实际时间远大于这个数(大概几分钟)" 这个几分钟是怎么测出来的?通过观察GPIO管脚?

  • 您好,我用的emulator,设置断点,用秒表测出来是几分钟。相同的程序段,用TSCL/TSCH得到指令周期数,转换为时间,是2.4s左右

  • Shine Zhang,您好,这是我的cmd文件和map文件

    cmd文件:

    -ml0 
    -stack 0x30000
    -heap 0x030000
    -m ais_write.map

    /* =========================================================================*
    * Specify the System Memory Map *
    * =========================================================================*/
    MEMORY
    {
         L2:                    o = 0x00800000 l = 0x00040000  /* 256K RAM */
         share:               o = 0x80000000 l = 0x00020000  /* 128K RAM */
         L1P:                 o = 0x00E00000 l = 0x00008000  /* RAM */
         L1D:                 o = 0x00F00000 l = 0x00008000  /* RAM */
         dsp_ddrii:         o = 0xc2000000 l = 0x1000000
    }

    /* =========================================================================*
    * Specify the Sections Allocation into Memory *
    * =========================================================================*/
    SECTIONS
    {
         .cinit                    >        dsp_ddrii             /* Initialization Tables */
         .pinit                   >         dsp_ddrii              /* C++ Constructor Tables */
        .const                  >         L2                        /* Constant Data */
        .switch                 >         dsp_ddrii             /* Jump Tables */
        .text:_c_int00      >          0xc2000000
        .text                     >         dsp_ddrii             /* Executable Code */


       .bss                    >              L2                     /* Global & Static Variables */
       .far                     >              L2                     /* Far Global & Static Variables */
       .stack                >               L2                    /* Software System Stack */
       .sysmem            >             dsp_ddrii          /* Dynamic Memory Allocation Area */
       .cio                    >              dsp_ddrii          /* C I/O Buffer */
       .vecs                 >              dsp_ddrii          /* Interrupt Vectors */


    }

    .map文件

    MEMORY CONFIGURATION

    name                    origin     length       used        unused           attr fill
    ---------------------- --------     ---------      --------        --------       ---- --------
    L2                  00800000  00040000  00030f7e    0000f082   RWIX
    L1P               0e00000    00008000   00000000   00008000   RWIX
    L1D               00f00000   00008000  00000000   00008000   RWIX
    share             80000000  00020000  00000000   00020000   RWIX
    dsp_ddrii       c2000000   01000000 00042e7c    00fbd184    RWIX

    我有以下几点疑问:

    1、寄存器和秒表,两种方法得到的时间哪一种才是程序实际运行的时间呢?

    2、寄存器TSCL/TSCH的原理是什么?它输出的是程序运行的所有指令周期数吗?会不会有些延迟不计入它的输出?

    3、从map文件中可以看出,L2 RAM 利用率比较高,会不会由此造成某种延迟,导致寄存器不计数?如果会,如何修改cmd能更好提高程序运行速度呢?

    期待您的回复! 

  • 1. 以TSCL, TSCH为准。

    2. TSCL/TSCH是cpu cycles计数器,这两个寄存器的定义在下面的文档中。
    http://www.ti.com/lit/ug/sprufe8b/sprufe8b.pdf

    3. 这跟memory利用率无关,TSCL/TSCH会一直计数,不会因为有延迟不计数。

  • 感谢您的耐心解答。

    根据您的回复,以寄存器的时间为准,我可不可以理解为秒表不准是因为emulator?如果我把程序烧写到flash,它的运行速度就是寄存器测得的速度是吗?

  • 问题解决了,是由于我读写txt文件太耗时导致的。寄存器是准的