Christopher Collins created MYNEWT-512:
------------------------------------------

             Summary: Replace generated sysinit code with linker section
                 Key: MYNEWT-512
                 URL: https://issues.apache.org/jira/browse/MYNEWT-512
             Project: Mynewt
          Issue Type: Improvement
            Reporter: Christopher Collins
            Assignee: Christopher Collins
             Fix For: v1_0_0_rel


*Old mechanism:*
* pkg.yml file specifies "init_function" and "init_stage"
* newt generates sysinit C files which call the packages' init functions in the 
specified order.

*New mechanism:*
* Each package defines an "init entry" struct containing:
** pointer to init function
** uint8_t stage
* Init entry structs are placed in a special section.
* At startup, the sysinit() function walks the list of entries in the special 
section and calls their corresponding init functions in the correct order.

*Interface*
{code}
typedef void sysinit_init_fn(struct sysinit_init_ctxt *ctxt);
struct sysinit_entry {
    sysinit_init_fn *init_fn;
    uint8_t stage;
};

struct sysinit_init_ctxt {
    const struct sysinit_entry *entry;
    uint8_t cur_stage;
};

#define SYSINIT_REGISTER_INIT(init_cb, init_stage) // ...
{code}

User defines a package initialization function and registers it.  Registration 
creates a {{struct sysinit_entry}} instance in the special "sysinit" section.

*Example:*
{code}
static void
my_pkg_init(void)
{
    /* ... */
}

SYSINIT_REGISTER(my_pkg_init, 2);
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to