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.

TMS320C6657: sys/bios里Task_sleep(20) 这个休眠时间不准确!!!

Part Number: TMS320C6657


大家好 

在sys/bios里 只有一个任务:

Void Uart6657Send()
{
uint8_t i=0;

for(;;)
{


   for(i=0;i<10;i++)
   {

           //程序

   }

Task_sleep(20);

}
}

Task_sleep(20)表示这个任务休眠20ms 再执行 这样的话 两次发送的间隔应该是20ms 

但测量发现 两次发送的间隔小于20ms 这是什么问题啊???

  • tick的节拍如下:

    系统的时钟是1G 我的晶振是差分100M 扩频到1G:

  • 请问您是通过GPIO管脚来量的?这个不是很准。

    建议用TSCL, TSCH来测代码运行时间。

    void main() {
       unsigned long long t1, t2;
       ...
       TSCL = 0; // Initiate CPU timer by writing any val to TSCL
       ...
       t1 = _itoll( TSCH, TSCL ); // benchmark snapshot of free-running ctr
       my_code_to_benchmark();
       t2 = _itoll( TSCH, TSCL ); // benchmark snapshot of free-running ctr
     
       printf("# cycles == %ld\n", (t2-t1));
    }

  • 你好 你可能理解错了

    这不是通过GPIO测量的!

    Void Uart6657Send()
    {
    uint8_t i=0;

    for(;;)
    {


       for(i=0;i<10;i++)
       {

               //发数程序

       }

    Task_sleep(20);//ms

    }

    这个程序 表示Uart6657Send这个任务 把for循环里的发数程序执行一次后 休眠20ms 再重复执行发数程序!!!

    但测量 发现 这两次发数的间隔不是20ms

  • 有用TSCL, TSCH来测过吗?这个是CPU计时的,比较准。