簡體   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