Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Event Flag Groups в Nucleus SE: Вводное руководство по конфигурации и использованию API

Event Flag Groups в Nucleus SE: Вводное руководство по конфигурации и использованию API
View the RTOS Revealed series

Event flag groups предоставляют легковесный, гибкий механизм для межзадачного взаимодействия в Nucleus SE, аналогичный сигналам но с более богатой функциональностью.

Использование Event Flags

В Nucleus SE event flags конфигурируются на этапе сборки. Максимум 16 групп может быть определено. Если ни одна не сконфигурирована, RTOS опускает все связанные структуры данных и API код.

Конфигурация Event Flag Groups

Количество Event Flag Groups

Конфигурация управляется #define директивами в nuse_config.h. Ключевой макрос NUSE_EVENT_GROUP_NUMBER задает, сколько групп приложение будет использовать (по умолчанию 0). Значения выше 16 или отрицательные триггерят compile-time #error, генерируемый nuse_config_check.h.

Установка ненулевого значения активирует event-flag подсистему: структуры данных аллоцируются и API enables рассматриваются.

API Enables

У каждого service call есть enable макрос в nuse_config.h:

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

По умолчанию все FALSE, отключая соответствующие функции. Для использования API установите желаемые макросы в TRUE. Несоответствие (включение API пока NUSE_EVENT_GROUP_NUMBER это 0) вызывает compile-time ошибку, кроме NUSE_Event_Group_Count(), который всегда доступен.

Пример фрагмента из дефолтного nuse_config.h:

#define NUSE_EVENT_GROUP_NUMBER 0 /* Number of event groups – 0‑16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Service call enabler */ 

Если ваш код ссылается на API, который не был включен, линкер выдаст ошибку, потому что реализация опущена.

Event Flag Service Calls

Nucleus SE предлагает семь service calls, связанных с event flags, хотя только четыре реализованы:

Нет выделенной reset функции; группу можно сбросить в нули, используя NUSE_Event_Group_Set() с OR операцией на нулевой флаговой маске.

Операции Set и Retrieve

Поскольку event flags — биты, их лучше выражать как бинарные значения. Nucleus SE поставляет nuse_binary.h, который определяет макросы вроде b01010101 для каждого 8-битного паттерна.

Установка Event Flags

И RTOS, и SE экспонируют похожие APIs. RTOS прототип:

STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation); 

Параметры:

Возвращаемые значения:

SE эквивалент:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation); 

Параметры и коды возврата зеркалят RTOS версию, с NUSE_SUCCESS, NUSE_INVALID_GROUP и NUSE_INVALID_OPERATION.

Implementation Highlights

Основная рутина проверяет operation и применяет маску:

NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; } 

Когда блокировка включена (NUSE_BLOCKING_ENABLE), функция итерирует по всем задачам, будит любые, приостановленные на этой группе, и обновляет blocking counter. Послеward может произойти reschedule если активен priority scheduler.

Приостановленные задачи возобновляются, когда состояние флагов меняется, позволяя им оценить их wait условия.

Продолжить на страницу два >>


Встроенный

  1. Камерные замки (Cam Locks): как они скрыто запирают шкафы
  2. Что такое кольцевые винты (Eye Screws)? Профессиональное руководство по дизайну и применению
  3. Громметы: виды, применение и защита вашего оборудования
  4. Нержавеющая сталь: состав, производство и глобальное влияние
  5. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  6. Mailboxes в Nucleus SE: Практическое руководство по конфигурации и использованию
  7. Семафоры в Nucleus RTOS: Утилитарные сервисы и структуры данных
  8. Семафоры в Nucleus SE: Обзор, конфигурация и основы API
  9. Мастерство Event Flag Groups: Утилитарные сервисы и структуры данных в Nucleus RTOS/SE
  10. Queues в Nucleus SE: Введение и основные Service Calls