BeRTOS
Defines
module.h File Reference

Debug macros for inter-module dependency checking. More...

#include <cfg/debug.h>

Go to the source code of this file.

Defines

#define MOD_DEFINE(module)   DB(extern bool module ## _initialized; bool module ## _initialized;)
 Declare a global variable for module dependency check.
#define MOD_CHECK(module)
 Check that module was already initialized.
#define MOD_INIT(module)
 Mark module as initialized.
#define MOD_CLEANUP(module)
 Mark module as being no longer initialized.

Detailed Description

Debug macros for inter-module dependency checking.

These macros expand to nothing in release builds. In debug builds, they perform run-time dependency checks for modules.

The usage pattern looks like this:

 MOD_DEFINE(phaser)

 void phaser_init(void)
 {
     MOD_CHECK(computer);
     MOD_CHECK(warp_core);

    [...charge weapons...]

    MOD_INIT(phaser);
 }

 void phaser_cleanup(void)
 {
    MOD_CLEANUP(phaser);

    [...disarm phaser...]
 }
Author:
Bernie Innocenti <bernie@codewiz.org>

Definition in file module.h.


Define Documentation

#define MOD_CHECK (   module)
Value:
do { \
    DB(extern bool module ## _initialized;) \
    ASSERT(module ## _initialized); \
} while (0)

Check that module was already initialized.

Put this check just before accessing any facility provided by a module that requires prior initialization.

See also:
MOD_INIT()

Definition at line 84 of file module.h.

#define MOD_CLEANUP (   module)
Value:
do { \
    ASSERT(module ## _initialized); \
    DB(module ## _initialized = false;) \
} while (0)

Mark module as being no longer initialized.

Marking initialization requires the global data previously defined by MOD_DEFINE().

See also:
MOD_INIT(), MOD_CHECK(), MOD_DEFINE()

Definition at line 116 of file module.h.

#define MOD_DEFINE (   module)    DB(extern bool module ## _initialized; bool module ## _initialized;)

Declare a global variable for module dependency check.

See also:
MOD_INIT(), MOD_CHECK()

Definition at line 73 of file module.h.

#define MOD_INIT (   module)
Value:
do { \
    ASSERT(!module ## _initialized); \
    DB(module ## _initialized = true;) \
} while (0)

Mark module as initialized.

Marking initialization requires the global data previously defined by MOD_DEFINE().

To prevent double initialization bugs, an initialized module must first be cleaned up with MOD_CLEANUP() before calling MOD_INIT() another time.

See also:
MOD_CLEANUP(), MOD_CHECK(), MOD_DEFINE()

Definition at line 102 of file module.h.