реклама на сайте
подробности

 
 
> Обмен данными между задачами RTOS
Rev0.0
сообщение Jan 30 2015, 09:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 3-05-13
Пользователь №: 76 718



Привет! Вот мучаюсь и все тут, нужен свежий взгляд. Ниже привел псевдокод, который по моему мнению должен нормально работать.
Имеем некоторую 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);
}
}


Сообщение отредактировал Rev0.0 - Jan 30 2015, 09:51
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rev0.0   Обмен данными между задачами RTOS   Jan 30 2015, 09:49
- - Сергей Борщ   Цитата(Rev0.0 @ Jan 30 2015, 11:49) покри...   Jan 30 2015, 10:13
- - AlexandrY   Вот так надо делать: Кодint a,b,c; int buf[3...   Jan 30 2015, 10:58
|- - Сергей Борщ   Цитата(AlexandrY @ Jan 30 2015, 12:58) Во...   Jan 30 2015, 11:20
|- - AlexandrY   Цитата(Сергей Борщ @ Jan 30 2015, 13:20) ...   Jan 30 2015, 11:34
- - Rev0.0   Сергей Борщ Ах да, забыл сказать, что task2 нельзя...   Feb 2 2015, 05:58
|- - AlexandrY   Цитата(Rev0.0 @ Feb 2 2015, 07:58) Также ...   Feb 2 2015, 06:08
|- - Rev0.0   Цитата(AlexandrY @ Feb 2 2015, 11:08) Сам...   Feb 2 2015, 06:51
- - Сергей Борщ   Цитата(Rev0.0 @ Feb 2 2015, 07:58) Ах да,...   Feb 2 2015, 07:11
- - Rev0.0   Может быть я задачу как-то непонятно описал. Я же ...   Feb 2 2015, 10:16
|- - AlexandrY   Цитата(Rev0.0 @ Feb 2 2015, 12:16) Я же п...   Feb 2 2015, 11:10
- - Timmy   Цитата(Rev0.0 @ Jan 30 2015, 12:49) Приве...   Feb 2 2015, 20:57
- - 501-q   Приветствую. Код нормальный. Только, думается мн...   Feb 3 2015, 04:20
- - Rev0.0   501-q, зачем вы указали цикл в task2, мне же нужны...   Feb 3 2015, 10:38
|- - 501-q   Приветствую! Цитата(Rev0.0 @ Feb 3 2015,...   Feb 4 2015, 05:41
- - Rev0.0   Илья, верно, ваш вариант будет работать. НО! Е...   Feb 9 2015, 17:49
|- - AlexandrY   Цитата(Rev0.0 @ Feb 9 2015, 19:49) Илья, ...   Feb 9 2015, 18:14
|- - 501-q   Приветствую! Цитата(Rev0.0 @ Feb 9 2015, ...   Feb 10 2015, 04:28
- - Russky   Есть несколько вариантов, но концепция верна: Зап...   Feb 23 2015, 23:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01321 секунд с 7
ELECTRONIX ©2004-2016