📄 kapidata.h
字号:
#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 + -