score: Refine system initialization order

This commit is contained in:
Sebastian Huber
2016-06-20 06:50:12 +02:00
parent 6a6a22586b
commit bc47ec1c99
2 changed files with 49 additions and 3 deletions

View File

@@ -72,15 +72,25 @@ extern "C" {
#define RTEMS_SYSINIT_CLASSIC_USER_TASKS 000706
#define RTEMS_SYSINIT_POSIX_USER_THREADS 000707
#define RTEMS_SYSINIT_STD_FILE_DESCRIPTORS 000800
#define RTEMS_SYSINIT_LAST ffffff
/*
* The value of each order define must consist of exactly two hexadecimal
* digits without a 0x-prefix. A 0x-prefix is concatenated with the module and
* order values to form a proper integer literal.
*/
#define RTEMS_SYSINIT_ORDER_FIRST 00
#define RTEMS_SYSINIT_ORDER_MIDDLE 08
#define RTEMS_SYSINIT_ORDER_LAST 0f
#define RTEMS_SYSINIT_ORDER_FIRST 00
#define RTEMS_SYSINIT_ORDER_SECOND 01
#define RTEMS_SYSINIT_ORDER_THIRD 02
#define RTEMS_SYSINIT_ORDER_FOURTH 03
#define RTEMS_SYSINIT_ORDER_FIFTH 04
#define RTEMS_SYSINIT_ORDER_SIXTH 05
#define RTEMS_SYSINIT_ORDER_SEVENTH 06
#define RTEMS_SYSINIT_ORDER_EIGHTH 07
#define RTEMS_SYSINIT_ORDER_NINETH 08
#define RTEMS_SYSINIT_ORDER_TENTH 09
#define RTEMS_SYSINIT_ORDER_MIDDLE 80
#define RTEMS_SYSINIT_ORDER_LAST ff
typedef void ( *rtems_sysinit_handler )( void );

View File

@@ -143,6 +143,18 @@ typedef enum {
#endif /* RTEMS_POSIX_API */
STD_FILE_DESCRIPTORS_PRE,
STD_FILE_DESCRIPTORS_POST,
LAST_FIRST,
LAST_SECOND,
LAST_THIRD,
LAST_FOURTH,
LAST_FIFTH,
LAST_SIXTH,
LAST_SEVENTH,
LAST_EIGHTH,
LAST_NINETH,
LAST_TENTH,
LAST_MIDDLE,
LAST_LAST,
INIT_TASK,
DONE
} init_step;
@@ -165,6 +177,17 @@ typedef enum {
); \
static void x##_last(void)
#define LAST_STEP(x) \
static void last_##x(void) \
{ \
next_step(LAST_##x); \
} \
RTEMS_SYSINIT_ITEM( \
last_##x, \
RTEMS_SYSINIT_LAST, \
RTEMS_SYSINIT_ORDER_##x \
)
static init_step step;
static void next_step(init_step expected)
@@ -674,6 +697,19 @@ LAST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
next_step(STD_FILE_DESCRIPTORS_POST);
}
LAST_STEP(FIRST);
LAST_STEP(SECOND);
LAST_STEP(THIRD);
LAST_STEP(FOURTH);
LAST_STEP(FIFTH);
LAST_STEP(SIXTH);
LAST_STEP(SEVENTH);
LAST_STEP(EIGHTH);
LAST_STEP(NINETH);
LAST_STEP(TENTH);
LAST_STEP(MIDDLE);
LAST_STEP(LAST);
static void Init(rtems_task_argument arg)
{
#ifdef RTEMS_POSIX_API