osMessageQueueNew() - создание новой очереди сообщений в CMSIS-RTOS2
Создает и инициализирует новую очередь сообщений (Message Queue object).
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count,
uint32_t msg_size,
const osMessageQueueAttr_t *attr);
Параметры
Максимальное количество сообщений в очереди.
/// 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;
Возвращаемое значение
/// \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.