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

📄 mcclib.h

📁 rtCell 实时微内核-具有下列功能: 1. 完全抢占的实时微内核结构
💻 H
📖 第 1 页 / 共 3 页
字号:
 *******************************************************************************
 */  

/* 创建一环形队列消息对象:pRBMName为消息对象名称,最大16个字符,当同名的消息对象
 * 存在时,其它参数不起作用,返回同名对象标识;
 *
 * wdSize说明消息缓存的数目; 
 *
 * FIFOWait说明获得消息对象时的等待方式,为true时按先进先出方式等待,为false时
 * 按优先级方式等待;
 * 
 * 返回值为环形队列消息对象标识,用于环形队列消息对象相关的系统调用。
 */
extern CWORD _cdecl_ CreateRBM(STR *pRBMName, CWORD wdSize, CBOOL FIFOWait);

/* 无等待获取环形队列消息:idRBM为环形队列消息对象标识,pMsg为MSG结构指针,
 * 指向消息缓存;获取后返回TSC_SUCCESS 
 */
extern CWORD _cdecl_ GetRBMTry(CWORD idRBM, MSG *pMsg);

/* 以等待方式获取环形队列消息:idRBM为环形队列消息对象标识;pMsg为MSG结构指针,
 * 指向消息缓存;dwTime说明超时时间片,dwTime为0时,将一直等到取得环形队列消息,
 * dwTime不为0时,等到超时后,不再继续等待;获取环形队列消息后返回TSC_SUCCESS,
 * 超时后返回TIMEOUT,其它值说明出错。
 */
extern CWORD _cdecl_ GetRBM(CWORD idRBM, MSG *pMsg, DWORD dwTime);

/******************************************************************************* 
 * 发送环形队列消息:idRBM为环形队列消息对象标识,pMsg为MSG结构指针;          *
 *                                                                             *
 * 成功后返回TSC_SUCCESS。                                                     *
 *                                                                             *
 * 此函数可从中断中调用。                                                      *
 */
extern CWORD _cdecl_ SendRBM(CWORD idRBM, MSG *pMsg);

/*
 *******************************************************************************
 *                           优先级消息对象相关函数                            *
 *******************************************************************************
 */
          
/* 创建一优先级消息对象:pMSGName为消息对象名称,最大16个字符,当同名的消息对象
 * 存在时,其它参数不起作用,返回同名对象标识;
 *
 * wdSize说明消息缓存的数目; 
 *
 * GeterFIFOWait说明获得消息对象时的等待方式,为true时按先进先出方式等待,为
 * false时按优先级方式等待;
 * 
 * SenderFIFOWait说明当发送消息而无缓存可用时的等待方式,为true时按先进先出方
 * 式等待,为false时按优先级方式等待;
 * 
 * 返回值为优先级消息对象标识,用于优先级消息对象相关的系统调用。
 */
extern CWORD _cdecl_ CreateMSG(STR *pMSGName, CWORD wdSize,
                               CBOOL GeterFIFOWait, CBOOL SenderFIFOWait);

/* 无等待获取优先级消息:idMsg为优先级消息对象标识,pMsg为MSG结构指针,
 * 指向消息缓存;获取后返回消息的优先级 
 */
extern CWORD _cdecl_ GetMSGTry(CWORD idMsg, MSG *pMsg);

/* 以等待方式获取优先级消息:idMsg为优先级消息对象标识;pMsg为MSG结构指针,指
 * 向消息缓存;dwTime说明超时时间片,dwTime为0时,将一直等到取得优先级消息,
 * dwTime不为0时,等到超时后,不再继续等待;成功获取消息后返回消息的优先级,
 * 超时后返回TIMEOUT,其它值说明出错。
 */
extern CWORD _cdecl_ GetMSG(CWORD idMsg, MSG *pMsg, DWORD dwTime);


