📄 mcclib.h
字号:
* 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 + -