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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Обмен данными между задачами RTOS
Rev0.0
сообщение Feb 9 2015, 17:49
Сообщение #16


Участник
*

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



Илья, верно, ваш вариант будет работать. НО! Есть вероятность зависания task2 в цикле если задача task1 постоянно принимает данные. Для корректной реализации вашего случая подойдет алгоритм Деккера, но я не хотел заниматься реализацией критических секций - хотелось бы использовать сервисы RTOS ибо они уже есть, поэтому и взял мьютексы.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 9 2015, 18:14
Сообщение #17


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Rev0.0 @ Feb 9 2015, 19:49) *
Илья, верно, ваш вариант будет работать. НО! Есть вероятность зависания task2 в цикле если задача task1 постоянно принимает данные. Для корректной реализации вашего случая подойдет алгоритм Деккера, но я не хотел заниматься реализацией критических секций - хотелось бы использовать сервисы RTOS ибо они уже есть, поэтому и взял мьютексы.


Алгоритм Деккера как раз здесь мертво зависнет.
Параллельное программирование и RTOS это разные вещи.
Этот алгоритм не рассчитан на задачи с разными приоритетами на одном ядре.
Go to the top of the page
 
+Quote Post
501-q
сообщение Feb 10 2015, 04:28
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Приветствую!
Цитата(Rev0.0 @ Feb 9 2015, 23:49) *
НО! Есть вероятность зависания task2 в цикле если задача task1 постоянно принимает данные.

В task1 есть os_delay(1). Но в целом, замечание верное.

Илья
Go to the top of the page
 
+Quote Post
Russky
сообщение Feb 23 2015, 23:27
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Есть несколько вариантов, но концепция верна:
Записывающая задача: залочили, записали, разлочили
Считывающая задача: залочили, считали, разлочили

Лично я бы, к мъютексу добавил бы еще семафор, правда я не знаю как он в этой операционке реализован.

Код
int a,b,c;
int buf[3];

task1
{
while(1)
{

  os_delay(1);
    mutex_lock();
    a = buf[0];
    b = buf[1];
    c = buf[2];
    mutex_unlock();
    release_semaphore();

}
}

task2
{
int a_task, b_task, c_task;    

while(1)
{

    bool res = wait_for_semaphore(timeout);
    if (res)
   {
    mutex_lock();        
    a_task = a;
    b_task = b;
    c_task = c;
    mutex_unlock();
   } else
{
    другие_действия();
}
  }
}
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd September 2025 - 10:02
Рейтинг@Mail.ru


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