📄 kapi.cxx
字号:
Cyg_Mbox *t = new((void *)mbox) Cyg_Mbox();
t=t;
CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
*handle = (cyg_handle_t)mbox;
}
externC void cyg_mbox_delete(cyg_handle_t mbox) __THROW
{
((Cyg_Mbox *)mbox)->~Cyg_Mbox();
}
externC void *cyg_mbox_get(cyg_handle_t mbox) __THROW
{
return ((Cyg_Mbox *)mbox)->get();
}
#ifdef CYGFUN_KERNEL_THREADS_TIMER
void *cyg_mbox_timed_get(
cyg_handle_t mbox,
cyg_tick_count_t abstime
) __THROW
{
return ((Cyg_Mbox *)mbox)->get(abstime);
}
#endif
externC void *cyg_mbox_tryget(cyg_handle_t mbox) __THROW
{
return ((Cyg_Mbox *)mbox)->tryget();
}
externC void *cyg_mbox_peek_item(cyg_handle_t mbox) __THROW
{
return ((Cyg_Mbox *)mbox)->peek_item();
}
#ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT
externC cyg_bool_t cyg_mbox_put(cyg_handle_t mbox, void *item) __THROW
{
return ((Cyg_Mbox *)mbox)->put(item);
}
#ifdef CYGFUN_KERNEL_THREADS_TIMER
externC cyg_bool_t cyg_mbox_timed_put(
cyg_handle_t mbox,
void *item,
cyg_tick_count_t abstime
) __THROW
{
return ((Cyg_Mbox *)mbox)->put(item, abstime);
}
#endif
#endif
externC cyg_bool_t cyg_mbox_tryput(cyg_handle_t mbox, void *item) __THROW
{
return ((Cyg_Mbox *)mbox)->tryput(item);
}
externC cyg_count32 cyg_mbox_peek(cyg_handle_t mbox) __THROW
{
return ((Cyg_Mbox *)mbox)->peek();
}
externC cyg_bool_t cyg_mbox_waiting_to_get(cyg_handle_t mbox) __THROW
{
return ((Cyg_Mbox *)mbox)->waiting_to_get();
}
externC cyg_bool_t cyg_mbox_waiting_to_put(cyg_handle_t mbox) __THROW
{
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 */
) __THROW
{
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 ) __THROW
{
((Cyg_Counting_Semaphore *)sem)->~Cyg_Counting_Semaphore();
}
externC cyg_bool_t cyg_semaphore_wait( cyg_sem_t *sem ) __THROW
{
return ((Cyg_Counting_Semaphore *)sem)->wait();
}
#ifdef CYGFUN_KERNEL_THREADS_TIMER
externC cyg_bool_t cyg_semaphore_timed_wait(
cyg_sem_t *sem,
cyg_tick_count_t abstime
) __THROW
{
return ((Cyg_Counting_Semaphore *)sem)->wait(abstime);
}
#endif
externC int cyg_semaphore_trywait( cyg_sem_t *sem ) __THROW
{
return ((Cyg_Counting_Semaphore *)sem)->trywait();
}
externC void cyg_semaphore_post( cyg_sem_t *sem ) __THROW
{
((Cyg_Counting_Semaphore *)sem)->post();
}
externC void cyg_semaphore_peek( cyg_sem_t *sem, cyg_count32 *val ) __THROW
{
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 */
) __THROW
{
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 ) __THROW
{
((Cyg_Flag *)flag)->~Cyg_Flag();
}
void cyg_flag_setbits( cyg_flag_t *flag, cyg_flag_value_t value) __THROW
{
((Cyg_Flag *)flag)->setbits( value );
}
void cyg_flag_maskbits( cyg_flag_t *flag, cyg_flag_value_t value) __THROW
{
((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 ) __THROW
{
if ( 0 == pattern || 0 != (mode & ~3) )
return 0;
return ((Cyg_Flag *)flag)->wait( pattern, mode );
}
#ifdef CYGFUN_KERNEL_THREADS_TIMER
cyg_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 ) __THROW
{
if ( 0 == pattern || 0 != (mode & ~3) )
return 0;
return ((Cyg_Flag *)flag)->wait( pattern, mode, abstime );
}
#endif
cyg_flag_value_t cyg_flag_poll( cyg_flag_t *flag,
cyg_flag_value_t pattern,
cyg_flag_mode_t mode ) __THROW
{
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 ) __THROW
{
return ((Cyg_Flag *)flag)->peek();
}
cyg_bool_t cyg_flag_waiting( cyg_flag_t *flag ) __THROW
{
return ((Cyg_Flag *)flag)->waiting();
}
/*---------------------------------------------------------------------------*/
/* Mutex */
externC void cyg_mutex_init(
cyg_mutex_t *mutex /* Mutex to init */
) __THROW
{
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 ) __THROW
{
((Cyg_Mutex *)mutex)->~Cyg_Mutex();
}
externC cyg_bool_t cyg_mutex_lock( cyg_mutex_t *mutex ) __THROW
{
return ((Cyg_Mutex *)mutex)->lock();
}
externC cyg_bool_t cyg_mutex_trylock( cyg_mutex_t *mutex ) __THROW
{
return ((Cyg_Mutex *)mutex)->trylock();
}
externC void cyg_mutex_unlock( cyg_mutex_t *mutex ) __THROW
{
((Cyg_Mutex *)mutex)->unlock();
}
externC void cyg_mutex_release( cyg_mutex_t *mutex ) __THROW
{
((Cyg_Mutex *)mutex)->release();
}
#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING
externC void cyg_mutex_set_ceiling(
cyg_mutex_t *mutex,
cyg_priority_t priority ) __THROW
{
((Cyg_Mutex *)mutex)->set_ceiling(priority);
}
#endif
#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC
externC void cyg_mutex_set_protocol(
cyg_mutex_t *mutex,
enum cyg_mutex_protocol protocol ) __THROW
{
((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 */
) __THROW
{
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 ) __THROW
{
((Cyg_Condition_Variable *)cond)->~Cyg_Condition_Variable();
}
externC cyg_bool_t cyg_cond_wait( cyg_cond_t *cond ) __THROW
{
return ((Cyg_Condition_Variable *)cond)->wait();
}
externC void cyg_cond_signal( cyg_cond_t *cond ) __THROW
{
((Cyg_Condition_Variable *)cond)->signal();
}
externC void cyg_cond_broadcast( cyg_cond_t *cond ) __THROW
{
((Cyg_Condition_Variable *)cond)->broadcast();
}
#ifdef CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT
externC cyg_bool_t cyg_cond_timed_wait(
cyg_cond_t *cond,
cyg_tick_count_t abstime
) __THROW
{
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 */
) __THROW
{
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 ) __THROW
{
((Cyg_SpinLock *)lock)->~Cyg_SpinLock();
}
externC void cyg_spinlock_spin( cyg_spinlock_t *lock ) __THROW
{
((Cyg_SpinLock *)lock)->spin();
}
externC void cyg_spinlock_clear( cyg_spinlock_t *lock ) __THROW
{
((Cyg_SpinLock *)lock)->clear();
}
externC cyg_bool_t cyg_spinlock_try( cyg_spinlock_t *lock ) __THROW
{
return ((Cyg_SpinLock *)lock)->trylock();
}
externC cyg_bool_t cyg_spinlock_test( cyg_spinlock_t *lock ) __THROW
{
return ((Cyg_SpinLock *)lock)->test();
}
externC void cyg_spinlock_spin_intsave( cyg_spinlock_t *lock,
cyg_addrword_t *istate ) __THROW
{
((Cyg_SpinLock *)lock)->spin_intsave((CYG_INTERRUPT_STATE *)istate);
}
externC void cyg_spinlock_clear_intsave( cyg_spinlock_t *lock,
cyg_addrword_t istate ) __THROW
{
((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_DEBUG
class Cyg_Check_Structure_Sizes
{
int dummy;
public:
Cyg_Check_Structure_Sizes( int x ) __THROW;
};
#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) __THROW
{
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 + -