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

📄 os_core.c

📁 ucos在三星s3c4419B上的移植
💻 C
📖 第 1 页 / 共 4 页
字号:
*
* 注释      : 该函数为 uC/OS-II的内部函数,应用程序不该调用。
*********************************************************************************************************
*/
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)
void  OS_EventWaitListInit (OS_EVENT *pevent)
{
    INT8U  *ptbl;


    pevent->OSEventGrp = 0x00;                                   /*    没有等待事件的任务              */
    ptbl               = &pevent->OSEventTbl[0];

#if OS_EVENT_TBL_SIZE > 0
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 1
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 2
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 3
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 4
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 5
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 6
    *ptbl++            = 0x00;
#endif

#if OS_EVENT_TBL_SIZE > 7
    *ptbl              = 0x00;
#endif
}
#endif
/*$PAGE*/

/*
*********************************************************************************************************
*                                             初始化
*                                    初始事件控制块的空余列表
*
* 函数描述:   该函数由 OSInit()调用以初始化事件控制块的空余列表
*
* 输入参数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

static  void  OS_InitEventList (void)
{
#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
#if (OS_MAX_EVENTS > 1)
    INT16U     i;
    OS_EVENT  *pevent1;
    OS_EVENT  *pevent2;


    pevent1 = &OSEventTbl[0];
    pevent2 = &OSEventTbl[1];
    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) 
    {                                                              /* 初始空余事件控制块列表  */
        pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
        pevent1->OSEventPtr  = pevent2;
        pevent1++;
        pevent2++;
    }
    pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
    pevent1->OSEventPtr  = (OS_EVENT *)0;
    OSEventFreeList      = &OSEventTbl[0];
#else
    OSEventFreeList              = &OSEventTbl[0];               /* 只有一个事件控制块        */
    OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
    OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;
#endif
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                             初始化
*                                         初始化杂项变量
*
* 函数描述: 该函数由 OSInit()调用以初始化杂项变量。
*
* 输入函数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

