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

📄 mcclib.h

📁 rtCell 实时微内核-具有下列功能: 1. 完全抢占的实时微内核结构
💻 H
📖 第 1 页 / 共 3 页
字号:
 * cwIDObj:说明对象ID(环形队列消息对象ID或任务对象ID);
 *
 * pAPCFun:APC过程入口指针,用之区分一次性和周期性定时;为NLULL时生成周期性定时器,
 *          cwIDObj须为环形队列消息对象;为非NULL时为一次定时,cwIDObj须为任务对象;
 *
 * pData:  pAPCFun非NULL时为APC过程参数,pAPCFun为NULL时无意义;
 * 返回值为定时器对象标识ID,用于定时器对象相关的系统调用。
 */
extern CWORD _cdecl_ CreateTimer(STR *pTimerName, CWORD cwIDObj, PAPCFUN pAPCFun, void *pData);

/* 连接定时器对象,使之有效,周期性发送发送环形队列消息,或产生任务异步过程调用:
 * cwIDTimer:定时器对象标识ID,
 *
 * dwPeriod:说明定时器触发时间,单位为时间片,
 *
 * 成功后,返回值为TSC_SUCCESS,周期性定时器可用GetRBM、GetRBMTry接受消息msg,
 * msg.dwSize说明超时的周期性定时器对象ID。
 */
extern CWORD _cdecl_ ConnectTimer(CWORD cwIDTimer, DWORD dwPeriod);

/* 断开定时器对象,使之失效,停止发送发送环形队列消息:
 * cwIDTimer:定时器对象标识ID,
 *
 * 成功后,返回值为TSC_SUCCESS,然后可用DeleteObject删除定时器对象。
 */
extern CWORD _cdecl_ UnConnectTimer(CWORD cwIDTimer);

/*
 *******************************************************************************
 *                          获取内核对象信息相关函数                           *
 *******************************************************************************
 */

#define OBJ_ID(n) (((1 << (n)) << 8) + (n))

#define OBJ_TIMER               OBJ_ID(0)
#define OBJ_TASK                OBJ_ID(1)
#define OBJ_SEM                 OBJ_ID(2)
#define OBJ_RBM                 OBJ_ID(3)
#define OBJ_MUTEX               OBJ_ID(4)
#define OBJ_FLAG                OBJ_ID(5)
#define OBJ_MSG                 OBJ_ID(6)
#define OBJ_PROCESS             OBJ_ID(7)

/******************************************************************************/

#define BC_TICK  (6)                 /* bits count for per rr-sch ticks */
#define BM_TICK  ((1 << BC_TICK) -1) /* bits masks for per rr-sch ticks */
#define NR_TICK  (1000)              /* tick's conut of per second mark */

struct _Task_Inf {
    PTROFF   poStackFree; /*task stack size                                  */
    PTROFF   poStackSize; /*task stack size                                  */
    WORD     wdPrio;      /*task dynamic priority                            */
    WORD     wdStaticPrio;/*task static priority                             */
    WORD     wdStat;      /*task current state                               */
    WORD     wdStatEx;    /*task extra current state                         */
    WORD     wdSuspend;   /*task suspend count                               */
    WORD     wdTicks;     /*task current tick count                          */
    DWORD    dwRunTime;   /*total running time                               */
};
typedef struct _Task_Inf TCB_INF;

struct _Mutex_Inf {
    WORD   wdCeilingPrio;
    WORD   wdOwnerID;
};
typedef struct _Mutex_Inf MTX_INF;

struct _Sem_Inf {
    CWORD  cwStat;      /* defult 0      */
    CWORD  cwMaxStat;   
    BOOL   FIFOWait;
};
typedef struct _Sem_Inf SEM_INF;

struct _Message_Inf {
    BOOL     SendFIFOWait;
    BOOL     GetFIFOWait;
    WORD     wdMSGBMP;                  /* message priority bmp        */ 
};
typedef struct _Message_Inf MSG_INF;

struct _Flags_Inf {
    BOOL   FIFOWait;
    CWORD  cwFlag;
};
typedef struct _Flags_Inf FLAG_INF;

struct _RBM_Inf {
    BOOL   FIFOWait;
    WORD   wdCount;
    WORD   wdSize;      /* if 0,invalid */
};
typedef struct _RBM_Inf RBM_INF;

struct _Timer_Inf {
    TIMEOUT  toPeriod;    /*task delay timer by ms for timer countting       */
    WORD     wdIDRBM;     /*object id for which task waitting, when timeout  */
};
typedef struct _Timer_Inf TIMER_INF;

#define OBJ_NAME_MAX_SIZE  (16)
struct _ObjectInf {
    union StatInf {
        TCB_INF  Inf_Tcb;
        MTX_INF  Inf_Mutex;
        SEM_INF  Inf_Sem;
        MSG_INF  Inf_Msg;
        FLAG_INF Inf_Flag;
        RBM_INF  Inf_Rbm;
        TIMER_INF Inf_Timer;
    } Stats;
    STR pObjName[OBJ_NAME_MAX_SIZE + 1];
};
typedef struct _ObjectInf OBJ_INF;

/* cwIDObj:内核对象标识,用于获取其相关信息;
 *
 * pObjInf:OBJ_INF 类型变量地址,用于存放内核对象信息。
 */
extern CWORD _cdecl_ GetObjInf(CWORD cwIDObj, OBJ_INF *pObjInf);

/*
 *******************************************************************************
 *                  I/O 端口操作(字节/字,输入/输出)相关函数                    *
 *******************************************************************************
 */
 
/* 内核初始化时可能需要下列函数,但内核中可能不提供它们,请自己编写或使用I/O库 */
                        
/* 从端口 port 输入一字节 */
extern BYTE _cdecl_ in_byte(WORD port);

