繁体   English   中英

测量上下文切换的时间

[英]Measuring the time for a context switch

我熟悉MicroC / OS-II内核和多任务处理。 我编写了以下两个使用信号量的任务:

#define TASK1_PRIORITY      6  // highest priority
#define TASK2_PRIORITY      7

void task1(void* pdata)
{
  while (1)
  { 
    INT8U err;
    OSSemPend(aSemaphore_task1, 0, &err);    
    int i;

    if (sharedAddress >= 0)
    {
        printText(text1);
        printDigit(++sharedAddress);
    }
    else
    {
        printText(text2);
        printDigit(sharedAddress);                      
    }  
    OSTimeDlyHMSM(0, 0, 0, 11);  
    OSSemPost(aSemaphore_task2);  
  }
}

void task2(void* pdata)
{
  while (1)
  { 
    INT8U err;
    OSSemPend(aSemaphore_task2, 0, &err);    
    sharedAddress *= -1; 
    OSTimeDlyHMSM(0, 0, 0, 4);                                 
    OSSemPost(aSemaphore_task1);
  }
}

现在我想测量上下文切换时间,即处理器在这两个任务之间切换所需的时间。

这是通过使用函数timer()如:

void task1(void* pdata)
{
  while (1)
  { 
    INT8U err;
    OSSemPend(aSemaphore_task1, 0, &err);    
    int i;

    if (sharedAddress >= 0)
    {
        printText(text1);
        printDigit(++sharedAddress);
    }
    else
    {
        printText(text2);
        printDigit(sharedAddress);                      
    }    
     OSTimeDlyHMSM(0, 0, 0, 11);
     OSSemPost(aSemaphore_task2);
     timer(start);
  }
}

void task2(void* pdata)
{
  while (1)
  { 
    timer(stop):
    INT8U err;
    OSSemPend(aSemaphore_task2, 0, &err);    
    sharedAddress *= -1;  
    OSTimeDlyHMSM(0, 0, 0, 4);                                
    OSSemPost(aSemaphore_task1);
  }
}

或者我完全错了?

我担心您将无法使用任何μC/ OS原语测量上下文切换时间。 上下文切换时间太小,无法通过μC/ OS软定时器测量,这很可能是基于系统节拍的倍数(因此几毫秒) - 即使它取决于CPU的特定μC/ OS端口建筑。

您必须直接访问处理器的硬件计时器 - 您可能希望将其频率配置为它可以处理的最大频率。 将其设置为自由运行定时器(您不需要任何中断)并使用其计数值作为测量切换时间的时基。

或者,您可以为您的体系结构读取OS_TASK_SW()的ASM并计算所需的周期数;)

对于性能测量,标准方法是首先校准您的工具。 在这种情况下,它是您的计时器,或建议的时钟(如果您使用C ++)。

要进行校准,您需要多次调用它(例如1000次)并查看每次平均需要多长时间。 现在你知道测量时间的成本了。 在这种情况下,它可能与您尝试测量的功能(最多)处于相似的范围内 - 上下文切换。

因此校准很重要。

让我们知道你是怎么走的。

您可以使用OSTimeGet API来获取执行时间。 uCOS不使用timer()函数来获取执行时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM