⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kapi.cxx

📁 ecos实时嵌入式操作系统
💻 CXX
📖 第 1 页 / 共 3 页
字号:
}/*---------------------------------------------------------------------------*//* 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 + -