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

📄 thread.inl

📁 ecos实时嵌入式操作系统
💻 INL
📖 第 1 页 / 共 2 页
字号:
// -------------------------------------------------------------------------// Allocate some memory at the lower end of the stack// by moving the stack limit pointer.#ifdef CYGFUN_KERNEL_THREADS_STACK_LIMIT#ifndef CYGFUN_KERNEL_THREADS_STACK_CHECKING// if stack checking, implementation is in thread.cxxinline void *Cyg_HardwareThread::increment_stack_limit( cyg_ucount32 size ){    void *ret = (void *)stack_limit;    stack_limit += size;    return ret;}#endif    inline CYG_ADDRESSCyg_HardwareThread::get_stack_limit(){    return stack_limit;}#endif    //==========================================================================// Inlines for Cyg_Thread classinline Cyg_Thread *Cyg_Thread::self(){    return Cyg_Scheduler::get_current_thread();}// -------------------------------------------------------------------------inline void Cyg_Thread::yield(){    self()->Cyg_SchedThread::yield();}// -------------------------------------------------------------------------inline voidCyg_Thread::rotate_queue( cyg_priority pri ){    self()->Cyg_SchedThread::rotate_queue( pri );}// -------------------------------------------------------------------------inline voidCyg_Thread::to_queue_head( void ){    this->Cyg_SchedThread::to_queue_head();}// -------------------------------------------------------------------------#ifdef CYGIMP_THREAD_PRIORITYinline cyg_priority Cyg_Thread::get_priority(){#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_SIMPLE    // If we have an inherited priority, return our original    // priority rather than the current one.        if( priority_inherited ) return original_priority;#endif    return priority;}// Return the actual dispatching priority of the thread// regardless of inheritance or scheduling concerns.inline cyg_priority Cyg_Thread::get_current_priority(){    return priority;}#endif// -------------------------------------------------------------------------inline void Cyg_Thread::set_sleep_reason( cyg_reason reason){    self()->sleep_reason = reason;    self()->wake_reason = NONE;}// -------------------------------------------------------------------------inline Cyg_Thread::cyg_reason Cyg_Thread::get_sleep_reason(){    return sleep_reason;}// -------------------------------------------------------------------------inline void Cyg_Thread::set_wake_reason( cyg_reason reason ){    sleep_reason = NONE;    wake_reason = reason;}// -------------------------------------------------------------------------inline Cyg_Thread::cyg_reason Cyg_Thread::get_wake_reason(){    return wake_reason;}// -------------------------------------------------------------------------inline void Cyg_Thread::set_timer(    cyg_tick_count      trigger,    cyg_reason          reason){#ifdef CYGFUN_KERNEL_THREADS_TIMER    self()->sleep_reason = reason;    self()->wake_reason = NONE;    self()->timer.initialize( trigger);#endif}// -------------------------------------------------------------------------inline void Cyg_Thread::clear_timer(){#ifdef CYGFUN_KERNEL_THREADS_TIMER    self()->timer.disable();#endif}// -------------------------------------------------------------------------#ifdef CYGVAR_KERNEL_THREADS_DATAinline CYG_ADDRWORD Cyg_Thread::get_data( Cyg_Thread::cyg_data_index index ){    CYG_ASSERT( index < CYGNUM_KERNEL_THREADS_DATA_MAX,                "Per thread data index out of bounds");    CYG_ASSERT( (thread_data_map & (1<<index)) == 0,                "Unallocated index used");        return self()->thread_data[index];}inline CYG_ADDRWORD *Cyg_Thread::get_data_ptr( Cyg_Thread::cyg_data_index index ){    CYG_ASSERT( index < CYGNUM_KERNEL_THREADS_DATA_MAX,                "Per thread data index out of bounds");    CYG_ASSERT( (thread_data_map & (1<<index)) == 0,                "Unallocated index used");        return &(self()->thread_data[index]);}inline void Cyg_Thread::set_data( Cyg_Thread::cyg_data_index index,                                  CYG_ADDRWORD data ){    CYG_ASSERT( index < CYGNUM_KERNEL_THREADS_DATA_MAX,                "Per thread data index out of bounds");    CYG_ASSERT( (thread_data_map & (1<<index)) == 0,                "Unallocated index used");    thread_data[index] = data;}#endif// -------------------------------------------------------------------------#ifdef CYGPKG_KERNEL_THREADS_DESTRUCTORS// Add and remove destructors. Returns true on success, false on failure.inline cyg_boolCyg_Thread::add_destructor( destructor_fn fn, CYG_ADDRWORD data ){    cyg_ucount16 i;#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD    Cyg_Scheduler::lock();#endif    for (i=0; i<CYGNUM_KERNEL_THREADS_DESTRUCTORS; i++) {        if (NULL == destructors[i].fn) {            destructors[i].data = data;            destructors[i].fn = fn;#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD            Cyg_Scheduler::unlock();#endif            return true;        }    }#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD    Cyg_Scheduler::unlock();#endif    return false;}inline cyg_boolCyg_Thread::rem_destructor( destructor_fn fn, CYG_ADDRWORD data ){    cyg_ucount16 i;#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD    Cyg_Scheduler::lock();#endif    for (i=0; i<CYGNUM_KERNEL_THREADS_DESTRUCTORS; i++) {        if (destructors[i].fn == fn && destructors[i].data == data) {            destructors[i].fn = NULL;#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD            Cyg_Scheduler::unlock();#endif            return true;        }    }#ifndef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD    Cyg_Scheduler::unlock();#endif    return false;}#endif// -------------------------------------------------------------------------#ifdef CYGVAR_KERNEL_THREADS_NAMEinline char *Cyg_Thread::get_name(){    return name;}#endif// -------------------------------------------------------------------------#ifdef CYGVAR_KERNEL_THREADS_LISTinline Cyg_Thread *Cyg_Thread::get_list_head(){    return thread_list?thread_list->list_next:0;}    inline Cyg_Thread *Cyg_Thread::get_list_next(){    return (this==thread_list)?0:list_next;}#endif// -------------------------------------------------------------------------#ifdef CYGPKG_KERNEL_EXCEPTIONSinline void Cyg_Thread::register_exception(    cyg_code                exception_number,       // exception number    cyg_exception_handler   handler,                // handler function    CYG_ADDRWORD            data,                   // data argument    cyg_exception_handler   **old_handler,          // handler function    CYG_ADDRWORD            *old_data               // data argument    ){    self()->exception_control.register_exception(        exception_number,        handler,        data,        old_handler,        old_data        );}inline void Cyg_Thread::deregister_exception(    cyg_code                exception_number        // exception number    ){    self()->exception_control.deregister_exception(        exception_number        );}#endif//==========================================================================// Inlines for Cyg_ThreadTimer class// -------------------------------------------------------------------------#if defined(CYGFUN_KERNEL_THREADS_TIMER) && defined(CYGVAR_KERNEL_COUNTERS_CLOCK)inline Cyg_ThreadTimer::Cyg_ThreadTimer(    Cyg_Thread  *th    )    : Cyg_Alarm(Cyg_Clock::real_time_clock,                &alarm,                CYG_ADDRWORD(this)                ){    thread = th;}#endif//==========================================================================// Inlines for Cyg_ThreadQueue classinline void Cyg_ThreadQueue::enqueue(Cyg_Thread *thread){    Cyg_ThreadQueue_Implementation::enqueue(thread);}// -------------------------------------------------------------------------inline Cyg_Thread *Cyg_ThreadQueue::highpri(){    return Cyg_ThreadQueue_Implementation::highpri();}// -------------------------------------------------------------------------inline Cyg_Thread *Cyg_ThreadQueue::dequeue(){    return Cyg_ThreadQueue_Implementation::dequeue();}// -------------------------------------------------------------------------inline void Cyg_ThreadQueue::remove(Cyg_Thread *thread){    Cyg_ThreadQueue_Implementation::remove(thread);}// -------------------------------------------------------------------------inline cyg_bool Cyg_ThreadQueue::empty(){    return Cyg_ThreadQueue_Implementation::empty();}// -------------------------------------------------------------------------#endif // ifndef CYGONCE_KERNEL_THREAD_INL// EOF thread.inl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -