📄 uit_func.inl
字号:
ERpget_blk ( VP *p_blk, ID mplid, INT blksz ){ Cyg_Mempool_Variable *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p ); CYG_UIT_PARAMCHECK_PTR( p_blk ); CYG_UIT_PARAMCHECK( blksz > 0, E_PAR ); VP result = (VP)p->try_alloc(blksz); if ( ! result ) return E_TMOUT; *p_blk = result; return E_OK;}#ifdef CYGFUN_KERNEL_THREADS_TIMERCYG_UIT_FUNC_INLINEERtget_blk ( VP *p_blk, ID mplid, INT blksz, TMO tmout ){ Cyg_Mempool_Variable *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p ); CYG_UIT_PARAMCHECK_PTR( p_blk ); CYG_UIT_PARAMCHECK( blksz > 0, E_PAR ); CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout ); // do this now for the case when no sleeping actually occurs Cyg_Thread *self = Cyg_Thread::self(); self->set_wake_reason( Cyg_Thread::TIMEOUT ); VP result; if ( TMO_FEVR == tmout ) result = p->alloc(blksz); else if ( TMO_POL == tmout ) result = p->try_alloc(blksz); else result = p->alloc( blksz, Cyg_Clock::real_time_clock->current_value() + (cyg_tick_count)tmout ); if ( ! result ) CYG_UITRON_FAIL_RETURN_SELF( self ); *p_blk = result; return E_OK;}#endif // CYGFUN_KERNEL_THREADS_TIMERCYG_UIT_FUNC_INLINEERrel_blk ( ID mplid, VP blk ){ Cyg_Mempool_Variable *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p ); CYG_UIT_PARAMCHECK_PTR( blk ); cyg_bool result = p->free( (cyg_uint8 *)blk, 0 ); if ( ! result ) return E_PAR; return E_OK;}CYG_UIT_FUNC_INLINEERref_mpl ( T_RMPL *pk_rmpl, ID mplid ){ Cyg_Mempool_Variable *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p ); CYG_UIT_PARAMCHECK_PTR( pk_rmpl ); pk_rmpl->exinf = NADR; pk_rmpl->wtsk = p->waiting(); pk_rmpl->frsz = p->get_freemem(); cyg_uint8 *base; cyg_int32 size; CYG_ADDRWORD maxfree; p->get_arena(base, size, maxfree); pk_rmpl->maxsz = maxfree; return E_OK;}#endif // 0 < CYG_UITRON_NUM( MEMPOOLVAR )#endif // CYGPKG_UITRON_MEMPOOLVAR#ifdef CYGPKG_UITRON_MEMPOOLFIXED#if 0 < CYG_UITRON_NUM( MEMPOOLFIXED )#ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETECYG_UITRON_NEWFUNCTION( Cyg_Mempool_Fixed )CYG_UIT_FUNC_INLINEERcre_mpf ( ID mpfid, T_CMPF *pk_cmpf ){ ER ret = E_OK; CYG_UIT_PARAMCHECK_PTR( pk_cmpf ); CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( MEMPOOLFIXED, mpfid ); Cyg_Mempool_Fixed *p = &(CYG_UITRON_OBJS( MEMPOOLFIXED )[ mpfid - 1 ]); cyg_uint8 *base; cyg_int32 size; CYG_ADDRWORD scratch; // preserve the original memory area to use p->get_arena( base, size, scratch ); if ( size < (pk_cmpf->blfsz * (pk_cmpf->mpfcnt + 1)) ) ret = E_NOMEM; else if ( TA_TFIFO != pk_cmpf->mpfatr ) ret = E_RSATR; else CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] = new( p ) Cyg_Mempool_Fixed( base, size, (CYG_ADDRWORD)pk_cmpf->blfsz ); Cyg_Scheduler::unlock(); return ret;}CYG_UIT_FUNC_INLINEERdel_mpf ( ID mpfid ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); Cyg_Scheduler::lock(); // deal with the race condition here if ( p != CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] ) { Cyg_Scheduler::unlock(); return E_NOEXS; } CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] = NULL; p->~Cyg_Mempool_Fixed(); Cyg_Scheduler::unlock(); return E_OK;}#endif // CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETECYG_UIT_FUNC_INLINEERget_blf ( VP *p_blf, ID mpfid ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); CYG_UIT_PARAMCHECK_PTR( p_blf ); CYG_UITRON_CHECK_DISPATCH_ENABLED(); VP result = (VP)p->alloc(); if ( ! result ) CYG_UITRON_FAIL_RETURN(); *p_blf = result; return E_OK;}CYG_UIT_FUNC_INLINEERpget_blf ( VP *p_blf, ID mpfid ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); CYG_UIT_PARAMCHECK_PTR( p_blf ); VP result = (VP)p->try_alloc(); if ( ! result ) return E_TMOUT; *p_blf = result; return E_OK;}#ifdef CYGFUN_KERNEL_THREADS_TIMERCYG_UIT_FUNC_INLINEERtget_blf ( VP *p_blf, ID mpfid, TMO tmout ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); CYG_UIT_PARAMCHECK_PTR( p_blf ); CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout ); // do this now for the case when no sleeping actually occurs Cyg_Thread *self = Cyg_Thread::self(); self->set_wake_reason( Cyg_Thread::TIMEOUT ); VP result; if ( TMO_FEVR == tmout ) result = p->alloc(); else if ( TMO_POL == tmout ) result = p->try_alloc(); else result = p->alloc( Cyg_Clock::real_time_clock->current_value() + (cyg_tick_count)tmout ); if ( ! result ) CYG_UITRON_FAIL_RETURN_SELF( self ); *p_blf = result; return E_OK;}#endif // CYGFUN_KERNEL_THREADS_TIMERCYG_UIT_FUNC_INLINEERrel_blf ( ID mpfid, VP blf ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); CYG_UIT_PARAMCHECK_PTR( blf ); cyg_bool result = p->free( (cyg_uint8 *)blf ); if ( ! result ) return E_PAR; return E_OK;}CYG_UIT_FUNC_INLINEERref_mpf ( T_RMPF *pk_rmpf, ID mpfid ){ Cyg_Mempool_Fixed *p; CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p ); CYG_UIT_PARAMCHECK_PTR( pk_rmpf ); pk_rmpf->exinf = NADR; pk_rmpf->wtsk = p->waiting(); cyg_int32 blocksize = p->get_blocksize(); pk_rmpf->frbcnt = p->get_freemem() / blocksize; // these two are "implementation dependent" ie. eCos only pk_rmpf->numbcnt = p->get_totalmem() / blocksize; pk_rmpf->bsize = blocksize; return E_OK;} #endif // 0 < CYG_UITRON_NUM( MEMPOOLFIXED )#endif // CYGPKG_UITRON_MEMPOOLFIXED// - Time Management Functions #ifdef CYGVAR_KERNEL_COUNTERS_CLOCKCYG_UIT_FUNC_INLINEERset_tim ( SYSTIME *pk_tim ){ CYG_UIT_PARAMCHECK_PTR( pk_tim ); Cyg_Clock::real_time_clock->set_value( *pk_tim ); return E_OK;}CYG_UIT_FUNC_INLINEERget_tim ( SYSTIME *pk_tim ){ CYG_UIT_PARAMCHECK_PTR( pk_tim ); *pk_tim = Cyg_Clock::real_time_clock->current_value(); return E_OK;}#endif // CYGVAR_KERNEL_COUNTERS_CLOCK#ifdef CYGFUN_KERNEL_THREADS_TIMERCYG_UIT_FUNC_INLINEERdly_tsk ( DLYTIME dlytim ){ CYG_UIT_PARAMCHECK( 0 <= dlytim, E_PAR ); CYG_UITRON_CHECK_DISPATCH_ENABLED(); if ( 0 >= dlytim ) return E_OK; Cyg_Thread *self = Cyg_Thread::self(); CYG_UITRON_CHECK_TASK_CONTEXT_SELF( self ); self->delay( dlytim ); if ( Cyg_Thread::DONE != self->get_wake_reason() ) CYG_UITRON_FAIL_RETURN_SELF( self ); return E_OK;}#endif // CYGFUN_KERNEL_THREADS_TIMER#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK#ifdef CYGPKG_UITRON_CYCLICS#if 0 < CYG_UITRON_NUM( CYCLICS )CYG_UIT_FUNC_INLINEERdef_cyc ( HNO cycno, T_DCYC *pk_dcyc ){ // pk_dcyc->cycatr is ignored // The only relevant attribute is TA_HLNG/TA_ASM. // This can be ignored as assembler routines are defined to be // more conservative with registers than the procedure call standard. Cyg_Timer *p; CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p );#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR CYG_UIT_PARAMCHECK( NULL != pk_dcyc, E_PAR );#endif if( NADR == pk_dcyc ) { p->~Cyg_Timer(); return E_OK; } CYG_UIT_PARAMCHECK( 0 == (pk_dcyc->cycact & ~TCY_ON), E_PAR ); CYG_UIT_PARAMCHECK( 0 < pk_dcyc->cyctim, E_PAR ); p->initialize( Cyg_Clock::real_time_clock, (cyg_alarm_fn *)pk_dcyc->cychdr, (CYG_ADDRWORD)pk_dcyc->exinf, Cyg_Clock::real_time_clock->current_value() + pk_dcyc->cyctim, pk_dcyc->cyctim, pk_dcyc->cycact); return E_OK;}CYG_UIT_FUNC_INLINEERact_cyc ( HNO cycno, UINT cycact ){ Cyg_Timer *p; CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p ); CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS); CYG_UIT_PARAMCHECK( 0 == (cycact & ~(TCY_ON | TCY_INI)), E_PAR ); p->activate(cycact); return E_OK;}CYG_UIT_FUNC_INLINEERref_cyc ( T_RCYC *pk_rcyc, HNO cycno ){ Cyg_Timer *p; cyg_tick_count t; CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p ); CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS); CYG_UIT_PARAMCHECK_PTR( pk_rcyc ); pk_rcyc->exinf = (VP)p->get_data(); Cyg_Scheduler::lock(); t = p->get_trigger() - Cyg_Clock::real_time_clock->current_value(); Cyg_Scheduler::unlock(); pk_rcyc->lfttim = t; pk_rcyc->cycact = (UINT)p->is_enabled(); return E_OK;}#endif // 0 < CYG_UITRON_NUM( CYCLICS )#endif // CYGPKG_UITRON_CYCLICS#ifdef CYGPKG_UITRON_ALARMS#if 0 < CYG_UITRON_NUM( ALARMS )CYG_UIT_FUNC_INLINEERdef_alm ( HNO almno, T_DALM *pk_dalm ){ Cyg_Timer *p; cyg_tick_count t, now; CYG_UITRON_CHECK_AND_GETHDLR( ALARMS, almno, p );#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR CYG_UIT_PARAMCHECK( NULL != pk_dalm, E_PAR );#endif if( NADR == pk_dalm ) { p->~Cyg_Timer(); return E_OK; } CYG_UIT_PARAMCHECK( 0 == (pk_dalm->tmmode & ~TTM_REL), E_PAR ); // make the time arithmetic safe without locking now = Cyg_Clock::real_time_clock->current_value(); t = pk_dalm->almtim; if( TTM_REL & pk_dalm->tmmode ) t += now; CYG_UIT_PARAMCHECK( now < t, E_PAR ); p->initialize(Cyg_Clock::real_time_clock, (cyg_alarm_fn *)pk_dalm->almhdr, (CYG_ADDRWORD)pk_dalm->exinf, t, 0, Cyg_Timer::ENABLE); return E_OK;}CYG_UIT_FUNC_INLINEERref_alm ( T_RALM *pk_ralm, HNO almno ){ Cyg_Timer *p; cyg_tick_count t; CYG_UITRON_CHECK_AND_GETHDLR( ALARMS, almno, p ); CYG_UIT_PARAMCHECK_PTR( pk_ralm ); CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS); Cyg_Scheduler::lock(); t = p->get_trigger() - Cyg_Clock::real_time_clock->current_value(); Cyg_Scheduler::unlock(); pk_ralm->exinf = (VP)p->get_data(); pk_ralm->lfttim = t; return E_OK;}#endif // 0 < CYG_UITRON_NUM( ALARMS )#endif // CYGPKG_UITRON_ALARMS#endif // CYGVAR_KERNEL_COUNTERS_CLOCK // - System Management Functions CYG_UIT_FUNC_INLINEERget_ver ( T_VER *pk_ver ){ CYG_UIT_PARAMCHECK_PTR( pk_ver ); pk_ver->maker = CYGNUM_UITRON_VER_MAKER; pk_ver->id = CYGNUM_UITRON_VER_ID; pk_ver->spver = CYGNUM_UITRON_VER_SPVER; pk_ver->prver = CYGNUM_UITRON_VER_PRVER; pk_ver->prno[0] = CYGNUM_UITRON_VER_PRNO_0; pk_ver->prno[1] = CYGNUM_UITRON_VER_PRNO_1; pk_ver->prno[2] = CYGNUM_UITRON_VER_PRNO_2; pk_ver->prno[3] = CYGNUM_UITRON_VER_PRNO_3; pk_ver->cpu = CYGNUM_UITRON_VER_CPU; pk_ver->var = CYGNUM_UITRON_VER_VAR; return E_OK;}CYG_UIT_FUNC_INLINEERref_sys ( T_RSYS *pk_rsys ){ CYG_UIT_PARAMCHECK_PTR( pk_rsys ); if ( ! Cyg_Interrupt::interrupts_enabled() ) // CPU is locked pk_rsys->sysstat = TSS_LOC; else pk_rsys->sysstat = (0 == cyg_uitron_dis_dsp_old_priority) ? TSS_TSK : TSS_DDSP; return E_OK;}CYG_UIT_FUNC_INLINEERref_cfg ( T_RCFG *pk_rcfg ){ CYG_UIT_PARAMCHECK_PTR( pk_rcfg ); // no details here yet return E_OK;}#if 0 // NOT SUPPORTEDER def_svc ( FN s_fncd, T_DSVC *pk_dsvc );ER def_exc ( UINT exckind, T_DEXC *pk_dexc );#endif // - Network Support Functions #if 0 // NOT SUPPORTEDER nrea_dat ( INT *p_reasz, VP dstadr, NODE srcnode, VP srcadr, INT datsz );ER nwri_dat ( INT *p_wrisz, NODE dstnode, VP dstadr, VP srcadr, INT datsz );ER nget_nod ( NODE *p_node );ER nget_ver ( T_VER *pk_ver, NODE node );#endif// ========================================================================#endif // CYGPKG_UITRON#endif // CYGPRI_UITRON_FUNCS_HERE_AND_NOW#endif // CYGONCE_COMPAT_UITRON_UIT_FUNC_INL//EOF uit_func.inl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -