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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Взаимодействие между задачами, Как правильнее ?
MiklPolikov
сообщение Aug 24 2015, 23:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Коллеги, добрый день.
Наболел вопрос:

Есть задача А , которая управляет всей системой в целом.
Есть задача Б, которая управляет соединением USB , в ней крутится цикл с приёмом данных из очереди.
USB надо "включать" и "выключать" при отключении/подключении устройства к USB шине. Просто удалить задачу Б неправильно.
Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится.
Если это делать путём сознания задачи В, которая закрывает задачу Б сделав нужные действия с USB, то получается слишком громоздкий код.
Как быть ? Возможно придуман какой-то стандартный путь ? Или я вообще чего-то не понимаю, и неправильно рассуждаю изначально ?

МП


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2015, 04:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (MiklPolikov @ Aug 25 2015, 02:53) *
Наболел вопрос:

Что-бы я что понял в описании "проблемы" sad.gif. Как вообще "выключить" задачу - .....suspend()



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Aug 25 2015, 17:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(zltigo @ Aug 25 2015, 07:30) *
"выключить" задачу

Речь о логике работы.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2015, 17:24
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (MiklPolikov @ Aug 25 2015, 20:20) *
Речь о логике работы.

Ничего не прояснило sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Aug 25 2015, 17:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(zltigo @ Aug 25 2015, 20:24) *
Ничего не прояснило sad.gif

Пространно размышлять я умею и сам, в данном случае спрашиваю совета у тех, кто решает задачу на практике.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2015, 17:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (MiklPolikov @ Aug 25 2015, 20:37) *
Пространно размышлять я умею и сам, в данном случае спрашиваю совета у тех, кто решает задачу на практике.

Тогда надо срочно учиться задавать вопросы.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 25 2015, 18:17
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(MiklPolikov @ Aug 25 2015, 02:53) *
Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится.

А есть во FreeRTOS Сигналы (События), по которым задача и запускается? Должны быть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 25 2015, 18:45
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(MiklPolikov @ Aug 25 2015, 02:53) *
USB надо "включать" и "выключать" при отключении/подключении устройства к USB шине. Просто удалить задачу Б неправильно.

Зачем вообще удалять задачу при отключении USB?
Что мешает обрабатывать событие подключения/отключения внутри задачи Б?

Цитата(MiklPolikov @ Aug 25 2015, 02:53) *
Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится.

Что здесь смущает?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 25 2015, 19:16
Сообщение #9


Ally
******

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



Цитата(MiklPolikov @ Aug 25 2015, 02:53) *
... то получается слишком громоздкий код.
Как быть ? Возможно придуман какой-то стандартный путь ? Или я вообще чего-то не понимаю, и неправильно рассуждаю изначально ?


Задача Б либо управляет соединием, либо " в ней крутится цикл с приёмом данных из очереди"
И то и то задача делать не может, поскольку события разрывов соединений приходят из ISR асинхронно и вешают задачу Б.

Поэтому менеджер соединений это отдельная задача, которая убивает все очереди и все что вдруг становится ненужным. И да код громоздкий.
Это RTOS ...
Go to the top of the page
 
+Quote Post
yes
сообщение Aug 26 2015, 10:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



> Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится.

семафоры и очереди работают не так (по крайней мере в FreeRTOS и в остальном, что я видел) - при ожидании семафора или очереди задача отключается, ничего там не крутится. а включается когда семафор освободит другая задача/прерывание или в очередь что-то положат

> А есть во FreeRTOS Сигналы (События), по которым задача и запускается? Должны быть.

нету. зачем они нужны если есть семафоры? ну то есть FreeRTOS ориентирована на минимализацию ресурсов, поэтому много чего там нет, но это много чего не принципиально
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 26 2015, 10:28
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(yes @ Aug 26 2015, 13:12) *
нету. зачем они нужны если есть семафоры? ну то есть FreeRTOS ориентирована на минимализацию ресурсов, поэтому много чего там нет, но это много чего не принципиально

Кейловская CMSIS-RTOS RTX попроще будет, а Сигналы есть. Например, можно ждать сигналы от нескольких задач. Просто, красиво, удобно.
Код
  for (;; ) {
    osSignalWait(0x0003, osWaitForever);    // Ждать сигналы от ПЛИС и Main
    ...
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 26 2015, 11:03
Сообщение #12


Ally
******

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



Цитата(ViKo @ Aug 26 2015, 13:28) *
Кейловская CMSIS-RTOS RTX попроще будет, а Сигналы есть. Например, можно ждать сигналы от нескольких задач. Просто, красиво, удобно.
Код
  for (;; ) {
    osSignalWait(0x0003, osWaitForever);    // Ждать сигналы от ПЛИС и Main
    ...


Есть и во FreeRTOS механизм передачи сигналов от нескольких задач.
Но только это уже занос, уклон в сторону автоматов.
Тогда от RTOS мало смысла остается.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 26 2015, 11:12
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AlexandrY @ Aug 26 2015, 14:03) *
Есть и во FreeRTOS механизм передачи сигналов от нескольких задач.
Но только это уже занос, уклон в сторону автоматов.
Тогда от RTOS мало смысла остается.

Не могу похвастаться, что я большой специалист в использовании RTOS. Как программу правильно на задачи делить, для меня остается загадкой. У меня нет задач, никак не связанных одна с другой. Поэтому приходится давать пинка от одной к другой, и притормаживать слишком ретивые. Сигналами запускаю, мьютексом блокирую. Еще задержками регулирую. И это всё. Я даже не уверен, что мне нужна RTOS. laughing.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 26 2015, 12:08
Сообщение #14


Ally
******

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



Цитата(ViKo @ Aug 26 2015, 14:12) *
Не могу похвастаться, что я большой специалист в использовании RTOS. Как программу правильно на задачи делить, для меня остается загадкой. У меня нет задач, никак не связанных одна с другой. Поэтому приходится давать пинка от одной к другой, и притормаживать слишком ретивые. Сигналами запускаю, мьютексом блокирую. Еще задержками регулирую. И это всё. Я даже не уверен, что мне нужна RTOS. laughing.gif


Завидую. Я до мьютексов даже не добрался. Не знаю как их применять и зачем они вообще нужны.
И не могу найти в middleware которое идет с RTOS где бы применялись мьютексы.
Странно...

Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 26 2015, 12:16
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (AlexandrY @ Aug 26 2015, 15:08) *
Я до мьютексов даже не добрался. Не знаю как их применять и зачем они вообще нужны.

Поддержу. Я как-бы когда-то пользовал, но потом по мере роста разумения похерил за ненедобностью. Последним толчком, лет 12 назад, к пониманию ненадобности была именно FreeRTOS, где их де-факто нет, ибо реализованы были ввиде макросов на очередях.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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