summaryrefslogtreecommitdiffstats
path: root/testsuites/mptests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-09-23 16:47:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-09-28 07:16:01 +0200
commit4a4f41ed642cd5d9f4056b12d86bbf80e8da983a (patch)
tree40a7ff0913194c8aa9603dd47625816ae332ce01 /testsuites/mptests
parentrtems: Remove Message_queue_Control::attribute_set (diff)
downloadrtems-4a4f41ed642cd5d9f4056b12d86bbf80e8da983a.tar.bz2
rtems: Add rtems_message_queue_construct()
In contrast to message queues created by rtems_message_queue_create(), the message queues constructed by this directive use a user-provided message buffer storage area. Add RTEMS_MESSAGE_QUEUE_BUFFER() to define a message buffer type for message buffer storage areas. Update #4007.
Diffstat (limited to 'testsuites/mptests')
-rw-r--r--testsuites/mptests/mp09/initimpl.h26
-rw-r--r--testsuites/mptests/mp09/system.h17
-rw-r--r--testsuites/mptests/mp09/task1.c16
3 files changed, 51 insertions, 8 deletions
diff --git a/testsuites/mptests/mp09/initimpl.h b/testsuites/mptests/mp09/initimpl.h
index ff18c514a2..c7377f319a 100644
--- a/testsuites/mptests/mp09/initimpl.h
+++ b/testsuites/mptests/mp09/initimpl.h
@@ -26,6 +26,23 @@
#define CONFIGURE_INIT
#include "system.h"
+#if CONFIGURE_MP_NODE_NUMBER == 1
+
+#define MESSAGE_SIZE 1
+
+static RTEMS_MESSAGE_QUEUE_BUFFER( MESSAGE_SIZE ) buffers[ 1 ];
+
+static const rtems_message_queue_config config = {
+ .name = rtems_build_name( 'M', 'S', 'G', '2' ),
+ .maximum_pending_messages = RTEMS_ARRAY_SIZE( buffers ),
+ .maximum_message_size = MESSAGE_SIZE,
+ .storage_area = buffers,
+ .storage_size = sizeof( buffers ),
+ .attributes = RTEMS_GLOBAL
+};
+
+#endif
+
rtems_task Init(
rtems_task_argument argument
)
@@ -40,10 +57,17 @@ rtems_task Init(
Task_name[ 1 ] = rtems_build_name( '1', '1', '1', ' ' );
Task_name[ 2 ] = rtems_build_name( '2', '2', '2', ' ' );
- Queue_name[ 1 ] = rtems_build_name( 'M', 'S', 'G', ' ' );
+ Queue_name[ 1 ] = rtems_build_name( 'M', 'S', 'G', '1' );
+ Queue_name[ 2 ] = rtems_build_name( 'M', 'S', 'G', '2' );
if ( rtems_object_get_local_node() == 1 ) {
puts( "Creating Message Queue (Global)" );
+
+#if CONFIGURE_MP_NODE_NUMBER == 1
+ status = rtems_message_queue_construct( &config, &Queue_id[ 2 ] );
+ directive_failed( status, "rtems_message_queue_construct" );
+#endif
+
status = rtems_message_queue_create(
Queue_name[ 1 ],
3,
diff --git a/testsuites/mptests/mp09/system.h b/testsuites/mptests/mp09/system.h
index 4fdddc4fc4..9ecea2d971 100644
--- a/testsuites/mptests/mp09/system.h
+++ b/testsuites/mptests/mp09/system.h
@@ -34,11 +34,14 @@ void Send_messages( void );
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-#define CONFIGURE_MAXIMUM_TASKS 2
-#define CONFIGURE_MAXIMUM_TIMERS 1
-#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
-#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( 3, 16 )
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_TIMER 1
+
+#if CONFIGURE_MP_NODE_NUMBER == 1
+ #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 2
+ #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( 3, 16 )
+#endif
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
@@ -49,8 +52,8 @@ void Send_messages( void );
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
-TEST_EXTERN rtems_id Queue_id[ 2 ]; /* array of message queue ids */
-TEST_EXTERN rtems_name Queue_name[ 2 ]; /* array of message queue names */
+TEST_EXTERN rtems_id Queue_id[ 3 ]; /* array of message queue ids */
+TEST_EXTERN rtems_name Queue_name[ 3 ]; /* array of message queue names */
extern char buffer1[16];
extern char buffer2[16];
diff --git a/testsuites/mptests/mp09/task1.c b/testsuites/mptests/mp09/task1.c
index dc78552994..b929a6e01b 100644
--- a/testsuites/mptests/mp09/task1.c
+++ b/testsuites/mptests/mp09/task1.c
@@ -49,7 +49,20 @@ rtems_task Test_task(
);
} while ( !rtems_is_status_successful( status ) );
+ status = rtems_message_queue_ident(
+ Queue_name[ 2 ],
+ RTEMS_SEARCH_ALL_NODES,
+ &Queue_id[ 2 ]
+ );
+ directive_failed( status, "rtems_message_queue_ident" );
+
if ( rtems_object_get_local_node() == 2 ) {
+ status = rtems_message_queue_delete( Queue_id[ 2 ] );
+ fatal_directive_status(
+ status,
+ RTEMS_ILLEGAL_ON_REMOTE_OBJECT,
+ "rtems_message_queue_delete"
+ );
status = rtems_message_queue_delete( Queue_id[ 1 ] );
fatal_directive_status(
status,
@@ -103,6 +116,9 @@ rtems_task Test_task(
puts( "Deleting Message queue" );
status = rtems_message_queue_delete( Queue_id[ 1 ] );
directive_failed( status, "rtems_message_queue_delete" );
+
+ status = rtems_message_queue_delete( Queue_id[ 2 ] );
+ directive_failed( status, "rtems_message_queue_delete" );
}
puts( "*** END OF TEST 9 ***" );