tzuchien_chiu wrote on Tuesday, August 29, 2006:
I have a non-preemptive port of FreeRTOS and there there are totally three tasks:
tskIDLE_PRIORITY = 0
Idle, tskIDLE_PRIORITY
Task 1, tskIDLE_PRIORITY + 1
Task 2, tskIDLE_PRIORITY + 2
Task 1 and 2 is created using the same function:
portTASK_FUNCTION(task_proc, params)
{
unsigned id = *(unsigned*) params;
while (1) {
printf("*%d* ", id);
taskYIELD();
}
}
But Task 1 *never* gets a chance to run. After reading vTaskSwitchContext(), I found that Task 1 is starved because Task 2 is *always* in the ready list, and uxTopReadyPriority is always 2.
Is this behavior expected?
–
Tzu-Chien Chiu - SMedia Technology Corp.
URL: http://www.csie.nctu.edu.tw/~jwchiu/