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

📄 kapidata.h

📁 ecos实时嵌入式操作系统
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifdef CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE# define CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER \    cyg_bool            timeslice_enabled; /* per-thread timeslice enable */#else# define CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER#endif#if defined(CYGSEM_KERNEL_SCHED_BITMAP)# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS \    cyg_priority_t      priority;       /* current thread priority */#elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS                                    \    cyg_thread *next;                                                        \    cyg_thread *prev;                                                        \    cyg_priority_t      priority;             /* current thread priority */  \    CYG_SCHEDTHREAD_CPU_MEMBER                                               \    CYG_SCHEDTHREAD_TIMESLICE_ENABLED_MEMBER#elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)# define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS                                    \    cyg_thread *next;                                                        \    cyg_thread *prev;                                                        \    cyg_priority_t      priority;             /* current thread priority */  \    cyg_priority_t      compensation_tickets; /* sleep compensation */#else# error Undefined scheduler type#endif    #ifndef CYGSEM_KERNEL_SCHED_ASR_GLOBAL#  define CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER \    void              (*asr)(CYG_ADDRWORD);   // ASR function#else#  define CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER#endif#ifndef CYGSEM_KERNEL_SCHED_ASR_DATA_GLOBAL#  define CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER \    CYG_ADDRWORD        asr_data;       // ASR data pointer#else#  define CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER#endif#ifdef CYGSEM_KERNEL_SCHED_ASR_SUPPORT# define CYG_SCHEDTHREAD_ASR_MEMBER                                         \    volatile cyg_ucount32 asr_inhibit; /* If true, blocks calls to ASRs */  \    volatile cyg_bool     asr_pending; /* If true, this thread's ASR    */  \                                       /* should be called. */              \    CYG_SCHEDTHREAD_ASR_NONGLOBAL_MEMBER                                    \    CYG_SCHEDTHREAD_ASR_DATA_NONGLOBAL_MEMBER                             #else# define CYG_SCHEDTHREAD_ASR_MEMBER#endif#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_SIMPLE# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS \    cyg_priority_t      original_priority;              \    cyg_bool            priority_inherited;#else# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS#endif#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS   \    cyg_count32         mutex_count;               \    CYG_SCHEDTHREAD_MUTEX_INV_PROTO_SIMPLE_MEMBERS#else# define CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS#endif#define CYG_SCHEDTHREAD_MEMBERS               \    CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS          \    cyg_threadqueue     *queue;               \    CYG_SCHEDTHREAD_ASR_MEMBER                \    CYG_SCHEDTHREAD_MUTEX_INV_PROTO_MEMBERS    typedef struct {    CYG_SCHEDTHREAD_MEMBERS} cyg_schedthread;/* This compiler version test is required because the C++ ABI changed in   GCC v3.x and GCC could now reuse "spare" space from base classes in derived   classes, and in C++ land, cyg_alarm is a base class of cyg_threadtimer.*/#if defined(__GNUC__) && (__GNUC__ < 3)#define CYG_THREADTIMER_MEMBERS \    cyg_alarm           alarm;  \    cyg_thread          *thread;#else#define CYG_THREADTIMER_MEMBERS \    CYG_ALARM_MEMBERS           \    cyg_thread          *thread;#endif/*---------------------------------------------------------------------------*//* Thread structure                                                          */typedef struct {    CYG_THREADTIMER_MEMBERS} cyg_threadtimer;typedef enum{    CYG_REASON_NONE,    CYG_REASON_WAIT,    CYG_REASON_DELAY,    CYG_REASON_TIMEOUT,    CYG_REASON_BREAK,    CYG_REASON_DESTRUCT,    CYG_REASON_EXIT,    CYG_REASON_DONE} cyg_reason_t;#if defined(CYGPKG_KERNEL_EXCEPTIONS) && !defined(CYGSEM_KERNEL_EXCEPTIONS_GLOBAL)# define CYG_THREAD_EXCEPTION_CONTROL_MEMBER \    cyg_exception_control       exception_control;#else# define CYG_THREAD_EXCEPTION_CONTROL_MEMBER#endif#ifdef CYGFUN_KERNEL_THREADS_TIMER# define CYG_THREAD_TIMER_MEMBER \    cyg_threadtimer     timer;#else# define CYG_THREAD_TIMER_MEMBER#endif#ifdef CYGVAR_KERNEL_THREADS_DATA# define CYG_THREAD_THREAD_DATA_MEMBER \    CYG_ADDRWORD        thread_data[CYGNUM_KERNEL_THREADS_DATA_MAX];#else# define CYG_THREAD_THREAD_DATA_MEMBER#endif#ifdef CYGVAR_KERNEL_THREADS_NAME# define CYG_THREAD_NAME_MEMBER \    char                *name;#else# define CYG_THREAD_NAME_MEMBER#endif#ifdef CYGVAR_KERNEL_THREADS_LIST# define CYG_THREAD_LIST_NEXT_MEMBER \    cyg_thread          *list_next;#else# define CYG_THREAD_LIST_NEXT_MEMBER#endif#ifdef CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREADstruct Cyg_Destructor_Entry {    cyg_thread_destructor_fn fn;    cyg_addrword_t data;};# define CYG_THREAD_DESTRUCTORS_MEMBER \   struct Cyg_Destructor_Entry destructors[ CYGNUM_KERNEL_THREADS_DESTRUCTORS ];#else# define CYG_THREAD_DESTRUCTORS_MEMBER#endif#define CYG_THREAD_MEMBERS                        \    CYG_HARDWARETHREAD_MEMBERS                    \    CYG_SCHEDTHREAD_MEMBERS                       \                                                  \    cyg_uint32                  state;            \    cyg_ucount32                suspend_count;    \    cyg_ucount32                wakeup_count;     \    CYG_ADDRWORD                wait_info;        \    cyg_uint16                  unique_id;        \                                                  \    CYG_THREAD_EXCEPTION_CONTROL_MEMBER           \    CYG_THREAD_TIMER_MEMBER                       \                                                  \    cyg_reason_t        sleep_reason;             \    cyg_reason_t        wake_reason;              \                                                  \    CYG_THREAD_THREAD_DATA_MEMBER                 \    CYG_THREAD_DESTRUCTORS_MEMBER                 \    CYG_THREAD_NAME_MEMBER                        \    CYG_THREAD_LIST_NEXT_MEMBER                   struct cyg_thread{    CYG_THREAD_MEMBERS};/*---------------------------------------------------------------------------*/struct cyg_mbox{    cyg_count32         base;           /* index of first used slot          */    cyg_count32         count;          /* count of used slots               */    cyg_threadqueue     get_threadq;    /* Queue of waiting threads          */#ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT    cyg_threadqueue     put_threadq;    /* Queue of waiting threads          */#endif    void *              itemqueue[ CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE ];};/*---------------------------------------------------------------------------*/struct cyg_sem_t{    cyg_count32         count;          /* The semaphore count          */    cyg_threadqueue     queue;          /* Queue of waiting threads     */    };/*---------------------------------------------------------------------------*/struct cyg_flag_t{    cyg_flag_value_t    value;          /* The flag value               */    cyg_threadqueue     queue;          /* Queue of waiting threads     */    };/*---------------------------------------------------------------------------*/typedef enum{    CYG_MUTEX_PROTOCOL_NONE,    CYG_MUTEX_PROTOCOL_INHERIT,    CYG_MUTEX_PROTOCOL_CEILING} cyg_mutex_protocol_t;struct cyg_mutex_t{    cyg_atomic          locked;         /* true if locked               */    cyg_thread          *owner;         /* Current locking thread       */    cyg_threadqueue     queue;          /* Queue of waiting threads     */#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC    cyg_mutex_protocol_t protocol;       /* this mutex's protocol        */#endif    #ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING    cyg_priority_t      ceiling;        /* mutex priority ceiling       */#endif    };/*---------------------------------------------------------------------------*/struct cyg_cond_t{    cyg_mutex_t         *mutex;         /* Associated mutex             */    cyg_threadqueue     queue;          /* Queue of waiting threads     */};/*------------------------------------------------------------------------*/struct cyg_spinlock_t{    cyg_uint32          lock;           /* lock word                     */};/*------------------------------------------------------------------------*//* Memory allocator types now come from the "memalloc" package which is   *//* where the implementation lives.                                        */#ifdef CYGPKG_MEMALLOC# include <cyg/memalloc/kapidata.h>#endif#ifdef __cplusplus}#endif/*---------------------------------------------------------------------------*//* EOF kapidata.h                                                            */#endif /* CYGONCE_KERNEL_KAPIDATA_H */

⌨️ 快捷键说明

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