MiklPolikov 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Коллеги, добрый день. Наболел вопрос: Есть задача А , которая управляет всей системой в целом. Есть задача Б, которая управляет соединением USB , в ней крутится цикл с приёмом данных из очереди. USB надо "включать" и "выключать" при отключении/подключении устройства к USB шине. Просто удалить задачу Б неправильно. Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится. Если это делать путём сознания задачи В, которая закрывает задачу Б сделав нужные действия с USB, то получается слишком громоздкий код. Как быть ? Возможно придуман какой-то стандартный путь ? Или я вообще чего-то не понимаю, и неправильно рассуждаю изначально ? МП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Наболел вопрос: Что-бы я что понял в описании "проблемы" :(. Как вообще "выключить" задачу - .....suspend() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiklPolikov 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба "выключить" задачу Речь о логике работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Речь о логике работы. Ничего не прояснило :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiklPolikov 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Ничего не прояснило :( Пространно размышлять я умею и сам, в данном случае спрашиваю совета у тех, кто решает задачу на практике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Пространно размышлять я умею и сам, в данном случае спрашиваю совета у тех, кто решает задачу на практике. Тогда надо срочно учиться задавать вопросы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится. А есть во FreeRTOS Сигналы (События), по которым задача и запускается? Должны быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба USB надо "включать" и "выключать" при отключении/подключении устройства к USB шине. Просто удалить задачу Б неправильно. Зачем вообще удалять задачу при отключении USB? Что мешает обрабатывать событие подключения/отключения внутри задачи Б? Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится. Что здесь смущает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба ... то получается слишком громоздкий код. Как быть ? Возможно придуман какой-то стандартный путь ? Или я вообще чего-то не понимаю, и неправильно рассуждаю изначально ? Задача Б либо управляет соединием, либо " в ней крутится цикл с приёмом данных из очереди" И то и то задача делать не может, поскольку события разрывов соединений приходят из ISR асинхронно и вешают задачу Б. Поэтому менеджер соединений это отдельная задача, которая убивает все очереди и все что вдруг становится ненужным. И да код громоздкий. Это RTOS ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 3 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба > Если это делать путём передачи в задачу Б команды через очередь или симафор, то эту очередь/симафор надо поллить в цикле, который там крутится. семафоры и очереди работают не так (по крайней мере в FreeRTOS и в остальном, что я видел) - при ожидании семафора или очереди задача отключается, ничего там не крутится. а включается когда семафор освободит другая задача/прерывание или в очередь что-то положат > А есть во FreeRTOS Сигналы (События), по которым задача и запускается? Должны быть. нету. зачем они нужны если есть семафоры? ну то есть FreeRTOS ориентирована на минимализацию ресурсов, поэтому много чего там нет, но это много чего не принципиально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба нету. зачем они нужны если есть семафоры? ну то есть FreeRTOS ориентирована на минимализацию ресурсов, поэтому много чего там нет, но это много чего не принципиально Кейловская CMSIS-RTOS RTX попроще будет, а Сигналы есть. Например, можно ждать сигналы от нескольких задач. Просто, красиво, удобно. for (;; ) { osSignalWait(0x0003, osWaitForever); // Ждать сигналы от ПЛИС и Main ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Кейловская CMSIS-RTOS RTX попроще будет, а Сигналы есть. Например, можно ждать сигналы от нескольких задач. Просто, красиво, удобно. for (;; ) { osSignalWait(0x0003, osWaitForever); // Ждать сигналы от ПЛИС и Main ... Есть и во FreeRTOS механизм передачи сигналов от нескольких задач. Но только это уже занос, уклон в сторону автоматов. Тогда от RTOS мало смысла остается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Есть и во FreeRTOS механизм передачи сигналов от нескольких задач. Но только это уже занос, уклон в сторону автоматов. Тогда от RTOS мало смысла остается. Не могу похвастаться, что я большой специалист в использовании RTOS. Как программу правильно на задачи делить, для меня остается загадкой. У меня нет задач, никак не связанных одна с другой. Поэтому приходится давать пинка от одной к другой, и притормаживать слишком ретивые. Сигналами запускаю, мьютексом блокирую. Еще задержками регулирую. И это всё. Я даже не уверен, что мне нужна RTOS. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Не могу похвастаться, что я большой специалист в использовании RTOS. Как программу правильно на задачи делить, для меня остается загадкой. У меня нет задач, никак не связанных одна с другой. Поэтому приходится давать пинка от одной к другой, и притормаживать слишком ретивые. Сигналами запускаю, мьютексом блокирую. Еще задержками регулирую. И это всё. Я даже не уверен, что мне нужна RTOS. :laughing: Завидую. Я до мьютексов даже не добрался. Не знаю как их применять и зачем они вообще нужны. И не могу найти в middleware которое идет с RTOS где бы применялись мьютексы. Странно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Я до мьютексов даже не добрался. Не знаю как их применять и зачем они вообще нужны. Поддержу. Я как-бы когда-то пользовал, но потом по мере роста разумения похерил за ненедобностью. Последним толчком, лет 12 назад, к пониманию ненадобности была именно FreeRTOS, где их де-факто нет, ибо реализованы были ввиде макросов на очередях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться