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

📄 os_core.c

📁 8052小型操作系统, 用Keil C编译器, 能进行任务切换, 信号量管理.
💻 C
字号:
/*
*********************************************************************************************************
*                                        uC/OS-16
*                                  The Real-Time Kernel
*                                     CORE FUNCTIONS
*
* File : OS_CORE.C
* By   : zhang xian
* Date : 2006-11-26
*********************************************************************************************************
*/

#include "Includes.h"

INT8U  code   OSMapTbl[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/*
*********************************************************************************************************
*                                              SCHEDULER
*********************************************************************************************************
*/

void  OS_Sched (void)
{
    OSNextTaskID = FindBitNum( OSTaskReady );
    if( OSNextTaskID!=OSTaskID )
    {
        OSCtxSw();
    }
}
/*********************************************************************************************************/
/*    在中断里调用   */
/*********************************************************************************************************/
void  OSTimeTick (void)
{
    register INT8U    k;
    OSSysCnt++;
    for(k=0;  k<OS_MAX_TASKS;  k++)
    {
        if( OSDlyTicks[k] )
        {
            OSDlyTicks[k]--;
            if( OSDlyTicks[k]==0 )
            {
                OSTaskReady |= OSMapTbl[k];
            }
        }
    }
}

/*********************************************************************************************************/
#if EN_OS_TASK_STACK_CHK > 0
void  OSTaskStkChk( void ) reentrant
{
    INT8U  Free;
    OS_STK *pChk;
    OS_ENTER_CRITICAL();
    pChk = (OS_STK *)OSStackBottom[OSTaskID];
    Free = 0;
    while (*pChk-- == (OS_STK)0)
    {
        Free++;
    }
    OSStackFreeBytes[OSTaskID] = Free;
    // 下面检查中断堆栈
    pChk = (OS_STK *)&OSISRStack[OS_ISR_STACK_SIZE-1];

    Free = 0;
    while (*pChk-- == (OS_STK)0)
    {
        Free++;
    }
    OSStackFreeBytes[OS_MAX_TASKS] = Free;
    OS_EXIT_CRITICAL();
}
#else
#define  OSTaskStkChk()
#endif
/*********************************************************************************************************/
code INT8U  StackSize[8] = {StackSize0,StackSize1,StackSize2,StackSize3,StackSize4,StackSize5,StackSize6,StackSize7};
/*********************************************************************************************************/

⌨️ 快捷键说明

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