/* 从端口 port 输入一字 */
extern WORD _cdecl_ in_word(WORD port);

/* 向端口 port 输出一字节 value */
extern void _cdecl_ out_byte(WORD port,WORD value);

/* 向端口 port 输出一字 value */
extern void _cdecl_ out_word(WORD port,WORD value);

/*
 *******************************************************************************
 *                            任务异步过程调用相关函数                         *
 *******************************************************************************
 */

/* 设置一个任务异步过程调用APC,引导任务异步的执行该过程,此过程将在该任务
 * 下次被调度时执行:
 *
 * pAPCFun:为任务APC入口地址;
 *
 * pData为向APC函数传递的参数指针;
 *
 * idTask为要执行此APC的任务标识;
 *
 * 成功后,返回值为TSC_SUCCESS;
 * 返回值为TSC_UNSAFE_APC_STACK说明设置异步过程调用APC时栈空间不足;
 * 返回值为TSC_TASK_ON_APC说明任务正在执行异步过程调用APC。
 */
extern CWORD _cdecl_ TaskAPC(CWORD idTask, PTASKFUN pAPCFun, void *pData);

/*
 *******************************************************************************
 *                             系统调用返回值                                  *
 *******************************************************************************
 */

/* 下列数据为系统调用返回值,成功时返回TSC_SUCCESS,超时时返回TSC_TIME_OUT,
 * 0xf000 及其后面的值为参数有误时,内核向任务返回的结果。
 */

#define TSC_INVALID_OBJ_ID         (0x0000) /* 无效对象标识,对象创建失败     */
#define TSC_SUCCESS                (0x0000) /* 操作成功                       */
#define TSC_TIME_OUT               (0x0102) /* 等待超时                       */
#define TSC_OBJ_MAX_COUNT          (0xf000) /* 内核所支持的最多对象数目       */
#define TSC_MUTEX_GET_MAX_NEST     (0xf000) /* 互斥信号量最大嵌套获取调用深度 */
#define TSC_MUTEX_NO_MORE_NEST     (0xf001) /* 无法进行互斥信号量更多嵌套获取 */
#define TSC_OBJECT_DELETED         (0xf002) /* 对象已被删除                   */
#define TSC_OBJECT_WAIT_REFUSED    (0xf003) /* 无等待此对象的权限             */
#define TSC_INVALID_OBJECT         (0xf004) /* 无效对象                       */
#define TSC_INVALID_HANDLE         (0xf005) /* 无效句柄                       */
#define TSC_OBJECT_NO_SIGNAL       (0xf006) /* 对象无信号                     */
#define TSC_OBJECT_BE_SHARED       (0xf007) /* 对象被共享使用                 */
#define TSC_MUTEX_ILLEGAL_OWNER    (0xf008) /* 互斥信号量非法拥有者           */
#define TSC_OBJECT_COUNT_FULL      (0xf009) /* 对象计数满                     */
#define TSC_TASK_NOT_SUSPENDED     (0xf00a) /* 任务未被挂起                   */
#define TSC_MUTEX_DELETE_REFUSED   (0xf00b) /* 互斥信号量拒绝删除             */
#define TSC_MSG_QUEUE_NOT_EXIST    (0xf00c) /* 消息队列不存在                 */
#define TSC_NO_MESSAGE             (0xf00d) /* 无消息                         */
#define TSC_MESSAGE_QUEUE_FULL     (0xf00e) /* 消息队列满                     */
#define TSC_INVALID_API_CALL       (0xf00f) /* 无效 API 调用                  */
#define TSC_PI_MUTEX_NO_NEST       (0xf010) /* 优先级继承互斥信号量不能嵌套   */
#define TSC_INVALID_PRIORITY       (0xf011) /* 无效优先级                     */
#define TSC_NO_FREE_MSGBUF         (0xf012) /* 无空闲消息缓存块               */
#define TSC_INVALID_PARAM          (0xf013) /* 无效参数                       */

#define TSC_INVALID_FLAG_MODE      (0xf014) /* 无效位域操作模式               */
#define TSC_FLAG_GET_BUF_CRASH     (0xf015) /* 位域标志缓存崩溃               */
#define TSC_FLAG_NOT_READY         (0xf016) /* 位域标志不满足要求             */
#define TSC_FLAG_GET_ONE_MET       (0xf017) /* 位域标志满足一个等待者         */
/* #define TSC_OBJECT_CREATED      (0xf018)                                   */
#define TSC_INVALID_STACK_VAR      (0xf019) /* 无效栈变量                     */
#define TSC_INVALID_ISR_VECTOR     (0xf01a) /* 无效中断向量                   */

#define TSC_OPERATE_REJECT         (0xf01b) /* 无权限,拒绝此操作             */
#define TSC_ERR_REJECT             (0xf01c) /* 拒绝执行此错误操作             */
#define TSC_KERNEL_ERR             (0xf01d) /* 内核出错                       */
#define TSC_WAIT_CANCEL_TIMER      (0xf01e) /* 正在取消定时器,请耐心等待     */
#define TSC_TIMER_CONNECTED        (0xf01f) /* 定时器已经连接,可以使用       */
#define TSC_TIMER_UNCONNECT        (0xf020) /* 定时器尚未连接,无效断开       */
#define TSC_INVALID_PERIOD         (0xf021) /* 无效定时器时间周期(toTime = 0) */

#define TSC_UNSAFE_APC_STACK       (0xf022) /* 设置异步过程调用APC时栈空间不足*/
#define TSC_TASK_ON_APC            (0xf023) /* 任务正在执行异步过程调用APC    */

/* 
 *******************************************************************************
 *                                                                             *
 *******************************************************************************
 */ 
#endif /* end of mcCLib.h */
 

⌨️ 快捷键说明

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