SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: |
  Constructs a message queue from the specified the message queue
  configuration.
copyrights:
- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
definition:
  default:
    attributes: null
    body: null
    params:
    - const ${config:/name} *${.:/params[0]/name}
    - ${../../type/if/id:/name} *${.:/params[1]/name}
    return: ${../../status/if/code:/name}
  variants: []
description: null
enabled-by: true
index-entries: []
interface-type: function
links:
- role: interface-placement
  uid: header
- role: interface-ingroup
  uid: group
name: rtems_message_queue_construct
notes: |
  In contrast to message queues created by ${create:/name}, the message queues
  constructed by this directive use a user-provided message buffer storage
  area.

  This directive is intended for applications which do not want to use the
  RTEMS Workspace and instead statically allocate all operating system
  resources.  An application based solely on static allocation can avoid any
  runtime memory allocators.  This can simplify the application architecture
  as well as any analysis that may be required.

  The value for ${/acfg/if/message-buffer-memory:/name} should not include
  memory for message queues constructed by ${.:/name}.
params:
- description: is the message queue configuration.
  dir: null
  name: config
- description: |
    is the pointer to an object identifier variable.  The identifier of the
    constructed message queue will be stored in this variable, in case of a
    successful operation.
  dir: out
  name: id
return:
  return: null
  return-values:
  - description: |
      The requested operation was successful.
    value: ${../../status/if/successful:/name}
  - description: |
      The ${.:/params[1]/name} parameter was ${/c/if/null:/name}.
    value: ${../../status/if/invalid-address:/name}
  - description: |
      The message queue name in the configuration was invalid.
    value: ${../../status/if/invalid-name:/name}
  - description: |
      The maximum number of pending messages in the configuration was zero.
    value: ${../../status/if/invalid-number:/name}
  - description: |
      The maximum message size in the configuration was zero.
    value: ${../../status/if/invalid-size:/name}
  - description: |
      There was no inactive message queue object available to construct a
      message queue.
    value: ${../../status/if/too-many:/name}
  - description: |
      In multiprocessing configurations, there was no inactive global object
      available to construct a global message queue.
    value: ${../../status/if/too-many:/name}
  - description: |
      The maximum message size in the configuration was too big and resulted in
      integer overflows in calculations carried out to determine the size of
      the message buffer area.
    value: ${../../status/if/invalid-size:/name}
  - description: |
      The maximum number of pending messages in the configuration was too big
      and resulted in integer overflows in calculations carried out to
      determine the size of the message buffer area.
    value: ${../../status/if/invalid-number:/name}
  - description: |
      The message queue storage area begin pointer in the configuration was
      ${/c/if/null:/name}.
    value: ${../../status/if/unsatisfied:/name}
  - description: |
      The message queue storage area size in the configuration was not equal to
      the size calculated from the maximum number of pending messages and the
      maximum message size.
    value: ${../../status/if/unsatisfied:/name}
type: interface
