diff options
Diffstat (limited to 'spec/rtems/message/if')
-rw-r--r-- | spec/rtems/message/if/buffer.yml | 34 | ||||
-rw-r--r-- | spec/rtems/message/if/config.yml | 85 | ||||
-rw-r--r-- | spec/rtems/message/if/construct.yml | 92 |
3 files changed, 211 insertions, 0 deletions
diff --git a/spec/rtems/message/if/buffer.yml b/spec/rtems/message/if/buffer.yml new file mode 100644 index 00000000..0ff6bd16 --- /dev/null +++ b/spec/rtems/message/if/buffer.yml @@ -0,0 +1,34 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Defines a structure which can be used as a message queue buffer for messages + of the specified maximum size. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + struct { + ${/score/msgq/if/buffer:/name} _buffer; + char _message[ ${.:/params[0]/name} ]; + } + variants: [] +description: null +enabled-by: true +interface-type: macro +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_MESSAGE_QUEUE_BUFFER +notes: | + Use this macro to define the message buffer storage area for + ${construct:/name}. +params: +- description: | + is the maximum message size in bytes. + dir: null + name: _maximum_message_size +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/message/if/config.yml b/spec/rtems/message/if/config.yml new file mode 100644 index 00000000..81c052f7 --- /dev/null +++ b/spec/rtems/message/if/config.yml @@ -0,0 +1,85 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure defines the configuration of a message queue constructed by + ${construct:/name}. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member defines the name of the message queue. + definition: ${../../type/if/name:/name} ${.:name} + description: null + kind: member + name: name + variants: [] +- default: + brief: | + This member defines the maximum number of pending messages supported by + the message queue. + definition: ${/c/if/uint32_t:/name} ${.:name} + description: null + kind: member + name: maximum_pending_messages + variants: [] +- default: + brief: | + This member defines the maximum message size supported by the message + queue. + definition: ${/c/if/size_t:/name} ${.:name} + description: null + kind: member + name: maximum_message_size + variants: [] +- default: + brief: | + This member shall point to the message buffer storage area begin. + definition: void *${.:name} + description: | + The message buffer storage area for the message queue shall be an array + of the type defined by ${buffer:/name} with a maximum message size equal + to the maximum message size of this configuration. + kind: member + name: storage_area + variants: [] +- default: + brief: | + This member defines size of the message buffer storage area in bytes. + definition: ${/c/if/size_t:/name} ${.:name} + description: null + kind: member + name: storage_size + variants: [] +- default: + brief: | + This member defines the optional handler to free the message buffer + storage area. + definition: void ( *${.:name} )( void * ) + description: | + It is called when the message queue is deleted. It is called from task + context under protection of the object allocator lock. It is allowed to + call ${/c/if/free:/name} in this handler. If handler is + ${/c/if/null:/name}, then no action will be performed. + kind: member + name: storage_free + variants: [] +- default: + brief: | + This member defines the attributes of the message queue. + definition: ${../../attr/if/attribute:/name} ${.:name} + description: null + kind: member + name: attributes + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +interface-type: struct +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_message_queue_config +notes: null +type: interface diff --git a/spec/rtems/message/if/construct.yml b/spec/rtems/message/if/construct.yml new file mode 100644 index 00000000..92b5ff92 --- /dev/null +++ b/spec/rtems/message/if/construct.yml @@ -0,0 +1,92 @@ +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: + 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 +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 object 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 |