Мастерство Event Flag Groups: Утилитарные сервисы и структуры данных в Nucleus RTOS/SE
View the RTOS Revealed series
Эта статья продолжает рассмотрение event flag groups.
Event Flag Group Utility Services
Nucleus RTOS предоставляет три выделенных API вызова, оптимизирующих взаимодействие с event flag groups: получение детальной информации о группе, получение общего числа групп и доступ к указателям на все группы в приложении. Первые две функции полностью поддерживаются в Nucleus SE.
Информация о Event Flag Group
Этот service call доставляет ключевые данные о указанной event flag group. В Nucleus SE интерфейс усечен — object naming и suspend ordering опущены, и task suspend информация возвращается только когда фича включена.
Nucleus RTOS API Call для информации Event Group
Прототип service call:
STATUS NU_Event_Group_Information(NU_EVENT_GROUP *group,
CHAR *name, UNSIGNED *event_flags, UNSIGNED *tasks_waiting,
NU_TASK **first_task);
Параметры:
group — указатель на user-supplied event flag group control block
name — 8-символьный буфер для имени группы (включая null terminator)
event_flags — указатель на переменную, получившую текущее значение флагов
tasks_waiting — указатель на переменную, получившую число задач, приостановленных на этой группе
first_task — указатель на NU_TASK переменную, получившую указатель на первую приостановленную задачу
Возвращает:
NU_SUCCESS — вызов завершен успешно
NU_INVALID_GROUP — предоставленный group pointer недействителен
Nucleus SE API Call для информации Event Group
Этот API предоставляет ту же основную функциональность, что и его RTOS аналог.
Прототип service call:
STATUS NUSE_Event_Group_Information(NUSE_EVENT_GROUP group,
U8 *event_flags, U8 *tasks_waiting, NUSE_TASK *first_task);
Параметры:
group — индекс event flag group
event_flags — указатель для получения текущего значения флагов
tasks_waiting — указатель для получения числа приостановленных задач (0 если task suspend отключен)
first_task — указатель для получения индекса первой приостановленной задачи (0 если task suspend отключен)
Возвращает:
NUSE_SUCCESS — вызов завершен успешно
NUSE_INVALID_GROUP — group index недействителен
Nucleus SE Реализация информации Event Group
Реализация проста: текущее значение флагов читается, и если blocking APIs включены, вычисляются waiting-task count и first-task index; иначе оба устанавливаются в 0.
*event_flags = NUSE_Event_Group_Data[group];#if NUSE_BLOCKING_ENABLE *tasks_waiting = NUSE_Event_Group_Blocking_Count[group]; if (NUSE_Event_Group_Blocking_Count[group] != 0) { U8 index; for (index=0; index
Получение числа Event Flag Groups
В Nucleus RTOS число групп может меняться динамически; вызов возвращает текущий счет. В Nucleus SE счет фиксирован на этапе сборки.
Nucleus RTOS API Call для Event Flag Group Count
Прототип service call:
UNSIGNED NU_Established_Event_Groups(VOID);
Возвращает:
Текущее число созданных event flag groups в приложении
Nucleus SE API Call для Event Flag Group Count
Прототип service call:
U8 NUSE_Event_Group_Count(void);
Возвращает:
Число сконфигурированных event flag groups в приложении
Nucleus SE Реализация Event Flag Group Count
Функция просто возвращает значение compile-time константы NUSE_EVENT_GROUP_NUMBER.
Семафоры в Nucleus SE: Обзор, конфигурация и основы API
Event Flag Groups в Nucleus SE: Вводное руководство по конфигурации и использованию API
Встроенный
- Облако против собственных серверов: как выбрать правильное хостинг-решение
- Microsoft Azure анонсирует токенизацию блокчейна и сервисы управления данными
- Структуры C++ против классов: практическое руководство для разработчиков встроенных систем
- Mailboxes в Nucleus SE: Практическое руководство по конфигурации и использованию
- Семафоры в Nucleus RTOS: Утилитарные сервисы и структуры данных
- Семафоры в Nucleus SE: Обзор, конфигурация и основы API
- Event Flag Groups в Nucleus SE: Вводное руководство по конфигурации и использованию API
- Queues в Nucleus SE: Введение и основные Service Calls
- Apacer запускает глобальные высокопроизводительные флеш-карты CV110-SD и CV110-MSD
- OpenHW Group запускает семейство CORE-V открытых процессорных ядер