Ограничения при управлении ресурсами

Хотя вложенный захват ресурсов является допустимым, запрещается вложенный захват задачей одного и того же ресурса.

Не допускается применение сервиса TerminateTask и WaitEvent внутри критической секции. Перед завершением задача обязана освободить все захваченные ресурсы.

Кроме того, запрещается использование критических секций в обработчиках прерываний.

Обработка прерываний

В этом разделе приводится информация, необходимая для реализации обработки прерываний в проекте 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. При этом происходит только планирование задачи (постановка задачи в очередь готовых)..

Использование вложенных прерываний не допускается.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: