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

📄 rd_usecooperatingminios.c

📁 LCD1602键盘显示模块实例
💻 C
字号:
/***********************************************************
*   函数库说明:合作调度器基本函数库                       *
*   版本:      v1.00                                      *
*   作者:      王卓然                                     *
*   创建日期:  2006年8月28日                              *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:RD_UseCooperatingMiniOs.h                  *
*   需要版本:  -----                                      *
*   支持库说明:合作调度器基本声明库                       *
*                                                          *
*   支持库名称:RD_MacroAndConst.h                         *
*   需要版本:  v0.04 &abv                                 *
*   支持库说明:系统常用宏定义库                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
* -------------------------------------------------------- *
*  [版本历史]                                              *
* -------------------------------------------------------- *
*  [使用说明]                                              *
*           1、在系统初始化的时候调用函数CmOSInit()来初始  *
*              化消息对系统;同时通过定义宏                *
*              COS_REGISTER_PROC_FUNCTION来说明静态进程函  *
*              数的消息处理函数和动作函数(使用函数指针)。  *
*              每增加一个静态进程,要更新一次进程计数器    *
*              COS_Proc_Counter,保证每一个进程都能被有效  *
*              的寻址。                                    *
*           7、用户可以通过宏COS_PROCESS_COUNT来定义最大的 *
*              进程PCB数量。这个数值直接影响系统允许的静态 *
*              进程的数量,并要占用一定的空间。这个数目的  *
*              最小值是1,因为默认有一个系统默认消息处理   *
*              进程。                                      *
*           8、用户需要COS_REGISTER_MSG_FUNCTION宏来说明   *
*              系统进程的初始化函数,通过这个初始化函数告  *
*              诉消息系统,一共有多少静态进程,并且说明这  *
*              些静态进程的相关函数指针是什么。            *
***********************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "RD_MacroAndConst.h"
# include "RD_UseCooperatingMiniOs.h"

/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
#ifndef COS_PROCESS_COUNT
    //# define COS_PROCESS_COUNT 8
    #error Need for COS_PROCESS_COUNT!      
#endif

/*------------------*
*   动 作 宏 定 义  *
*------------------*/
#ifndef COS_REGISTER_PROC_FUNCTION
    # define COS_REGISTER_PROC_FUNCTION
#endif

/********************
*    结构体宏定义   *
********************/

/********************
*   函 数 声 明 区  *
********************/
BOOL NULL_PROC(void);
void CMOS_INIT(void);
void Process_Task(void);

/********************
*   全局变量声明区  *
********************/
volatile PROCESS ProcPCB[COS_PROCESS_COUNT+1];
uint8 g_cCOSPROCCounter = 0;

/***********************************************************
*   函数说明:空函数                                       *
*   输入:    无                                           *
*   输出:    无                                           *
*   调用函数:无                                           *
***********************************************************/
BOOL NULL_PROC(void)
{
    return FALSE;
}
					  
/***********************************************************
*   函数说明:消息队列系统初始化函数                       *
*   输入:    无                                           *
*   输出:    无                                           *
*   调用函数:COS_REGISTER_PROC_FUNCTION                   *
* -------------------------------------------------------- *
*  [注意事项]                                              *
*         1、ProcPCB[]是一个函数指针数组,里面登记着       *
*            所有系统合法的消息处理函数的地址。            *
*         2、ProcPCB[]下标中,0为系统保留,其余为用户      *
*            自定义。                                      *
*         3、用户需要自己通过编写函数并通过连接宏          *
*            MSG_REGISTER_PROC_FUNCTION来注册合法消息处理  *
*            函数。                                        *
*         4、编程的时候,每增加一个静态的进程,就要增加一  *
*            次进程计数器MSG_Proc_Counter。                *
***********************************************************/
void CMOS_INIT(void)
{
    uint8 n = 0;
		
    for (n = 0;n<COS_PROCESS_COUNT+1;n++)
    {
        #ifdef _USE_MESSAGE_PROC
        ProcPCB[n].ProcIO = SYS_DEFAULT;
        #endif
        ProcPCB[n].Proc   = NULL_PROC;
        ProcPCB[n].IfProcAlive = FALSE;
    }
		
    COS_REGISTER_PROC_FUNCTION
}

/***********************************************************
*   函数说明:任务处理函数                                 *
*   输入:    无                                           *
*   输出:    无                                           *
*   调用函数:无                                           *
***********************************************************/
void Process_Task(void)
{
    static uint8 n = 0;
    
    if (ProcPCB[n].IfProcAlive)                             //处理进程
    {
        ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
    }        
    
    n ++;
    if (n >= g_cCOSPROCCounter)
    {
        n = 0;
    }
}

⌨️ 快捷键说明

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