
- •Общая форма индивидуального задания История документа
- •1.Введение
- •1.1Список сокращений
- •1.2Список литературы
- •1.3Назначение документа
- •1.4Структура документа
- •2.Общие положения
- •3.Управление задачами
- •3.1Состояния задачи
- •3.2Активизация задачи
- •3.3Приоритеты задач и переключение задач
- •3.4Завершение задачи
- •4.Управление ресурсами
- •4.1Организация управления ресурсами
- •4.2Ограничения при управлении ресурсами
- •5.Обработка прерываний
- •6.Управление событиями
- •6.1События принадлежат задаче
- •6.2Системные события
- •7.Требования к api
4.Управление ресурсами
4.1Организация управления ресурсами
Управление ресурсами используются для организации совместного использования разделяемых ресурсов (общих областей памяти, аппаратных средств и т. п.) несколькими задачами. Конкретный протокол управления ресурсами, который должен быть реализован в проекте, определен в индивидуальном задании.
Для управления ресурсами используются системные сервисы для обозначения начала использования ресурса (GetResource, PIP_GetRes, P) и для обозначения его конца (ReleaseResource, PIP_ReleaseRes, V). Вызовы этих сервисов ограничивают критическую секцию в пользовательской задаче. Любое использование ресурса задачей допускается только внутри критической секции.
ОСРВ должна обеспечивать неограниченную вложенность критических секций. Другими словами, задача может захватить и удерживать произвольное количество ресурсов одновременно. На порядок освобождения захваченных ресурсов также не накладывается никаких ограничений. Это означает, что оба фрагмента программы, показанных в таблице 2, являются корректными.
Таблица 1
… GetResource(res1); … GetResource(res2); … ReleaseResource(res2); … ReleaseResource(res1); … |
… GetResource(res1); … GetResource(res2); … ReleaseResource(res1); … ReleaseResource(res2); … |
4.2Ограничения при управлении ресурсами
Хотя вложенный захват ресурсов является допустимым, запрещается вложенный захват задачей одного и того же ресурса.
Не допускается применение сервиса TerminateTask и WaitEvent внутри критической секции. Перед завершением задача обязана освободить все захваченные ресурсы.
Кроме того, запрещается использование критических секций в обработчиках прерываний.
5.Обработка прерываний
В этом разделе приводится информация, необходимая для реализации обработки прерываний в проекте RTOS. Следование рекомендациям этого раздела является обязательным, если в ваше индивидуальное задание включена обработка прерываний.
Наряду с задачами в пользовательских приложениях могут использоваться обработчики прерываний (interrupt service routine – ISR). Тем не менее, на их использование накладывается важное ограничение: целый ряд сервисов ОСРВ из обработчика вызывать запрещается. С другой стороны, в ISR можно использовать некоторые сервисы, которые запрещено вызывать из пользовательских задач. Более подробная информация приведена в таблице 1.
Таблица 2
Сервис ОСРВ |
Вызов из обработчика |
Вызов из задачи |
ActivateTask |
запрещён |
разрешён |
ISRActivateTask |
разрешён |
запрещён |
TerminateTask |
запрещён |
разрешён |
GetResource |
запрещён |
разрешён |
ReleaseResource |
запрещён |
разрешён |
PIP_GetRes |
запрещён |
разрешён |
PIP_ReleaseRes |
запрещён |
разрешён |
P |
запрещён |
разрешён |
V |
запрещён |
разрешён |
WaitEvent |
запрещён |
разрешён |
SetEvent |
разрешен |
разрешён |
ClearEvent |
запрещен |
разрешен |
GetEvent |
запрещён |
разрешён |
WaitSysEvent |
запрещён |
разрешён |
SetSysEvent |
разрешен |
разрешён |
GetSysEvent |
запрещён |
разрешён |
EnterISR |
разрешён |
запрещён |
LeaveISR |
разрешён |
запрещён |
StartOS* |
запрещён |
запрещён |
ShutdownOS |
разрешён |
разрешён |
*сервис StartOS может вызываться только когда система ещё не запущена, но не может вызываться в процессе её работы (задачами или обработчиками прерываний).
Вызов сервиса EnterISR должен предшествовать вызову любого другого сервиса ОС из ISR. Сервис LeaveISR всегда располагается в конце обработчика и вызывается только если ранее был вызван EnterISR
Вызов сервиса ActivateTask из обработчика запрещается. Вместо этого для активизации задач используется сервис ISRActivateTask. При этом происходит только планирование задачи (постановка задачи в очередь готовых). .
Использование вложенных прерываний не допускается.