static  void  OS_InitMisc (void)
{
#if OS_TIME_GET_SET_EN > 0   
    OSTime        = 0L;                                          /* 32位系统时钟清零            */
#endif

    OSIntNesting  = 0;                                           /* 中断嵌套计数器清零      */
    OSLockNesting = 0;                                           /* 调度上锁计数器清零        */

    OSTaskCtr     = 0;                                           /* 任务数清零                */

    OSRunning     = FALSE;                                       /* 显示多任务未运行   */
    
    OSCtxSwCtr    = 0;                                           /* 任务切换计数器清零         */
    OSIdleCtr     = 0L;                                          /* 32位空闲计数器清零            */

#if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
    OSIdleCtrRun  = 0L;
    OSIdleCtrMax  = 0L;
    OSStatRdy     = FALSE;                                       /* 统计任务未就绪              */
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                             初始化
*                                       初始化就绪列表
*
* 函数描述: 该函数由 OSInit() 调用以初始化就绪列表.
*
* 输入函数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

static  void  OS_InitRdyList (void)
{
    INT16U   i;
    INT8U   *prdytbl;


    OSRdyGrp      = 0x00;                                        /* 就绪列表清零                     */
    prdytbl       = &OSRdyTbl[0];
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) 
    {
        *prdytbl++ = 0x00;
    }

    OSPrioCur     = 0;
    OSPrioHighRdy = 0;

    OSTCBHighRdy  = (OS_TCB *)0;                                 
    OSTCBCur      = (OS_TCB *)0;
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                             初始化
*                                         创建空闲任务
*
* 函数描述: 该函数创建空闲任务
*
* 输入参数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

static  void  OS_InitTaskIdle (void)
{
#if OS_TASK_CREATE_EXT_EN > 0
    #if OS_STK_GROWTH == 1
    (void)OSTaskCreateExt(OS_TaskIdle,
                          (void *)0,                                 /* 无任何参数传给 OS_TaskIdle() */
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* 设定栈顶                     */
                          OS_IDLE_PRIO,                              /* 最低优先级                */
                          OS_TASK_IDLE_ID,
                          &OSTaskIdleStk[0],                         /* 设定栈底                 */
                          OS_TASK_IDLE_STK_SIZE,
                          (void *)0,                                 /* 无任务控制块扩展                     */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* 使能堆栈检验 + 堆栈清零  */
    #else
    (void)OSTaskCreateExt(OS_TaskIdle,
                          (void *)0,                                 /* 无任何参数传给 OS_TaskIdle() */
                          &OSTaskIdleStk[0],                         /* 设定栈顶                     */
                          OS_IDLE_PRIO,                              /* 最低优先级                */
                          OS_TASK_IDLE_ID,
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* 设定栈底                  */
                          OS_TASK_IDLE_STK_SIZE,
                          (void *)0,                                 /* 无任务控制块扩展                     */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* 使能堆栈检验 + 堆栈清零  */
    #endif
#else
    #if OS_STK_GROWTH == 1
    (void)OSTaskCreate(OS_TaskIdle,
                       (void *)0,
                       &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
                       OS_IDLE_PRIO);
    #else
    (void)OSTaskCreate(OS_TaskIdle,
                       (void *)0,
                       &OSTaskIdleStk[0],
                       OS_IDLE_PRIO);
    #endif
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                            初始化
*                                         创建统计任务
*
* 函数描述: 该函数创建统计任务。
*
* 输入参数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

#if OS_TASK_STAT_EN > 0
static  void  OS_InitTaskStat (void)
{
#if OS_TASK_CREATE_EXT_EN > 0
    #if OS_STK_GROWTH == 1
    (void)OSTaskCreateExt(OS_TaskStat,
                          (void *)0,                                   /* 无任何参数传给 OS_TaskStat()*/
                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* 设定栈顶              */
                          OS_STAT_PRIO,                                /* 比空闲任务高一级  */
                          OS_TASK_STAT_ID,
                          &OSTaskStatStk[0],                           /* 设定栈底           */
                          OS_TASK_STAT_STK_SIZE,
                          (void *)0,                                   /* 无任务控制块扩展               */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* 使能堆栈检验 + 堆栈清零  */
    #else
    (void)OSTaskCreateExt(OS_TaskStat,
                          (void *)0,                                   /* 无任何参数传给 OS_TaskStat()*/
                          &OSTaskStatStk[0],                           /* 设定栈顶               */
                          OS_STAT_PRIO,                                /* 比空闲任务高一级  */
                          OS_TASK_STAT_ID,
                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* 设定栈底            */
                          OS_TASK_STAT_STK_SIZE,
                          (void *)0,                                   /* 无任务控制块扩展               */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* 使能堆栈检验 + 堆栈清零  */
    #endif
#else
    #if OS_STK_GROWTH == 1
    (void)OSTaskCreate(OS_TaskStat,
                       (void *)0,                                      /* 无任何参数传给 OS_TaskStat()*/
                       &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* 设定栈顶               */
                       OS_STAT_PRIO);                                  /* 比空闲任务高一级  */
    #else
    (void)OSTaskCreate(OS_TaskStat,
                       (void *)0,                                      /* 无任何参数传给 OS_TaskStat()*/
                       &OSTaskStatStk[0],                              /* 设定栈顶               */
                       OS_STAT_PRIO);                                  /* 比空闲任务高一级  */
    #endif
#endif
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                             初始化
*                                     初始化任务控制块的空余列表
*
* 函数描述: 该函数由 OSInit()调用以初始化任务控制块的空余列表
*
* 输入参数  : 无
*
* 返回值    : 无
*********************************************************************************************************
*/

static  void  OS_InitTCBList (void)
{
    INT8U    i;

⌨️ 快捷键说明

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