/* 以等待方式发送优先级消息:idMsg为优先级消息对象标识;pMsg为MSG结构的消息指针,
 * wdPrio为消息优先级,须为小于16的无符号整数,dwTime说明超时时间片,dwTime为0时,
 * 将一直等到有消息缓存可用,dwTime不为0时,等到超时后,不再继续等待;有消息缓存
 * 可用且发送完毕消息后返回TSC_SUCCESS,超时后返回TIMEOUT,其它值说明出错。
 */
extern CWORD _cdecl_ SendMSG(CWORD idMsg, CWORD wdPrio, MSG *pMsg, DWORD dwTime);

/******************************************************************************* 
 * 发送优先级消息:idMsg为优先级消息对象标识,pMsg为MSG结构指针,wdPrio为消息  *
 * 优先级,必须为小于16的无符号整数;                                          *
 *                                                                             *
 * 成功后返回TSC_SUCCESS。                                                     *
 *                                                                             *
 * 此函数可从中断中调用。                                                      *
 */
extern CWORD _cdecl_ SendMSGTry(CWORD idMsg, CWORD wdPrio, MSG *pMsg);

/*
 *******************************************************************************
 *                            位域标志对象相关函数                             *
 *******************************************************************************
 */

/* Flag set and clear mode */
#define FLAG_OPT_BIT          (0x0008)                      /* binary: 1000 */
#define FLAG_SET_BIT          (0x0004)                      /* binary: 0100 */
#define FLAG_OPT_ALL          (0x0002)                      /* binary: 0010 */
#define FLAG_RST_BIT          (0x0001)                      /* binary: 0001 */
#define FLAG_VALID_OPT_BIT    (0x0004)                      /* length: 0004 */

#define FLAG_CLR_BIT          (0x0000)                      /* binary: 0000 */
#define FLAG_OPT_ANY          (0x0000)                      /* binary: 0000 */
/* 设置位域标志模式 */
#define FLAG_SET              (FLAG_SET_BIT | FLAG_OPT_BIT) /* 设置位域标志 */
#define FLAG_CLR              (FLAG_CLR_BIT | FLAG_OPT_BIT) /* 清除位域标志 */

/* 获取位域标志模式 */
#define FLAG_ALL_SET          (FLAG_SET | FLAG_OPT_ALL) /* 位域标志全部设置 */
#define FLAG_ANY_SET          (FLAG_SET | FLAG_OPT_ANY) /* 位域标志任一设置 */
#define FLAG_ALL_CLR          (FLAG_CLR | FLAG_OPT_ALL) /* 位域标志全部清除 */
#define FLAG_ANY_CLR          (FLAG_CLR | FLAG_OPT_ANY) /* 位域标志任一清除 */

/* 获取位域标志模式扩展 */
#define FLAG_GET_AND_RESET    (FLAG_RST_BIT | FLAG_OPT_BIT) /* 获取并反置之 */

/* 创建一位域标志对象:pFlagName为位域标志对象名称,最大16个字符,当同名的位域标志
 * 对象存在时,其它参数不起作用,返回同名对象标识;
 *
 * cwInitFlag说明初始化位域; 
 *
 * FIFOWait说明获得位域标志对象时的等待方式,为true时按先进先出方式等待,为false
 * 时按优先级方式等待; 
 * 
 * 返回值为位域标志对象标识,用于位域标志对象相关的系统调用。
 */
extern CWORD _cdecl_ CreateFlag(STR *pFlagName, CWORD cwInitFlag, CBOOL FIFOWait);

/* 无等待获取位域标志:idFlag为位域标志对象标识,cwFlag说明所要求的位域标志;
 * wdMode说明位域标志的类型,为 FLAG_ALL_SET,FLAG_ANY_SET,FLAG_ALL_CLR 及
 * FLAG_ANY_CLR 其中之一 也可与 FLAG_GET_AND_RESET 联合使用;cwdFlagPtr为一
 * 整数指针,若不为空,则该整数为所取得的位域标志;获取所要求的位域标志后返
 * 回SUCESS。
 */
extern CWORD _cdecl_ GetFlagTry(CWORD idFlag, CWORD cwFlag,
                                CWORD wdMode, CWORD *cwdFlagPtr);

