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

📄 os_core.lst

📁 MinOS嵌入式操作系统,C/C++源代码!基于KeilC51编译器.
💻 LST
字号:
C51 COMPILER V7.06   OS_CORE                                                               07/31/2004 19:16:34 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN OS_Core.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE OS_Core.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2          *********************************************************************************************************
   3          *                                      minOS 0.01v
   4          *                                The Real-Time OS Kernel
   5          *                                  All Rights Reserved
   6          * File : OS_Core.C
   7          * 作者 : 21icbbs网友 LM7556 ,2004年7月   by : LM7556 , China , 2004-2004 
   8          *
   9          *********************************************************************************************************
  10          */
  11          
  12          
  13          #define  OS_GLOBALS                           /* Declare GLOBAL variables   */
  14          #include "OS_Includes.h"
  15          
  16          #ifndef NULL
              #define NULL 0
              #endif
  19          
  20          // initialization OSTCB --- 初始化任务控制块.
  21          void OSInit(void) 
  22          {       INT8U i;
  23   1              for (i=0;i<OS_MAX_TASKS;i++) 
  24   1              {
  25   2                      OSTCB[i].OSStkTop=(INT8U)NULL;
  26   2                      OSTCB[i].OSTaskStatus=no_TASK_Rdy;
  27   2                      OSTCB[i].OSTimeDly=0;
  28   2              }
  29   1      }
  30          
  31          //Start OS --- 启动OS
  32          void OSStart(void) 
  33          {
  34   1              Init_OS_Timer();
  35   1              OS_TASK_CrtPrio=Task_main_Prio;
  36   1              OS_TASK_HighPri=OS_TASK_CrtPrio;
  37   1              OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
  38   1              OS_INT_ENABLE();
  39   1              OS_TASK_INT();
  40   1      }
  41          
  42          //返回优先级最高的处于就绪态任务的优先级,否则返回no_TASK_Rdy。
  43          static INT8U OSPrioHighRdy(void) 
  44          { INT8U i;
  45   1              for (i=0;i<OS_MAX_TASKS;i++) 
  46   1              {
  47   2                      if ((OSTCB[i].OSStkTop!=(INT8U)NULL) & (OSTCB[i].OSTaskStatus==OS_TASK_Rdy)) {return i;}
  48   2              }
  49   1              return no_TASK_Rdy;
  50   1      }
  51          
  52          //Task OSTimeDly Decrease 1 per Time Tick --- 每个时钟节拍,任务等待延时的时间OSTimeDly减1.
  53          //如果任务的OSTimeDly减到0,把任务设置为准备就绪OS_TASK_Rdy。
  54          void OSTimeTick(void) 
  55          { INT8U i;
C51 COMPILER V7.06   OS_CORE                                                               07/31/2004 19:16:34 PAGE 2   

  56   1              for (i=0;i<OS_MAX_TASKS;i++) 
  57   1              {
  58   2                      if (OSTCB[i].OSTimeDly>OS_TASK_TimeOut) 
  59   2                      {
  60   3                              if (--OSTCB[i].OSTimeDly==0) {OSTCB[i].OSTaskStatus=OS_TASK_Rdy;}
  61   3                      }
  62   2              }
  63   1              OS_TASK_HighPri=OSPrioHighRdy();
  64   1      }
  65          
  66          #if OS_TIME_DLY_EN
  67          //OS Time Delay --- 使任务延时Tdly个时间节拍
  68          void OSTimeDly(INT16U Tdly)               /* Delay Tdly clock tick */
  69          {
  70   1              OSTCB[OS_TASK_CrtPrio].OSTimeDly=Tdly+OS_TASK_TimeOut;
  71   1              OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_WaitTicks;
  72   1              OSSched();
  73   1      }
  74          #endif
  75          
  76          #if OS_TASK_SUSPEND_EN>0
              //把正在运行的任务挂起(Suspend a task)。
              void OSTaskSuspend(INT8U TaskPrio) 
              {
                      OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_Rdy;
                      OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Suspend;
                      OSTCB[TaskPrio].OSTimeDly=OS_TASK_TimeOut;
                      OSSched();
              }
              #endif
  86          
  87          #if OS_TASK_Resume_EN>0
              // 恢复被挂起的任务(resume a task)。
              void OSTaskResume(INT8U TaskPrio) 
              {
                      OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Rdy;
              }
              #endif
  94          
  95          //任务调度,把CPU控制权转到优先级最高的处于就绪态的任务。如果没有处于就绪态的任务,就地等待,
  96          void OSSched(void) 
  97          {
  98   1              do
  99   1              {
 100   2                      OS_TASK_HighPri=OSPrioHighRdy();
 101   2              } while (OS_TASK_HighPri==no_TASK_Rdy);
 102   1              OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
 103   1              OS_TASK_INT();
 104   1      }
 105          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    227    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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