3

我开始熟悉 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);
  }
}

还是我完全错了?

4

3 回答 3

3

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

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

或者您可以为您的架构阅读 OS_TASK_SW() 的 ASM 并计算所需的周期数;)

于 2013-03-05T21:27:58.477 回答
2

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

于 2013-02-04T05:11:39.977 回答
2

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

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

所以校准很重要。

让我们知道你的进展。

于 2012-10-06T20:57:49.703 回答