コード例 #1
0
extern EONtheSystem * eon_sys_Initialise(const eOnsystem_cfg_t *syscfg,
                                         const eOmempool_cfg_t *mpoolcfg, 
                                         const eOerrman_cfg_t *errmancfg)
{

    if(NULL != s_eos_the_system.thevsys) 
    {
        // already initialised
        return(&s_eos_the_system);
    }
    
    if(NULL == syscfg)
    {
        syscfg = &eon_system_cfg_default;
    }
    
    
    // mpoolcfg can be NULL: in such a case we use eo_mempool_alloc_dynamic mode
    // errmancfg can be NULL

    // mempool and error manager initialised inside here.
    s_eos_the_system.thevsys = eov_sys_hid_Initialise(  mpoolcfg,
                                                        errmancfg,
                                                        s_eon_sys_start, 
                                                        s_eon_sys_gettask, 
                                                        s_eon_sys_timelifeget, 
                                                        s_eon_sys_timelifeset, 
                                                        s_eon_sys_nanotimeget,
                                                        NULL
                                                     );
                                                  


    // and reset the lifetime
    s_eos_the_system.lifetime = 0;


    return(&s_eos_the_system);
}
コード例 #2
0
extern EOStheSystem * eos_sys_Initialise(const eOssystem_cfg_t *syscfg,
        const eOmempool_cfg_t *mpoolcfg,
        const eOerrman_cfg_t *errmancfg,
        const eOstimerman_cfg_t *tmrmancfg,
        const eOscallbackman_cfg_t *cbkmancfg,
        const eOsfoop_cfg_t *foopcfg)
{
    eOsfoop_cfg_t localfoopcfg;

    if(NULL != s_eos_the_system.thevsys)
    {
        // already initialised
        return(&s_eos_the_system);
    }


    // mpoolcfg can be NULL: in such a case we use eo_mempool_alloc_dynamic mode
    // errmancfg can be NULL

    // mempool and error manager initialised inside here.
    s_eos_the_system.thevsys = eov_sys_hid_Initialise(  mpoolcfg,
                               errmancfg,
                               s_eos_sys_start,
                               s_eos_sys_gettask,
                               s_eos_sys_timelifeget,
                               s_eos_sys_timelifeset,
                               s_eos_sys_nanotimeget,
                               syscfg->hal_fns.hal_sys_irq_disable
                                                     );

    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg), s_eobj_ownname, "eos_sys_Start() uses a NULL syscfg", NULL);

    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_start), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_start()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_systick_sethandler), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_systick_sethandler()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_atomic_bitwiseAND), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_atomic_bitwiseAND()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_atomic_bitwiseOR), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_atomic_bitwiseOR()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_criticalsection_take), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_criticalsection_take()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_criticalsection_release), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_criticalsection_release()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_irq_disable), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_irq_disable()", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->hal_fns.hal_sys_irq_enable), s_eobj_ownname, "eos_sys_Start() uses a NULL hal_sys_irq_enable()", NULL);



    eo_errman_Assert(eo_errman_GetHandle(), (syscfg->userdef.systickperiod >= EOSSYS_min_systickperiod), s_eobj_ownname, "eos_sys_Start() uses systickperiod too small", NULL);
    eo_errman_Assert(eo_errman_GetHandle(), (syscfg->userdef.systickperiod <= EOSSYS_max_systickperiod), s_eobj_ownname, "eos_sys_Start() uses systickperiod too high", NULL);

    // after the previous assert() we are now sure that syscfg and foopcfg contain valid values. thus copy them

    // the syscfg
    s_eos_the_system.syscfg = syscfg;

    // we adjust the various configurations, so that a NULL pointer means the default.

    if(NULL == foopcfg)
    {
        foopcfg = (eOsfoop_cfg_t*)&eos_foop_DefaultCfg;
    }
    memcpy(&localfoopcfg, foopcfg, sizeof(eOsfoop_cfg_t));
    foopcfg = &localfoopcfg;

    if(NULL == tmrmancfg)
    {
        tmrmancfg = (eOstimerman_cfg_t*)&eos_timerman_DefaultCfg;
    }

    if(NULL == cbkmancfg)
    {
        cbkmancfg = (eOscallbackman_cfg_t*)&eos_callbackman_DefaultCfg;
    }

    // then we adjust the foop cfg to have a queue size for callbacks as reported in the cfg of the cbk manager
    localfoopcfg.callbackfifosize = cbkmancfg->queuesize;

    // we always initialise the foop.
    s_eos_the_system.thefoop = eos_foop_Initialise(&localfoopcfg, (eOsfoop_hal_fn_t*)&s_eos_the_system.syscfg->hal_fns);

    // and reset the tickoflife
    s_eos_the_system.tickoflife = 0;

    // finally we initialise the timerman and the callbackman but only if ... they have non-zero values in their cfg
    // they are independent. one can use a timermanager but does not want execution of callbacks

    if(0 != tmrmancfg->timernum)
    {
        eos_timerman_Initialise(tmrmancfg);
        eos_foop_hid_SetOnTick(eos_foop_GetHandle(), s_eos_sys_tick_timermanager);
    }

    if(0 != cbkmancfg->queuesize)
    {
        eos_callbackman_Initialise(cbkmancfg);
    }





    // start hal using externally provided function
    s_eos_the_system.syscfg->hal_fns.hal_start();


    return(&s_eos_the_system);
}
コード例 #3
0
extern EOMtheSystem * eom_sys_Initialise(const eOmsystem_cfg_t *syscfg, 
                                         const eOmempool_cfg_t *mpoolcfg, 
                                         const eOerrman_cfg_t *errmancfg,
                                         const eOmtimerman_cfg_t *tmrmancfg,
                                         const eOmcallbackman_cfg_t *cbkmancfg)
{
    uint32_t ram08size = 0;
    uint64_t *ram08data = NULL;

    if(NULL != s_eom_system.thevsys) 
    {
        // already initialised
        return(&s_eom_system);
    }


    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg), "eom_sys_Initialise(): NULL syscfg", s_eobj_ownname, &eo_errman_DescrWrongParamLocal);
    // verify that we have a valid osalcfg and halcfg. fsalcfg can be NULL
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->halcfg), "eom_sys_Initialise(): NULL halcfg", s_eobj_ownname, &eo_errman_DescrWrongParamLocal);
    eo_errman_Assert(eo_errman_GetHandle(), (NULL != syscfg->osalcfg), "eom_sys_Initialise(): NULL osalcfg", s_eobj_ownname, &eo_errman_DescrWrongParamLocal);

    // mpoolcfg can be NULL: in such a case we use eo_mempool_alloc_dynamic mode
    // errmancfg can be NULL
    // tmrmancfg can be NULL: in such a case we use default values
    // cbkmancfg can be NULL: in such a case we use default values

    
    // mempool and error manager initialised inside here.
    s_eom_system.thevsys = eov_sys_hid_Initialise(mpoolcfg,
                                                  errmancfg,        // error man 
                                                  (eOres_fp_voidfpvoid_t)s_eom_sys_start, s_eom_gettask, 
                                                  osal_system_abstime_get, osal_system_ticks_abstime_set, 
                                                  (eOuint64_fp_void_t)osal_system_nanotime_get,
                                                  hal_sys_irq_disable);

    s_eom_system.halcfg     = syscfg->halcfg;
    s_eom_system.osalcfg    = syscfg->osalcfg;
    s_eom_system.tmrmancfg  = tmrmancfg;
    s_eom_system.cbkmancfg  = cbkmancfg;


    hal_core_init(syscfg->halcfg);
    hal_core_start();

    if(0 != syscfg->codespaceoffset)
    {
        hal_sys_vectortable_relocate(syscfg->codespaceoffset);
    }    

 
    // initialise osal
    osal_base_memory_getsize(s_eom_system.osalcfg, &ram08size);
    if(0 != ram08size)
    {
        ram08data = (uint64_t*) eo_mempool_GetMemory(eo_mempool_GetHandle(), eo_mempool_align_64bit, ram08size, 1);
    }

    osal_base_initialise(s_eom_system.osalcfg, ram08data);


    return(&s_eom_system);
   
}