exponenta event banner

Оптимизация многоскоростного многозадачного выполнения для сред выполнения RTOS

Использование rtmStepTask макро, среды выполнения, в которых используются механизмы управления задачами операционной системы реального времени (RTOS) - например, VxWorks ® - могут повысить производительность генерируемого кода, устраняя избыточные вызовы планирования во время выполнения задач в многозадачной многозадачной модели.

Использовать rtmStepTask

rtmStepTask макрос определен в model.h и его синтаксис следующий:

boolean task_ready = rtmStepTask(rtm, idx);

Аргументы следующие:

  • rtm: указатель на структуру модели в реальном времени (rtM)

  • idx: идентификатор задачи (tid) задачи, счетчик планирования которой должен быть протестирован

rtmStepTask прибыль TRUE если счетчик планирования задачи равен нулю, указывая, что задача должна быть запланирована для выполнения на текущем временном шаге. В противном случае возвращается FALSE.

Если системный целевой файл поддерживает параметр конфигурации модели Генерация примера основной программы, можно генерировать вызовы для rtmStepTask с помощью функции TLC RTMTaskRunsThisBaseStep.

Код расписания для модели в реальном времени без RTOS

Чтобы понять оптимизацию, доступную для цели RTOS, рассмотрите, как цель ERT планирует задачи для целей barebord (где RTOS отсутствует). Цель ERT поддерживает счетчики планирования и флаги событий для каждой подскоростной задачи. Счетчики планирования реализованы в структуре данных модели реального времени (rtM) в виде массивов, индексированных по идентификатору задачи (tid).

Счетчики планирования обновляются с помощью задачи базовой скорости. Счетчики представляют собой делители тактовой частоты, которые подсчитывают период выборки, связанный с каждой задачей подскоростной передачи. Когда данный счетчик субскоростей достигает значения, указывающего, что он имеет попадание, период выборки для этой скорости истек, и счетчик сбрасывается в ноль. В этом случае необходимо запланировать выполнение подскоростной задачи.

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

На каждом шаге времени счетчики и флаги событий обновляются, и выполняется задача базовой скорости. Затем флаги планирования сдаются на хранение. tid и выполняются задачи, для которых установлен флаг события. Поэтому задачи выполняются в порядке приоритета.

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

Планирование кода для многоскоростной многозадачности на RTOS

Следующий код планирования задачи, от ertmainlib.tlc, предназначен для многоскоростной многозадачной работы на примере цели RTOS (VxWorks). В примере используется функция TLC RTMTaskRunsThisBaseStep для генерации вызовов rtmStepTask макро. Цикл итераций над каждой подскоростной задачей, и rtmStepTask вызывается для каждой задачи. Если rtmStepTask прибыль TRUE, RTOS semGive вызывается функция, и RTOS планирует выполнение задачи.

%assign ifarg = RTMTaskRunsThisBaseStep("i")
for (i = 1; i < %<FcnNumST>; i++) {
   if (%<ifarg>) {
     semGive(taskSemList[i]);
     if (semTake(taskSemList[i],NO_WAIT) != ERROR) {
       logMsg("Rate for SubRate task %d is too fast.\n",i,0,0,0,0,0);
       semGive(taskSemList[i]);
     }
   }
}

Подавление избыточных вызовов планирования

Избыточные вызовы планирования по-прежнему генерируются по умолчанию для обратной совместимости. Чтобы изменить этот параметр и подавить его, добавьте следующее определение переменной TLC в системный целевой файл перед %include "codegenentry.tlc" заявление:

%assign SuppressSetEventsForThisBaseRateFcn = 1

Связанные темы