Я хочу измерить накладные расходы на время переключения контекста.FreeRTOS: Как измерить время переключения контекста?
Вот моя идея, чтобы сделать это:
Есть две задачи:
- Таска
- простаивает
создать задачу, как показано ниже:
void calculate_ct(void *pvParameters)
{
int i = 0;
for(; i < 100; i++)
{
vTaskDelay(100/portTICK_RATE_MS); // delay 100 ms
}
// get_time();
vTaskDelete(NULL);
}
Когда задача ca lt vTaskDelay(), он превратится в состояние блока. Это означает, что вы делаете context switch
бездействующей задаче.
Могу ли я использовать get_time() в конце и минус время задержки (10 * 100 мс), чтобы получить общие накладные расходы на время переключения контекста и сделать разбиение на служебные данные на 10, чтобы получить среднее значение издержки времени переключения контекста ?
время получить(), как показано ниже:
unsigned int get_reload()
{
return *(uint32_t *) 0xE000E014;
}
unsigned int get_current()
{
return *(uint32_t *) 0xE000E018;
}
unsigned int get_time()
{
static unsigned int const *reload = (void *) 0xE000E014;
static unsigned int const *current = (void *) 0xE000E018;
static const unsigned int scale = 1000000/configTICK_RATE_HZ;
/* microsecond */
return xTaskGetTickCount() * scale + (*reload - *current) * (1.0)/(*reload/scale);
}
Я пробую так, тоже. И я хочу попробовать, будет ли одна задача и незанятая задача переключаться на контекст, чтобы я мог их измерять или нет. –