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

📄 kapidata.h

📁 ecos为实时嵌入式操作系统
💻 H
字号:
#ifndef CYGONCE_KERNEL_KAPIDATA_H#define CYGONCE_KERNEL_KAPIDATA_H/*=============================================================================////      kapidata.h////      Native API data structures////==========================================================================//####COPYRIGHTBEGIN####//// -------------------------------------------// The contents of this file are subject to the Cygnus eCos Public License// Version 1.0 (the "License"); you may not use this file except in// compliance with the License.  You may obtain a copy of the License at// http://sourceware.cygnus.com/ecos// // Software distributed under the License is distributed on an "AS IS"// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the// License for the specific language governing rights and limitations under// the License.// // The Original Code is eCos - Embedded Cygnus Operating System, released// September 30, 1998.// // The Initial Developer of the Original Code is Cygnus.  Portions created// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.// -------------------------------------------////####COPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):   nickg// Contributors:        nickg// Date:        1998-03-13// Purpose:     Native API data structures// Description: This file defines the structures used in the native API. The//              sizes of these structures are dependent on the system//              configuration and must be kept in step with their real//              counterparts in the C++ headers.// Usage:       included by kapi.h////####DESCRIPTIONEND####////==========================================================================*/#include <pkgconf/kernel.h>#include <cyg/infra/cyg_type.h>#include <cyg/hal/hal_intr.h>           // exception defines/*---------------------------------------------------------------------------*/#ifdef __cplusplusextern "C" {#endif/*---------------------------------------------------------------------------*/#ifndef CYGNUM_KERNEL_SCHED_BITMAP_SIZE#if defined(CYGSEM_KERNEL_SCHED_MLQUEUE)#define CYGNUM_KERNEL_SCHED_BITMAP_SIZE 32#elif defined(CYGSEM_KERNEL_SCHED_BITMAP)#define CYGNUM_KERNEL_SCHED_BITMAP_SIZE 32#endif#endif#if CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 8typedef cyg_ucount8 cyg_sched_bitmap;#elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 16typedef cyg_ucount16 cyg_sched_bitmap;#elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 32typedef cyg_ucount32 cyg_sched_bitmap;#elif CYGNUM_KERNEL_SCHED_BITMAP_SIZE <= 64typedef cyg_ucount64 cyg_sched_bitmap;#else#error Bitmaps greater than 64 bits not currently allowed#endiftypedef struct {#if defined(CYGSEM_KERNEL_SCHED_BITMAP)    cyg_sched_bitmap map;    #elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)    cyg_thread *queue;#elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)    cyg_thread *queue;#else#error Undefined scheduler type    #endif    } cyg_threadqueue;    /*---------------------------------------------------------------------------*/struct cyg_interrupt{    cyg_vector_t        vector;    cyg_priority_t      priority;    cyg_ISR_t           *isr;    cyg_DSR_t           *dsr;    CYG_ADDRWORD        data;#ifdef CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST    cyg_ucount32        dsr_count;    cyg_interrupt       *next_dsr;#endif#ifdef CYGIMP_KERNEL_INTERRUPTS_CHAIN    cyg_interrupt       *next;#endif};/*---------------------------------------------------------------------------*/struct cyg_counter{#if defined(CYGIMP_KERNEL_COUNTERS_SINGLE_LIST)    cyg_alarm           *alarm_list;#elif defined(CYGIMP_KERNEL_COUNTERS_MULTI_LIST)    cyg_alarm           *alarm_list[CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE];#endif    cyg_tick_count_t    counter;    cyg_uint32          increment;};/*---------------------------------------------------------------------------*/struct cyg_clock{    cyg_counter         counter;    cyg_resolution_t    resolution;};/*---------------------------------------------------------------------------*/struct cyg_alarm{#if defined(CYGIMP_KERNEL_COUNTERS_SINGLE_LIST) || defined(CYGIMP_KERNEL_COUNTERS_MULTI_LIST)    cyg_alarm           *next;    #endif    cyg_counter         *counter;    cyg_alarm_t         *alarm;    CYG_ADDRWORD        data;    cyg_tick_count_t    trigger;    cyg_tick_count_t    interval;    cyg_bool            enabled;};/*---------------------------------------------------------------------------*//* Exception controller                                                      */#ifdef CYGPKG_KERNEL_EXCEPTIONStypedef struct{#ifdef CYGSEM_KERNEL_EXCEPTIONS_DECODE    cyg_exception_handler_t *exception_handler[CYGNUM_HAL_EXCEPTION_COUNT];        CYG_ADDRWORD            exception_data[CYGNUM_HAL_EXCEPTION_COUNT];#else    cyg_exception_handler_t *exception_handler; // Handler function        CYG_ADDRWORD            exception_data;     // Handler data#endif    } cyg_exception_control;#endif/*---------------------------------------------------------------------------*//* Thread structure                                                          */typedef struct{    CYG_ADDRESS         stack_base;     /* pointer to base of stack area */    cyg_uint32          stack_size;     /* size of stack area in bytes */#ifdef CYGFUN_KERNEL_THREADS_STACK_LIMIT    CYG_ADDRESS         stack_limit;    /* movable stack limit */#endif        CYG_ADDRESS         stack_ptr;      /* pointer to saved state on stack */    CYG_ADDRWORD        entry_point;    /* main entry point (code pointer!) */    CYG_ADDRWORD        entry_data;     /* entry point argument */#ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT    void                *saved_context; // If non-zero, this points at a more                                        // interesting context than stack_ptr.#endif    } cyg_hardwarethread;    typedef struct {#if defined(CYGSEM_KERNEL_SCHED_BITMAP)    cyg_priority_t      priority;       /* current thread priority */    #elif defined(CYGSEM_KERNEL_SCHED_MLQUEUE)    cyg_thread *next;    cyg_thread *prev;    cyg_priority_t      priority;       /* current thread priority */    #elif defined(CYGSEM_KERNEL_SCHED_LOTTERY)    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        cyg_threadqueue     *queue;#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE    cyg_count32         mutex_count;#ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE    cyg_priority_t      original_priority;    cyg_bool            priority_inherited;#endif#endif} cyg_schedthread;typedef struct {    cyg_alarm           alarm;    cyg_thread          *thread;} cyg_threadtimer;typedef int cyg_reason_t; /* cyg_reason is originally an enum */struct cyg_thread{    cyg_hardwarethread  hwthread;    cyg_schedthread     schedthread;    cyg_uint32                  state;          cyg_ucount32                suspend_count;    cyg_ucount32                wakeup_count;    CYG_ADDRWORD                wait_info;    cyg_uint16                  unique_id;    #if defined(CYGPKG_KERNEL_EXCEPTIONS) && !defined(CYGSEM_KERNEL_EXCEPTIONS_GLOBAL)        cyg_exception_control       exception_control;#endif#ifdef CYGFUN_KERNEL_THREADS_TIMER    cyg_threadtimer     timer;#endif    cyg_reason_t        sleep_reason;    cyg_reason_t        wake_reason;#ifdef CYGVAR_KERNEL_THREADS_DATA    CYG_ADDRWORD        thread_data[CYGNUM_KERNEL_THREADS_DATA_MAX];#endif#ifdef CYGVAR_KERNEL_THREADS_NAME    char                *name;#endif#ifdef CYGVAR_KERNEL_THREADS_LIST    cyg_thread          *list_next;    #endif    };/*---------------------------------------------------------------------------*/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     */    };/*---------------------------------------------------------------------------*/struct cyg_mutex_t{    cyg_bool            locked;         /* true if locked               */    cyg_thread          *owner;         /* Current locking thread       */    cyg_threadqueue     queue;          /* Queue of waiting threads     */    };/*---------------------------------------------------------------------------*/struct cyg_cond_t{    cyg_mutex_t         *mutex;         /* Associated mutex             */    cyg_threadqueue     queue;          /* Queue of waiting threads     */};/*---------------------------------------------------------------------------*//* This corresponds to the extra fields provided by the mempoolt template   not the actual size of the template in any given instance. */typedef struct cyg_mempoolt {    cyg_threadqueue queue;} cyg_mempoolt;struct cyg_mempool_var_memdq {    struct cyg_mempool_var_memdq *prev, *next;    cyg_int32 size;};struct cyg_mempool_var {    struct cyg_mempool_var_memdq head;    cyg_uint8  *obase;    cyg_int32  osize;    cyg_int32  oalign;    cyg_uint8  *bottom;    cyg_uint8  *top;    cyg_int32  alignment;    cyg_int32  freemem;    cyg_mempoolt mempoolt;};struct cyg_mempool_fix {    cyg_uint32 *bitmap;    cyg_int32 maptop;    cyg_uint8  *mempool;    cyg_int32 numblocks;    cyg_int32 freeblocks;    cyg_int32 blocksize;    cyg_int32 firstfree;    cyg_uint8  *top;    cyg_mempoolt mempoolt;};/*------------------------------------------------------------------------*/#ifdef __cplusplus}#endif/*---------------------------------------------------------------------------*//* EOF kapidata.h                                                            */#endif /* CYGONCE_KERNEL_KAPIDATA_H */

⌨️ 快捷键说明

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