score: Add static initializers for thread queues

This commit is contained in:
Sebastian Huber
2015-05-19 12:00:48 +02:00
parent 9052f88b16
commit d8752860e5
2 changed files with 48 additions and 0 deletions
@@ -20,6 +20,8 @@
#define _RTEMS_SCORE_THREADQIMPL_H
#include <rtems/score/threadq.h>
#include <rtems/score/chainimpl.h>
#include <rtems/score/rbtreeimpl.h>
#include <rtems/score/thread.h>
#ifdef __cplusplus
@@ -342,6 +344,38 @@ void _Thread_queue_Initialize(
Thread_queue_Disciplines the_discipline
);
#if defined(RTEMS_SMP)
#define THREAD_QUEUE_FIFO_INITIALIZER( designator, name ) { \
.Queues = { \
.Fifo = CHAIN_INITIALIZER_EMPTY( designator.Queues.Fifo ) \
}, \
.operations = &_Thread_queue_Operations_FIFO, \
.Lock = ISR_LOCK_INITIALIZER( name ) \
}
#define THREAD_QUEUE_PRIORIY_INITIALIZER( designator, name ) { \
.Queues = { \
.Priority = RBTREE_INITIALIZER_EMPTY( designator.Queues.Priority ) \
}, \
.operations = &_Thread_queue_Operations_priority, \
.Lock = ISR_LOCK_INITIALIZER( name ) \
}
#else
#define THREAD_QUEUE_FIFO_INITIALIZER( designator, name ) { \
.Queues = { \
.Fifo = CHAIN_INITIALIZER_EMPTY( designator.Queues.Fifo ) \
}, \
.operations = &_Thread_queue_Operations_FIFO \
}
#define THREAD_QUEUE_PRIORIY_INITIALIZER( designator, name ) { \
.Queues = { \
.Priority = RBTREE_INITIALIZER_EMPTY( designator.Queues.Priority ) \
}, \
.operations = &_Thread_queue_Operations_priority \
}
#endif
RTEMS_INLINE_ROUTINE void _Thread_queue_Destroy(
Thread_queue_Control *the_thread_queue
)
+14
View File
@@ -18,6 +18,12 @@
const char rtems_test_name[] = "SPTHREADQ 1";
static Thread_queue_Control fifo_queue =
THREAD_QUEUE_FIFO_INITIALIZER( fifo_queue, "FIFO" );
static Thread_queue_Control prio_queue =
THREAD_QUEUE_PRIORIY_INITIALIZER( prio_queue, "Prio" );
static rtems_task Init(
rtems_task_argument ignored
)
@@ -30,6 +36,14 @@ static rtems_task Init(
_Thread_Enable_dispatch();
/* is there more to check? */
rtems_test_assert( _Chain_Is_empty( &fifo_queue.Queues.Fifo ) );
rtems_test_assert( fifo_queue.operations == &_Thread_queue_Operations_FIFO );
rtems_test_assert( _RBTree_Is_empty( &fifo_queue.Queues.Priority ) );
rtems_test_assert(
prio_queue.operations == &_Thread_queue_Operations_priority
);
TEST_END();
rtems_test_exit(0);
}