Partition Memory в Nucleus RTOS/SE: Утилитарные сервисы и структуры данных
View the RTOS Revealed series
Строя на нашем предыдущем исследовании RTOS partition memory, эта статья углубляется в практические утилиты и базовые структуры данных, обеспечивающие эффективное управление памятью в Nucleus RTOS и его облегченном издании, Nucleus SE.
Partition Pool Utility Services
Nucleus RTOS предлагает три выделенных API вызова, предоставляющих необходимую информацию и возможности управления для partition pools: получение детальной информации о пуле, определение общего числа пулов в приложении и получение указателей на все структуры пулов. Первые две функции полностью поддерживаются в Nucleus SE, хотя с некоторыми различиями в фичах из-за его уменьшенного набора.
Получение информации о Partition Pool
Сервис NU_Partition_Pool_Information возвращает комплексный снимок указанного partition pool. В Nucleus SE функция возвращает урезанный набор данных, отражающий отсутствие object naming, suspend ordering и task suspend поддержки.
Nucleus RTOS API Call для информации Partition Pool
Прототип service call:
STATUS NU_Partition_Pool_Information(NU_PARTITION_POOL *pool, CHAR *name, VOID **start_address, UNSIGNED *pool_size, UNSIGNED *partition_size, UNSIGNED *available, UNSIGNED *allocated, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task);
Параметры:
pool — указатель на partition pool, для которого запрашивается информация.
name — указатель на 8-символьный буфер, получающий имя пула (включая null terminator).
start_address — указатель на переменную, получающую базовый адрес области данных пула.
pool_size — указатель на переменную, получающую общий размер пула в байтах.
partition_size — указатель на переменную, получающую размер каждой партиции.
available — указатель на переменную, получающую счетчик свободных партиций.
allocated — указатель на переменную, получающую счетчик используемых партиций.
suspend_type — указатель на переменную, получающую suspend policy (валидные значения: NU_FIFO или NU_PRIORITY).
tasks_waiting — указатель на переменную, получающую число задач, приостановленных на этом пуле.
first_task — указатель на переменную, получающую указатель на первую приостановленную задачу.
Возвращает:
NU_SUCCESS — операция успешна.
NU_INVALID_POOL — предоставленный pool pointer недействителен.
Nucleus SE API Call для информации Partition Pool
В Nucleus SE та же функциональность предоставляется через облегченный интерфейс ниже. Поскольку SE не поддерживает task suspend, связанные поля опущены.
Прототип service call:
STATUS NUSE_Partition_Pool_Information(NUSE_PARTITION_POOL pool, ADDR *start_address, U32 *pool_size, U16 *partition_size, U8 *available, U8 *allocated, U8 *tasks_waiting, NUSE_TASK *first_task)
Параметры:
pool — индекс partition pool.
start_address — указатель на переменную, получающую базовый адрес области данных пула.
pool_size — указатель на переменную, получающую общий размер пула в байтах.
partition_size — указатель на переменную, получающую размер каждой партиции.
available — указатель на переменную, получающую число свободных партиций.
allocated — указатель на переменную, получающую число используемых партиций.
tasks_waiting — указатель на переменную, получающую число ожидающих задач (ноль если task suspend отключен).
first_task — указатель на переменную, получающую индекс первой приостановленной задачи (ноль если task suspend отключен).
Возвращает:
NUSE_SUCCESS — операция успешна.
NUSE_INVALID_POOL — pool index недействителен.
NUSE_INVALID_POINTER — один или более pointer аргументов null.
Nucleus SE Реализация информации Partition Pool
SE реализация лаконична: рутина заполняет запрошенные поля и, когда blocking APIs включены, устанавливает waiting-task count и first task index (иначе эти поля обнуляются).

Получение числа Partition Pools
Этот сервис возвращает общее число partition pools, определенных в приложении. В Nucleus RTOS счет может меняться динамически по мере создания или уничтожения пулов; в Nucleus SE счет фиксирован на этапе сборки.
Nucleus RTOS API Call для числа Partition Pools
Прототип service call:
UNSIGNED NU_Established_Partition_Pools(VOID);
Параметры: Нет.
Возвращает: Текущее число активных partition pools.
Nucleus SE API Call для числа Partition Pools
Прототип service call:
U8 NUSE_Partition_Pool_Count(void);
Параметры: Нет.
Возвращает: Число partition pools, сконфигурированных на compile time.
Реализация
SE рутина просто возвращает значение compile-time константы NUSE_PARTITION_POOL_NUMBER.
Встроенный
- Облако против собственных серверов: как выбрать правильное хостинг-решение
- Microsoft Azure анонсирует токенизацию блокчейна и сервисы управления данными
- Основы цифровой памяти: адресация, доступ и волатильность
- Микропроцессоры: эволюция вычислений с запрограммированной памятью
- Структуры C++ против классов: практическое руководство для разработчиков встроенных систем
- Mailboxes в Nucleus SE: Практическое руководство по конфигурации и использованию
- Семафоры в Nucleus RTOS: Утилитарные сервисы и структуры данных
- Семафоры в Nucleus SE: Обзор, конфигурация и основы API
- Мастерство Event Flag Groups: Утилитарные сервисы и структуры данных в Nucleus RTOS/SE
- Event Flag Groups в Nucleus SE: Вводное руководство по конфигурации и использованию API