📄 kapi.cxx
字号:
/* CPU level interrupt mask */externC void cyg_interrupt_disable(){ Cyg_Interrupt::disable_interrupts();}externC void cyg_interrupt_enable(){ Cyg_Interrupt::enable_interrupts();}/* Interrupt controller access */externC void cyg_interrupt_mask(cyg_vector_t vector){ Cyg_Interrupt::mask_interrupt( (cyg_vector)vector);}externC void cyg_interrupt_unmask(cyg_vector_t vector){ Cyg_Interrupt::unmask_interrupt( (cyg_vector)vector);}externC void cyg_interrupt_acknowledge(cyg_vector_t vector){ Cyg_Interrupt::acknowledge_interrupt( (cyg_vector)vector);}externC void cyg_interrupt_configure( cyg_vector_t vector, /* vector to configure */ cyg_bool_t level, /* level or edge triggered */ cyg_bool_t up /* rising/faling edge, high/low level*/){ Cyg_Interrupt::configure_interrupt( (cyg_vector)vector, level, up );}/*---------------------------------------------------------------------------*//* Counters, Clocks and Alarms */externC void cyg_counter_create( cyg_handle_t *handle, /* returned counter handle */ cyg_counter *counter /* put counter here */){ CYG_ASSERT_SIZES( cyg_counter, Cyg_Counter ); Cyg_Counter *t = new((void *)counter) Cyg_Counter (); t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)counter;}externC void cyg_counter_delete(cyg_handle_t counter){ ((Cyg_Counter *)counter)->~Cyg_Counter();}/* Return current value of counter */externC cyg_tick_count_t cyg_counter_current_value(cyg_handle_t counter){ return ((Cyg_Counter *)counter)->current_value();}/* Set new current value */externC void cyg_counter_set_value( cyg_handle_t counter, cyg_tick_count_t new_value){ ((Cyg_Counter *)counter)->set_value( new_value );}/* Advance counter by one tick */externC void cyg_counter_tick(cyg_handle_t counter){ ((Cyg_Counter *)counter)->tick(); }/* Create a clock object */externC void cyg_clock_create( cyg_resolution_t resolution, /* Initial resolution */ cyg_handle_t *handle, /* Returned clock handle */ cyg_clock *clock /* put clock here */){ CYG_ASSERT_SIZES( cyg_clock, Cyg_Clock ); Cyg_Clock::cyg_resolution res; res.dividend = resolution.dividend; res.divisor = resolution.divisor; Cyg_Clock *t = new((void *)clock) Cyg_Clock ( res ); t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)clock;}externC void cyg_clock_delete(cyg_handle_t clock){ ((Cyg_Clock *)clock)->~Cyg_Clock();}/* convert a clock handle to a counter handle so we can use the *//* counter API on it. */externC void cyg_clock_to_counter( cyg_handle_t clock, cyg_handle_t *counter){ CYG_CHECK_DATA_PTR( counter, "Bad counter handle pointer" ); *counter = (cyg_handle_t)(Cyg_Counter *)clock;}externC void cyg_clock_set_resolution( cyg_handle_t clock, cyg_resolution_t resolution /* New resolution */){ Cyg_Clock::cyg_resolution res; res.dividend = resolution.dividend; res.divisor = resolution.divisor; ((Cyg_Clock *)clock)->set_resolution( res );}externC cyg_resolution_t cyg_clock_get_resolution(cyg_handle_t clock){ Cyg_Clock::cyg_resolution res = ((Cyg_Clock *)clock)->get_resolution(); cyg_resolution_t resolution; resolution.dividend = res.dividend; resolution.divisor = res.divisor; return resolution;}#ifdef CYGVAR_KERNEL_COUNTERS_CLOCKexternC cyg_handle_t cyg_real_time_clock(void){ return (cyg_handle_t)Cyg_Clock::real_time_clock;}externC cyg_tick_count_t cyg_current_time(void){ return Cyg_Clock::real_time_clock->current_value();}#endifexternC void cyg_alarm_create( cyg_handle_t counter, /* Attached to this counter */ cyg_alarm_t *alarmfn, /* Call-back function */ cyg_addrword_t data, /* Call-back data */ cyg_handle_t *handle, /* Returned alarm object */ cyg_alarm *alarm /* put alarm here */){ CYG_ASSERT_SIZES( cyg_alarm, Cyg_Alarm ); Cyg_Alarm *t = new((void *)alarm) Cyg_Alarm ( (Cyg_Counter *)counter, (cyg_alarm_fn *)alarmfn, (CYG_ADDRWORD)data ); t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)alarm;}/* Disable alarm, detach from counter and invalidate handles */externC void cyg_alarm_delete( cyg_handle_t alarm){ ((Cyg_Alarm *)alarm)->~Cyg_Alarm();}externC void cyg_alarm_initialize( cyg_handle_t alarm, cyg_tick_count_t trigger, /* Absolute trigger time */ cyg_tick_count_t interval /* Relative retrigger interval */){ ((Cyg_Alarm *)alarm)->initialize( (cyg_tick_count)trigger, (cyg_tick_count)interval);}externC void cyg_alarm_enable( cyg_handle_t alarm ){ ((Cyg_Alarm *)alarm)->enable();}externC void cyg_alarm_disable( cyg_handle_t alarm ){ ((Cyg_Alarm *)alarm)->disable();}/*---------------------------------------------------------------------------*//* Mail boxes */externC void cyg_mbox_create( cyg_handle_t *handle, cyg_mbox *mbox){ CYG_ASSERT_SIZES( cyg_mbox, Cyg_Mbox ); 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){ ((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();}/*-----------------------------------------------------------------------*//* Memory pools *//* Create a variable size memory pool */externC void cyg_mempool_var_create( void *base, /* base of memory to use for pool */ cyg_int32 size, /* size of memory in bytes */ cyg_handle_t *handle, /* returned handle of memory pool */ cyg_mempool_var *var /* space to put pool structure in */ ){ CYG_ASSERT_SIZES( cyg_mempool_var, Cyg_Mempool_Variable ); Cyg_Mempool_Variable *t = new((void *)var) Cyg_Mempool_Variable ( (cyg_uint8 *)base, size ); t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)var;}/* Delete variable size memory pool */externC void cyg_mempool_var_delete(cyg_handle_t varpool){ ((Cyg_Mempool_Variable *)varpool)->~Cyg_Mempool_Variable();}/* Allocates a block of length size. This waits if the memory is not currently available. */externC void *cyg_mempool_var_alloc(cyg_handle_t varpool, cyg_int32 size){ return ((Cyg_Mempool_Variable *)varpool)->alloc(size);}#ifdef CYGFUN_KERNEL_THREADS_TIMER/* Allocates a block of length size. This waits for up to delay ticks, if the memory is not already available. NULL is returned if no memory is available. */externC void *cyg_mempool_var_timed_alloc( cyg_handle_t varpool, cyg_int32 size, cyg_tick_count_t abstime){ return ((Cyg_Mempool_Variable *)varpool)->alloc(size, abstime);}#endif/* Allocates a block of length size. NULL is returned if no memory is available. */externC void *cyg_mempool_var_try_alloc( cyg_handle_t varpool, cyg_int32 size){ return ((Cyg_Mempool_Variable *)varpool)->try_alloc(size);}/* Frees memory back into variable size pool. */externC void cyg_mempool_var_free(cyg_handle_t varpool, void *p){ cyg_bool b; b = ((Cyg_Mempool_Variable *)varpool)->free((cyg_uint8 *)p, 0); CYG_ASSERT( b, "Bad free");}/* Returns true if there are any threads waiting for memory in the given memory pool. */externC cyg_bool_t cyg_mempool_var_waiting(cyg_handle_t varpool){ return ((Cyg_Mempool_Variable *)varpool)->waiting();}/* Puts information about a variable memory pool into the structure provided. */externC void cyg_mempool_var_get_info( cyg_handle_t varpool, cyg_mempool_info *info){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -