osMessageQueueNew() - создание новой очереди сообщений в CMSIS-RTOS2

Создает и инициализирует новую очередь сообщений (Message Queue object).

osMessageQueueId_t  osMessageQueueNew (uint32_t                    msg_count,
                                       uint32_t                    msg_size,
                                       const osMessageQueueAttr_t  *attr);

Параметры

msg_count
maximum number of messages in queue
Длина очереди.

Максимальное количество сообщений в очереди.

msg_size
maximum message size in bytes
Размер одного сообщения в байтах.
*attr
message queue attributes; NULL: default values
Указатель на структуру, содержащую атрибуты (свойства) создаваемой очереди сообщений. Если NULL - устанавливаются значения по умолчанию.
/// Attributes structure for message queue.
typedef struct {
  const char          *name;      /// name of the message queue
  uint32_t            attr_bits;  /// attribute bits
  void                *cb_mem;    /// memory for control block
  uint32_t            cb_size;    /// size of provided memory for control block
  void                *mq_mem;    /// memory for data storage
  uint32_t             mq_size;   /// size of provided memory for data storage
} osMessageQueueAttr_t;



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

osMessageQueueId_t
message queue ID for reference by other functions or NULL in case of error
Указатель на идентификатор очереди сообщений (тип значения - osMessageQueueId_t / указатель на void) или NULL в случае ошибки.
/// \details Message Queue ID identifies the message queue.
typedef void *osMessageQueueId_t;



Описание

Функция osMessageQueueNew() должна быть вызвана после функции инициализации ядра osKernelInitialize() и до запуска ядра RTOS функцией osKernelStart().

Функция osMessageQueueNew() не может быть вызвана из процедуры обработки прерывания (ISR - Interrupt Service Routines)

Общий объем памяти, необходимый для хранения данных очереди сообщений, составляет не менее msg_count * msg_size. Значение msg_size округляется до двойного четного числа, чтобы обеспечить 32-разрядное выравнивание блоков памяти.

Блоки памяти, выделяемые из очереди сообщений, имеют фиксированный размер, определенный с помощью параметра msg_size.