📄 kapi.cxx
字号:
t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)mbox;}externC void cyg_mbox_delete(cyg_handle_t mbox){ ((Cyg_Mbox *)mbox)->~Cyg_Mbox();}externC void *cyg_mbox_get(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->get();}#ifdef CYGFUN_KERNEL_THREADS_TIMERvoid *cyg_mbox_timed_get( cyg_handle_t mbox, cyg_tick_count_t abstime ){ return ((Cyg_Mbox *)mbox)->get(abstime);}#endifexternC void *cyg_mbox_tryget(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->tryget();}externC void *cyg_mbox_peek_item(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->peek_item();}#ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAITexternC cyg_bool_t cyg_mbox_put(cyg_handle_t mbox, void *item){ return ((Cyg_Mbox *)mbox)->put(item);}#ifdef CYGFUN_KERNEL_THREADS_TIMERexternC cyg_bool_t cyg_mbox_timed_put( cyg_handle_t mbox, void *item, cyg_tick_count_t abstime ){ return ((Cyg_Mbox *)mbox)->put(item, abstime);}#endif#endifexternC cyg_bool_t cyg_mbox_tryput(cyg_handle_t mbox, void *item){ return ((Cyg_Mbox *)mbox)->tryput(item);}externC cyg_count32 cyg_mbox_peek(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->peek();}externC cyg_bool_t cyg_mbox_waiting_to_get(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->waiting_to_get();}externC cyg_bool_t cyg_mbox_waiting_to_put(cyg_handle_t mbox){ return ((Cyg_Mbox *)mbox)->waiting_to_put();}/*---------------------------------------------------------------------------*//* Semaphores */externC void cyg_semaphore_init( cyg_sem_t *sem, /* Semaphore to init */ cyg_count32 val /* Initial semaphore value */){ CYG_ASSERT_SIZES( cyg_sem_t, Cyg_Counting_Semaphore ); Cyg_Counting_Semaphore *t = new((void *)sem) Cyg_Counting_Semaphore(val); t=t;}externC void cyg_semaphore_destroy( cyg_sem_t *sem ){ ((Cyg_Counting_Semaphore *)sem)->~Cyg_Counting_Semaphore();}externC cyg_bool_t cyg_semaphore_wait( cyg_sem_t *sem ){ return ((Cyg_Counting_Semaphore *)sem)->wait();}#ifdef CYGFUN_KERNEL_THREADS_TIMERexternC cyg_bool_t cyg_semaphore_timed_wait( cyg_sem_t *sem, cyg_tick_count_t abstime ){ return ((Cyg_Counting_Semaphore *)sem)->wait(abstime);}#endifexternC int cyg_semaphore_trywait( cyg_sem_t *sem ){ return ((Cyg_Counting_Semaphore *)sem)->trywait();}externC void cyg_semaphore_post( cyg_sem_t *sem ){ ((Cyg_Counting_Semaphore *)sem)->post();}externC void cyg_semaphore_peek( cyg_sem_t *sem, cyg_count32 *val ){ CYG_CHECK_DATA_PTR( val, "Bad val parameter" ); *val = ((Cyg_Counting_Semaphore *)sem)->peek();}/*---------------------------------------------------------------------------*//* Flags */void cyg_flag_init( cyg_flag_t *flag /* Flag to init */){ CYG_ASSERT_SIZES( cyg_flag_t, Cyg_Flag ); CYG_ASSERT( ( Cyg_Flag::AND == CYG_FLAG_WAITMODE_AND ) && ( Cyg_Flag::OR == CYG_FLAG_WAITMODE_OR ) && ( Cyg_Flag::CLR == CYG_FLAG_WAITMODE_CLR ), "CYG_FLAG_WAITMODE_xxx definition != C++ Cyg_Flag::xxx" ); Cyg_Flag *t = new((void *)flag) Cyg_Flag(); t=t;}void cyg_flag_destroy( cyg_flag_t *flag ){ ((Cyg_Flag *)flag)->~Cyg_Flag();}void cyg_flag_setbits( cyg_flag_t *flag, cyg_flag_value_t value){ ((Cyg_Flag *)flag)->setbits( value ); }void cyg_flag_maskbits( cyg_flag_t *flag, cyg_flag_value_t value){ ((Cyg_Flag *)flag)->maskbits( value ); }cyg_flag_value_t cyg_flag_wait( cyg_flag_t *flag, cyg_flag_value_t pattern, cyg_flag_mode_t mode ){ if ( 0 == pattern || 0 != (mode & ~3) ) return 0; return ((Cyg_Flag *)flag)->wait( pattern, mode );}#ifdef CYGFUN_KERNEL_THREADS_TIMERcyg_flag_value_t cyg_flag_timed_wait( cyg_flag_t *flag, cyg_flag_value_t pattern, cyg_flag_mode_t mode, cyg_tick_count_t abstime ){ if ( 0 == pattern || 0 != (mode & ~3) ) return 0; return ((Cyg_Flag *)flag)->wait( pattern, mode, abstime );}#endifcyg_flag_value_t cyg_flag_poll( cyg_flag_t *flag, cyg_flag_value_t pattern, cyg_flag_mode_t mode ){ if ( 0 == pattern || 0 != (mode & ~3) ) return 0; return ((Cyg_Flag *)flag)->poll( pattern, mode );}cyg_flag_value_t cyg_flag_peek( cyg_flag_t *flag ){ return ((Cyg_Flag *)flag)->peek();}cyg_bool_t cyg_flag_waiting( cyg_flag_t *flag ){ return ((Cyg_Flag *)flag)->waiting();}/*---------------------------------------------------------------------------*//* Mutex */externC void cyg_mutex_init( cyg_mutex_t *mutex /* Mutex to init */){ CYG_ASSERT_SIZES( cyg_mutex_t, Cyg_Mutex ); Cyg_Mutex *m = new((void *)mutex) Cyg_Mutex; m=m;}externC void cyg_mutex_destroy( cyg_mutex_t *mutex ){ ((Cyg_Mutex *)mutex)->~Cyg_Mutex();}externC cyg_bool_t cyg_mutex_lock( cyg_mutex_t *mutex ){ return ((Cyg_Mutex *)mutex)->lock();}externC cyg_bool_t cyg_mutex_trylock( cyg_mutex_t *mutex ){ return ((Cyg_Mutex *)mutex)->trylock();}externC void cyg_mutex_unlock( cyg_mutex_t *mutex ){ ((Cyg_Mutex *)mutex)->unlock();}externC void cyg_mutex_release( cyg_mutex_t *mutex ){ ((Cyg_Mutex *)mutex)->release();}#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILINGexternC void cyg_mutex_set_ceiling( cyg_mutex_t *mutex, cyg_priority_t priority ){ ((Cyg_Mutex *)mutex)->set_ceiling(priority);}#endif#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMICexternC void cyg_mutex_set_protocol( cyg_mutex_t *mutex, enum cyg_mutex_protocol protocol ){ ((Cyg_Mutex *)mutex)->set_protocol((Cyg_Mutex::cyg_protcol)protocol);}#endif/*---------------------------------------------------------------------------*//* Condition Variables */externC void cyg_cond_init( cyg_cond_t *cond, /* condition variable to init */ cyg_mutex_t *mutex /* associated mutex */){ CYG_ASSERT_SIZES( cyg_cond_t, Cyg_Condition_Variable ); Cyg_Condition_Variable *t = new((void *)cond) Cyg_Condition_Variable( *(Cyg_Mutex *)mutex); t=t;}externC void cyg_cond_destroy( cyg_cond_t *cond ){ ((Cyg_Condition_Variable *)cond)->~Cyg_Condition_Variable();}externC cyg_bool_t cyg_cond_wait( cyg_cond_t *cond ){ return ((Cyg_Condition_Variable *)cond)->wait();}externC void cyg_cond_signal( cyg_cond_t *cond ){ ((Cyg_Condition_Variable *)cond)->signal();}externC void cyg_cond_broadcast( cyg_cond_t *cond ){ ((Cyg_Condition_Variable *)cond)->broadcast();}#ifdef CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAITexternC cyg_bool_t cyg_cond_timed_wait( cyg_cond_t *cond, cyg_tick_count_t abstime ){ return ((Cyg_Condition_Variable *)cond)->wait(abstime);}#endif/*---------------------------------------------------------------------------*//* Spinlocks */externC void cyg_spinlock_init( cyg_spinlock_t *lock, /* spinlock to initialize */ cyg_bool_t locked /* init locked or unlocked */){ CYG_ASSERT_SIZES( cyg_spinlock_t, Cyg_SpinLock ); // Create the spinlock in cleared state Cyg_SpinLock *t = new((void *)lock) Cyg_SpinLock(); // If the lock is to start locked, then lock it now. if( locked ) t->spin();}externC void cyg_spinlock_destroy( cyg_spinlock_t *lock ){ ((Cyg_SpinLock *)lock)->~Cyg_SpinLock();}externC void cyg_spinlock_spin( cyg_spinlock_t *lock ){ ((Cyg_SpinLock *)lock)->spin();}externC void cyg_spinlock_clear( cyg_spinlock_t *lock ){ ((Cyg_SpinLock *)lock)->clear();}externC cyg_bool_t cyg_spinlock_try( cyg_spinlock_t *lock ){ return ((Cyg_SpinLock *)lock)->trylock();}externC cyg_bool_t cyg_spinlock_test( cyg_spinlock_t *lock ){ return ((Cyg_SpinLock *)lock)->test();}externC void cyg_spinlock_spin_intsave( cyg_spinlock_t *lock, cyg_addrword_t *istate ){ ((Cyg_SpinLock *)lock)->spin_intsave((CYG_INTERRUPT_STATE *)istate);} externC void cyg_spinlock_clear_intsave( cyg_spinlock_t *lock, cyg_addrword_t istate ){ ((Cyg_SpinLock *)lock)->clear_intsave((CYG_INTERRUPT_STATE)istate);} // -------------------------------------------------------------------------// Check structure sizes.// This class and constructor get run automatically in debug versions// of the kernel and check that the structures configured in the C// code are the same size as the C++ classes they should match.#ifdef CYGPKG_INFRA_DEBUGclass Cyg_Check_Structure_Sizes{ int dummy;public: Cyg_Check_Structure_Sizes( int x );};#define CYG_CHECK_SIZES(cstruct, cxxstruct) \if( sizeof(cstruct) != sizeof(cxxstruct) ) \{ \ char *fmt = "Size of C struct " #cstruct \ " != size of C++ struct " #cxxstruct ; \ CYG_TRACE2(1, fmt, sizeof(cstruct) , sizeof(cxxstruct) ); \ fail = true; \ fmt = fmt; \}Cyg_Check_Structure_Sizes::Cyg_Check_Structure_Sizes(int x){ cyg_bool fail = false; dummy = x+1; CYG_CHECK_SIZES( cyg_thread, Cyg_Thread ); CYG_CHECK_SIZES( cyg_interrupt, Cyg_Interrupt ); CYG_CHECK_SIZES( cyg_counter, Cyg_Counter ); CYG_CHECK_SIZES( cyg_clock, Cyg_Clock ); CYG_CHECK_SIZES( cyg_alarm, Cyg_Alarm ); CYG_CHECK_SIZES( cyg_mbox, Cyg_Mbox ); CYG_CHECK_SIZES( cyg_sem_t, Cyg_Counting_Semaphore ); CYG_CHECK_SIZES( cyg_flag_t, Cyg_Flag ); CYG_CHECK_SIZES( cyg_mutex_t, Cyg_Mutex ); CYG_CHECK_SIZES( cyg_cond_t, Cyg_Condition_Variable ); CYG_CHECK_SIZES( cyg_spinlock_t, Cyg_SpinLock ); CYG_ASSERT( !fail, "Size checks failed");}static Cyg_Check_Structure_Sizes cyg_kapi_check_structure_sizes(1);#endif// -------------------------------------------------------------------------#endif// EOF common/kapi.cxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -