Имеем некоторую RTOS и 2 задачи для простоты.
Задача task1 имеет приоритет выше, чем task2. Задача task1 висит в ожидании данных от некоторой периферии.
Задача task2 должна принимать ПОСЛЕДНИЕ данные от task1, т.е если задача task1 получила скажем 10 буферов данных, то нам нужен в task2 только последний буфер, остальные можем безболезненно потерять (т.е. очередь не нужна).
Важное условие - код task2 должен выполняться как можно быстрее, поэтому я мьютекс поместил внутрь опроса флага, т.е. чтобы данные блокировались только когда они пришли, а не каждый цикл выполнения task2.
Прав ли я с таким кодом, покритикуйте, пожалуйста.
Код
int a,b,c;
int buf[3];
task1
{
while(1)
{
if (wait_peri_data(&buf))
{
mutex_lock();
a = buf[0];
b = buf[1];
c = buf[2];
mutex_unlock();
peri_data_available = 1;
}
os_delay(1);
}
}
task2
{
int a_task, b_task, c_task;
while(1)
{
if (peri_data_available)
{
mutex_lock();
a_task = a;
b_task = b;
c_task = c;
mutex_unlock();
peri_data_available = 0;
}
os_delay(1);
}
}
int buf[3];
task1
{
while(1)
{
if (wait_peri_data(&buf))
{
mutex_lock();
a = buf[0];
b = buf[1];
c = buf[2];
mutex_unlock();
peri_data_available = 1;
}
os_delay(1);
}
}
task2
{
int a_task, b_task, c_task;
while(1)
{
if (peri_data_available)
{
mutex_lock();
a_task = a;
b_task = b;
c_task = c;
mutex_unlock();
peri_data_available = 0;
}
os_delay(1);
}
}