/* 以等待方式获取位域标志:idFlag为位域标志对象标识;cwFlag说明所要求的位域标
 * 志;wdMode说明位域标志的类型,为 FLAG_ALL_SET,FLAG_ANY_SET,FLAG_ALL_CLR 
 * 及FLAG_ANY_CLR 其中之一 也可与 FLAG_GET_AND_RESET 联合使用;cwdFlagPtr为一
 * 整数指针,若不为空,则该整数为所取得的位域标志;dwTime 说明超时时间片,当
 * dwTime为0时,将一直等到取得位域标志,当dwTime不为0时,等到超时后,不再继续
 * 等待;成功获取位域标志后返回SUCESS,超时后返回TIMEOUT,其它值说明出错。
 */
extern CWORD _cdecl_ GetFlag(CWORD idFlag, CWORD cwFlag, CWORD wdMode,
                             CWORD *cwFlagPtr, DWORD dwTime);

/******************************************************************************* 
 * 设置位域标志:idFlag为位域标志对象标识,cwFlag用于说明所发送位域,wdMode为  *
 * 发送模式,必须为FLAG_SET 或 FLAG_CLR其中之一;                              *
 *                                                                             *
 * 成功后返回TSC_SUCCESS 或 FLAG_GET_ONE_MET。                                 *
 *                                                                             *
 * 此函数可从中断中调用。                                                      *
 */
extern CWORD _cdecl_ SendFlag(CWORD idFlag, CWORD cwFlag, CWORD wdMode);

/*
 *******************************************************************************
 *                             对象删除相关函数                                *
 *******************************************************************************
 */

/* 删除对象:idObj为所对象标识,成功后返回TSC_SUCCESS */
extern CWORD _cdecl_ DeleteObject(CWORD idObj);
extern void  _cdecl_ TerminateTask(CWORD idObj);

/*
 *******************************************************************************
 *                             中断设置相关函数                                *
 *******************************************************************************
 */

typedef void (_cdecl_ * PISR)(void *);

/* 设置中断处理过程:
 * cwIndex 说明硬件中断向量号,
 * pISRAddr 说明中断处理函数地址,
 * pISRArg 存放中断处理函数参数,可设为空指针,
 * ppOldISRAddr 用于接受旧的中断处理函数地址,可设为空指针,
 * ppOldISRArg 用于接受旧的中断处理函数参数,可设为空指针 
 */
extern CBOOL _cdecl_ SetVector(CWORD cwIndex, PISR pISRAddr, void *pISRArg,
                               PISR *ppOldISRAddr, void **ppOldISRArg);

/* 8259芯片中断使能函数:Irq说明8259芯片中中断向量号,范围为:0~15。*/
extern CWORD _cdecl_ EnableVector(CWORD Irq);

/* 8259芯片中断关闭函数:Irq说明8259芯片中中断向量号,范围为:0~15。*/
extern CWORD _cdecl_ DisableVector(CWORD Irq);  

/*
 *******************************************************************************
 *                             内存分配相关函数                                *
 *******************************************************************************
 */ 

/* 分配 Size 字节内存,ppMem 为指针的指针,所分配内存地址存放到 *ppMem 中,
 * 成功后,返回值为TSC_SUCCESS。
 */
extern CBOOL _cdecl_ Malloc(void **ppMem, size_t Size);
/*
#if !defined(void_Alloc)
#define void_Alloc
static void *Alloc(size_t Size)
{
    void *pMem;
    CBOOL alloc;

    alloc = Malloc(&pMem, Size);
    return ((alloc == true) ? pMem : NULL);       
}
#endif
*/

/* 释放 pMem 所指内存块, 成功后,返回值为TSC_SUCCESS。 */
extern CBOOL _cdecl_ Free(void *pMem);

/*
 *******************************************************************************
 *                               定时器相关函数                                *
 *******************************************************************************
 */

/* 创建定时器对象:
 * pTimerName:说明定时器对象名称,
 *

⌨️ 快捷键说明

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