Considere los siguientes códigos:
/*----------------------------------------------------------------------------
First Thread
*---------------------------------------------------------------------------*/
void Thread1 (void const *argument)
{
for (;;)
{
osMutexWait(mutex, osWaitForever);
Thread1_Functions;
osMutexRelease(mutex);
}
}
/*----------------------------------------------------------------------------
Second Thread
*---------------------------------------------------------------------------*/
void Thread2 (void const *argument)
{
for(;;)
{
osMutexWait(mutex, osWaitForever);
Thread2_Functions;
osMutexRelease(mutex);
}
}
Por lo que he notado en la programación de RTOS, RTOS asigna un tiempo específico para cada tarea y una vez finalizado, cambia a la otra tarea. Luego, en este tiempo específico, dentro del bucle infinito de la tarea, tal vez el bucle se repita varias veces hasta que finalice el tiempo específico de la tarea. Supongamos que la tarea se termina en menos de la mitad del tiempo, luego tiene un tiempo para ejecutar esta tarea una vez más: en la última línea después de liberar mutex, entonces logrará mutex antes que task2 por segunda vez, ¿Soy cierto? supongamos que la marca del temporizador se produce cuando MCU ejecuta Thread1_Functions por segunda vez, luego task2 no puede ejecutarse debido a mutex propiedad de task1, RTOS ejecuta la tarea 1 de nuevo y si la marca del temporizador se produce cada vez en Thread1_Functions, la tarea 2 no tiene oportunidad de ejecutarse, ¿verdad?