[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: бинарный семафор - вот все что нужно...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Михаил Евстафьев 20 августа 2001 г. 17:13
В ответ на: Ответ: отправлено Romario 20 августа 2001 г. 13:50

Задача ждет а прерывание постит. И ничего не может быть красивее. Именно для этого бинарные семафоры и предназначены. Так что не надо и искать.

Если система может находиться в двух состояниях, когда надо запускать задачу или нет, то устроить обход OSSemPost в обработчике прерывания простой проверкой условия. Подмена обработчика дает тот же эффект. Разве что можно немного выиграть по скорости.

Если нужно передавать данные от ISR к Task то для этого есть MailBox. Если события могут происходить чаще, чем их успевает обработать Task, то подойдет очередь (Queue) и динамическое выделение памяти под хранение информации о каждом событии (в UCOS-II есть динамическое выделение без фрагментации, но можно и стандартный malloc пользовать).

Флаги предназначены для пробуждения задачи по совокупности условий. Т.е. возможно пробуждение когда произошло одно из множества событий, либо все одновременно. Для описанной задачи это перебор.

IMHO

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru