[PATCH v2] c-user: Update partition create documentation
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Aug 3 05:57:49 UTC 2018
Add an example.
Close #3482.
---
c-user/partition_manager.rst | 65 ++++++++++++++++++++++++++++++++++++--------
1 file changed, 54 insertions(+), 11 deletions(-)
diff --git a/c-user/partition_manager.rst b/c-user/partition_manager.rst
index 68761da..010f63a 100644
--- a/c-user/partition_manager.rst
+++ b/c-user/partition_manager.rst
@@ -162,21 +162,23 @@ DIRECTIVE STATUS CODES:
* - ``RTEMS_SUCCESSFUL``
- partition created successfully
* - ``RTEMS_INVALID_NAME``
- - invalid partition name
+ - invalid partition ``name``
* - ``RTEMS_TOO_MANY``
- too many partitions created
* - ``RTEMS_INVALID_ADDRESS``
- - address not on four byte boundary
+ - ``starting_address`` is not on a pointer size boundary
* - ``RTEMS_INVALID_ADDRESS``
- ``starting_address`` is NULL
* - ``RTEMS_INVALID_ADDRESS``
- ``id`` is NULL
* - ``RTEMS_INVALID_SIZE``
- - length or buffer size is 0
+ - ``length`` or ``buffer_size`` is 0
* - ``RTEMS_INVALID_SIZE``
- - length is less than the buffer size
+ - ``length`` is less than the ``buffer_size``
* - ``RTEMS_INVALID_SIZE``
- - buffer size not a multiple of 4
+ - ``buffer_size`` is not an integral multiple of the pointer size
+ * - ``RTEMS_INVALID_SIZE``
+ - ``buffer_size`` is less than two times the pointer size
* - ``RTEMS_MP_NOT_CONFIGURED``
- multiprocessing not configured
* - ``RTEMS_TOO_MANY``
@@ -194,13 +196,18 @@ DESCRIPTION:
NOTES:
This directive will not cause the calling task to be preempted.
- The ``starting_address`` must be properly aligned for the target
- architecture.
+ The partition buffer area specified by the ``starting_address`` must be
+ properly aligned. It must be possible to directly store target
+ architecture pointers and the also the user data. For example, if the user
+ data contains some long double or vector data types, the partition buffer
+ area and the buffer size must take the alignment of these types into
+ account which is usually larger than the pointer alignment. A cache line
+ alignment may be also a factor.
- The ``buffer_size`` parameter must be a multiple of the CPU alignment
- factor. Additionally, ``buffer_size`` must be large enough to hold two
- pointers on the target architecture. This is required for RTEMS to manage
- the buffers when they are free.
+ The ``buffer_size`` parameter must be an integral multiple of the pointer
+ size on the target architecture. Additionally, ``buffer_size`` must be
+ large enough to hold two pointers on the target architecture. This is
+ required for RTEMS to manage the buffers when they are free.
Memory from the partition is not used by RTEMS to store the Partition
Control Block.
@@ -226,6 +233,42 @@ NOTES:
The total number of global objects, including partitions, is limited by the
maximum_global_objects field in the Configuration Table.
+EXAMPLE:
+ .. code-block:: c
+
+ #include <rtems.h>
+ #include <rtems/chain.h>
+
+ #include <assert.h>
+
+ typedef struct {
+ char less;
+ short more;
+ } item;
+
+ union {
+ item data;
+ rtems_chain_node node;
+ } items[ 13 ];
+
+ rtems_id create_partition(void)
+ {
+ rtems_id id;
+ rtems_status_code sc;
+
+ sc = rtems_partition_create(
+ rtems_build_name( 'P', 'A', 'R', 'T' ),
+ items,
+ sizeof( items ),
+ sizeof( items[ 0 ] ),
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ assert(sc == RTEMS_SUCCESSFUL);
+
+ return id;
+ }
+
.. raw:: latex
\clearpage
--
2.13.7
More information about the devel
mailing list