📄 kapi.cxx
字号:
}/*---------------------------------------------------------------------------*//* Per-thread data */#ifdef CYGVAR_KERNEL_THREADS_DATAexternC cyg_ucount32 cyg_thread_new_data_index(){ Cyg_Thread::cyg_data_index index = Cyg_Thread::new_data_index(); CYG_ASSERT(index >= 0, "failed to allocate data index" ); return index;}externC void cyg_thread_free_data_index(cyg_ucount32 index){ Cyg_Thread::free_data_index(index);}externC CYG_ADDRWORD cyg_thread_get_data(cyg_ucount32 index){ return Cyg_Thread::get_data(index);}externC CYG_ADDRWORD *cyg_thread_get_data_ptr(cyg_ucount32 index){ return Cyg_Thread::get_data_ptr(index);}externC void cyg_thread_set_data(cyg_ucount32 index, CYG_ADDRWORD data){ Cyg_Thread::self()->set_data(index, data);}#endif/*---------------------------------------------------------------------------*//* Thread destructors */#ifdef CYGPKG_KERNEL_THREADS_DESTRUCTORS__externC cyg_bool_tcyg_thread_add_destructor( cyg_thread_destructor_fn fn, cyg_addrword_t data ){ return Cyg_Thread::self()->add_destructor( fn, data );}__externC cyg_bool_tcyg_thread_rem_destructor( cyg_thread_destructor_fn fn, cyg_addrword_t data ){ return Cyg_Thread::self()->rem_destructor( fn, data );}#endif/*---------------------------------------------------------------------------*//* Exception handling. */#ifdef CYGPKG_KERNEL_EXCEPTIONS externC void cyg_exception_set_handler( cyg_code_t exception_number, cyg_exception_handler_t *new_handler, cyg_addrword_t new_data, cyg_exception_handler_t **old_handler, cyg_addrword_t *old_data){ Cyg_Thread::register_exception( exception_number, (cyg_exception_handler *)new_handler, (CYG_ADDRWORD)new_data, (cyg_exception_handler **)old_handler, (CYG_ADDRWORD *)old_data );}/* Clear exception handler to default */externC void cyg_exception_clear_handler( cyg_code_t exception_number){ Cyg_Thread::deregister_exception( exception_number );}/* Invoke exception handler */externC void cyg_exception_call_handler( cyg_handle_t thread, cyg_code_t exception_number, cyg_addrword_t error_code){ Cyg_Thread *t = (Cyg_Thread *)thread; t->deliver_exception( exception_number, error_code );}#endif /*---------------------------------------------------------------------------*//* Interrupt handling */externC void cyg_interrupt_create( cyg_vector_t vector, /* Vector to attach to */ cyg_priority_t priority, /* Queue priority */ cyg_addrword_t data, /* Data pointer */ cyg_ISR_t *isr, /* Interrupt Service Routine */ cyg_DSR_t *dsr, /* Deferred Service Routine */ cyg_handle_t *handle, /* returned handle */ cyg_interrupt *intr /* put interrupt here */){ CYG_ASSERT_SIZES( cyg_interrupt, Cyg_Interrupt ); Cyg_Interrupt *t = new((void *)intr) Cyg_Interrupt ( (cyg_vector)vector, (cyg_priority)priority, (CYG_ADDRWORD)data, (cyg_ISR *)isr, (cyg_DSR *)dsr ); t=t; CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" ); *handle = (cyg_handle_t)intr;}externC void cyg_interrupt_delete( cyg_handle_t interrupt){ ((Cyg_Interrupt *)interrupt)->~Cyg_Interrupt();}void cyg_interrupt_attach( cyg_handle_t interrupt ){ ((Cyg_Interrupt *)interrupt)->attach();}void cyg_interrupt_detach( cyg_handle_t interrupt ){ ((Cyg_Interrupt *)interrupt)->detach();}/* VSR manipulation */externC void cyg_interrupt_get_vsr( cyg_vector_t vector, /* vector to get */ cyg_VSR_t **vsr /* vsr got */){ Cyg_Interrupt::get_vsr( (cyg_vector)vector, (cyg_VSR **)vsr);}externC void cyg_interrupt_set_vsr( cyg_vector_t vector, /* vector to set */ cyg_VSR_t *vsr /* vsr to set */){ Cyg_Interrupt::set_vsr( (cyg_vector)vector, (cyg_VSR *)vsr);}/* 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_mask_intunsafe(cyg_vector_t vector){ Cyg_Interrupt::mask_interrupt_intunsafe( (cyg_vector)vector);}externC void cyg_interrupt_unmask(cyg_vector_t vector){ Cyg_Interrupt::unmask_interrupt( (cyg_vector)vector);}externC void cyg_interrupt_unmask_intunsafe(cyg_vector_t vector){ Cyg_Interrupt::unmask_interrupt_intunsafe( (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 );}externC void cyg_interrupt_set_cpu( cyg_vector_t vector, /* vector to control */ cyg_cpu_t cpu /* CPU to set */){#ifdef CYGPKG_KERNEL_SMP_SUPPORT Cyg_Interrupt::set_cpu( vector, cpu );#endif }externC cyg_cpu_t cyg_interrupt_get_cpu( cyg_vector_t vector /* vector to control */){#ifdef CYGPKG_KERNEL_SMP_SUPPORT return Cyg_Interrupt::get_cpu( vector );#else return CYG_KERNEL_CPU_THIS();#endif }/*---------------------------------------------------------------------------*//* 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(); }/* Advance counter by multiple ticks */externC void cyg_counter_multi_tick(cyg_handle_t counter, cyg_tick_count_t ticks){ ((Cyg_Counter *)counter)->tick(ticks); }/* 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_get_times( cyg_handle_t alarm, cyg_tick_count_t *trigger, /* Next trigger time */ cyg_tick_count_t *interval /* Current interval */){ ((Cyg_Alarm *)alarm)->get_times( (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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -