Available Languages?:

Это — старая версия документа!


OSA : События и приоритетность

Состояния задач

Для синхронизации работы задач между собой в системе применяются события. Например, есть две активные (созданные) задачи: одна измеряет температуру, а другая выводит данные на экран. Вторая задача не может выводить на экран значение температуры, если температура еще не измерена. Поэтому вторая задача ожидает событие от первой, что измерение завершено, т.е. находится в режиме ожидания. После того, как температура измерена, т.е. происходит событие, которого ожидала вторая задача, вторая задача переходит в состояние готовности. После этого она может получить управление, т.е. перейти в работу. Кроме того, есть возможность присотановить здачу, а потом запустить вновь с того же места.

Таким образом, все активные (т.е. созданные сервисом OS_Task_Create) задачи, работающие в OSA, могут находиться в одном из пяти состояний:

не создана задачи нет в списке активных задач (она либо не создана, либо была удалена)
в ожидании задача ждет какого-то события
в готовности задача дождалась своего события, но еще не начала выполняться.
в работе задача непосредственно выполняется
приостановлена задача приостановлена из-вне. Она активна, но не получает управления.

События и приоритетность

Для того чтобы задача получила управление, нужно, чтобы:

  • во-первых, произошло то событие, которого она ждет (т.е. стала готовой к выполнению);
  • во-вторых, чтобы она стала наиболее приоритетной из готовых.

Все задачи имеют приоритет от 0 (самый высокий приоритет) до 7 (самый низкий приоритет). Если к выполнению готовы сразу несколько задач, то первой выполнится та, приоритет которой выше. Если есть несколько готовых задач с одинаковым приоритетом, то они выполнятся последовательно.

События в OSA:

  1. семафор (двоичный или счетный);
  2. сообщение (указатель на тело сообщения или короткое однобайтовое сообщение);
  3. любое выражение перечислимого типа.

О первых четырех типах событий речь пойдет в соответствующих разделах этой документации. Пятый тип - дополнительный - это некое расширение системы, которое позволяет ждать какого-нибудь несистемного события

Например:

    OS_Cond_Wait(TMR1IF);            // Ждем установки флага TMR1IF
    или
    OS_Cond_Wait(ReadADC(0) > 128);  // Ждем, когда напряжение на входе АЦП будет > Vdd/2

Для ожидания событий пятого типа есть два системных сервиса OS_Wait и OS_Wait_TO, которые описаны в разделе системные сервисы.

Состязания приоритетов

Бывает так, что одного и того же события одновременно ожидают две или более задач. Например, они ждут освобождения какого-нибудь ресурса (USART или доступ к внешней EEPROM). Как поведет себя система в этом случае? После того, как событие произойдет, все задачи, ожидающие это событие, перейдут в состояние готовности. Управление же получит задача с наиболее высоким приоритетом. Если после того, как эта задача отработает, событие сбрасывается (например, все задачи ожидали включения семафора, а та задача, которая получила управление, его сбросила), то все остальные задачи опять переходят в состояние ожидания.

 
osa/ref/description/events_and_priority.1249734285.txt.gz · Последние изменения: 08.08.2009 16:24 От osa_chief
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki