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

📄 os_core.lst

📁 一种51单片机嵌入式系统SMALL RTOS 51的应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  OS_CORE                                                               01/01/2001 02:30:55 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN .\OS_CORE.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\OS\OS_CORE.C BROWSE DEBUG OBJECTEXTEND PRINT(.\OS_CORE.lst) OBJECT(.\OS_
                    -CORE.obj) 

stmt level    source

   1          /*********************************************************************************************************
   2          **                                                             Small RTOS(51)
   3          **                                   The Real-Time Kernel(For Keil c51)
   4          **
   5          **                                  (c) Copyright 2002-2003, chenmingji
   6          **                                           All Rights Reserved
   7          **
   8          **                                                  V1.20.1
   9          **
  10          **
  11          **--------------文件信息--------------------------------------------------------------------------------
  12          **文   件   名: OS_CORE.C
  13          **创   建   人: 陈明计
  14          **最后修改日期: 2004年2月4日
  15          **描        述: Small RTOS(51)与CPU无关的核心代码
  16          **
  17          **--------------历史版本信息----------------------------------------------------------------------------
  18          ** 创建人: 陈明计
  19          ** 版  本: V0.50~V1.00
  20          ** 日 期: 2002年2月22日~2002年6月20日
  21          ** 描 述: 基本完成Small RTOS核
  22          **
  23          **------------------------------------------------------------------------------------------------------
  24          ** 修改人: 陈明计
  25          ** 版  本: V1.10~V1.21
  26          ** 日 期: 2002年9月1日~2003年1月23日
  27          ** 描 述: 完善Small RTOS
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ** 修改人: 陈明计
  31          ** 版  本: V1.20.0
  32          ** 日 期: 2003年8月17日
  33          ** 描 述: 增加支持任务动态建立和删除,函数功能向一般的RTOS靠齐
  34          **
  35          **------------------------------------------------------------------------------------------------------
  36          ** 修改人: 陈明计
  37          ** 版  本: V1.20.1
  38          ** 日 期: 2004年2月4日
  39          ** 描 述: 修改OSWait(K_SIG | K_TMO, x) 只能通过信号唤醒的bug。
  40          **
  41          **--------------当前版本修订------------------------------------------------------------------------------
  42          ** 修改人: 
  43          ** 日 期:
  44          ** 描 述:
  45          **
  46          **------------------------------------------------------------------------------------------------------
  47          ********************************************************************************************************/
  48          
  49          #define  IN_OS_CORE
  50          #include "config.h"
  51          
  52          uint8 data OSIntNesting;
  53          
  54          uint8 data OSTaskID;
C51 COMPILER V6.23a  OS_CORE                                                               01/01/2001 02:30:55 PAGE 2   

  55          uint8 data OSNextTaskID;
  56          
  57          uint8 data OSWaitTick[OS_MAX_TASKS];
  58          #if OS_MAX_TASKS < 9
  59          uint8 data OSTaskRuning[1];
  60          uint8 data OSTaskCreated[1];
  61          #else
              uint8 data OSTaskRuning[2];
              uint8 data OSTaskCreated[2];
              #endif
  65          
  66          uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
  67          uint8 data Os_Enter_Sum;
  68          
  69          
  70          void  OSSched(void) small;
  71          
  72          /*********************************************************************************************************
  73          ** 函数名称: OSInit
  74          ** 功能描述: 系统变量初始化
  75          ** 输 入: 无
  76          ** 输 出: 无
  77          ** 全局变量: 
  78          ** 调用模块: 无
  79          **
  80          ** 作 者: 陈明计
  81          ** 日 期: 2003年8月3日
  82          **-------------------------------------------------------------------------------------------------------
  83          ** 修改人:
  84          ** 日 期:
  85          **------------------------------------------------------------------------------------------------------
  86          ********************************************************************************************************/
  87                  void OSInit(void) small
  88          {
  89   1          OSTaskRuning[0] = 0;
  90   1          OSTaskCreated[0] = 0;
  91   1      #if OS_MAX_TASKS > 8
                  OSTaskRuning[1] = 0;
                  OSTaskCreated[1] = 0;
              #endif
  95   1          Os_Enter_Sum = 0;
  96   1          OSTaskID = OS_MAX_TASKS;
  97   1          OSNextTaskID = 0;
  98   1          OSIntNesting = 0;
  99   1          OSCPUInit();
 100   1      }
 101          
 102          /*********************************************************************************************************
 103          ** 函数名称: _OSTaskCreate
 104          ** 功能描述: 创建任务
 105          ** 输 入: TaskID:任务ID
 106          **         task  :任务地址
 107          **         ptos  :任务堆栈,在51中为重入栈
 108          ** 输 出: 无
 109          ** 全局变量: 
 110          ** 调用模块: 无
 111          **
 112          ** 作 者: 陈明计
 113          ** 日 期: 2003年8月3日
 114          **-------------------------------------------------------------------------------------------------------
 115          ** 修改人:
 116          ** 日 期:
C51 COMPILER V6.23a  OS_CORE                                                               01/01/2001 02:30:55 PAGE 3   

 117          **------------------------------------------------------------------------------------------------------
 118          ********************************************************************************************************/
 119                  uint8 _OSTaskCreate(uint8 TaskID, void (code * task)(void), void xdata *ptos) small
 120          {
 121   1          if (TaskID < OS_MAX_TASKS)
 122   1          {
 123   2              OS_ENTER_CRITICAL();
 124   2      #if OS_MAX_TASKS < 9
 125   2              if ((OSTaskCreated[0] & OSMapTbl[TaskID]) != 0)
 126   2              {
 127   3                  return FALSE;
 128   3              }
 129   2              OSTaskCreated[0] |= OSMapTbl[TaskID];
 130   2              OSTaskRuning[0] |= OSMapTbl[TaskID];
 131   2      #else
                      if (TaskID < 8)
                      {
                          if ((OSTaskCreated[0] & OSMapTbl[TaskID]) != 0)
                          {
                              return FALSE;
                          }
                          OSTaskCreated[0] |= OSMapTbl[TaskID];
                          OSTaskRuning[0] |= OSMapTbl[TaskID];
                      }
                      else
                      {
                          if ((OSTaskCreated[1] & OSMapTbl[TaskID & 0x07]) != 0)
                          {
                              return FALSE;
                          }
                          OSTaskCreated[1] |= OSMapTbl[TaskID & 0x07];
                          OSTaskRuning[1] |= OSMapTbl[TaskID & 0x07];
                      }
              #endif
 151   2              OSTaskStkInit(task, ptos, TaskID);
 152   2              OSSched();
 153   2              OS_EXIT_CRITICAL();
 154   2              return TRUE;
 155   2          }
 156   1          return FALSE;
 157   1      }
 158          
 159          /*********************************************************************************************************
 160          ** 函数名称: OSTaskDel
 161          ** 功能描述: 删除任务
 162          ** 输 入: TaskID:任务ID
 163          ** 输 出: 无
 164          ** 全局变量: 
 165          ** 调用模块: 无
 166          **
 167          ** 作 者: 陈明计
 168          ** 日 期: 2003年8月3日
 169          **-------------------------------------------------------------------------------------------------------
 170          ** 修改人:
 171          ** 日 期:
 172          **------------------------------------------------------------------------------------------------------
 173          ********************************************************************************************************/
 174                  uint8 OSTaskDel(uint8 TaskID) small
 175          {
 176   1          if (TaskID < OS_MAX_TASKS)
 177   1          {
 178   2              OS_ENTER_CRITICAL();
C51 COMPILER V6.23a  OS_CORE                                                               01/01/2001 02:30:55 PAGE 4   

 179   2      #if OS_MAX_TASKS < 9
 180   2              OSTaskCreated[0] &= ~OSMapTbl[TaskID];
 181   2      #else
                      if (TaskID < 8)
                      {
                          OSTaskCreated[0] &= ~OSMapTbl[TaskID];
                      }
                      else
                      {
                          OSTaskCreated[1] &= ~OSMapTbl[TaskID & 0x07];
                      }
              #endif
 191   2              OSTaskStkDel(TaskID);
 192   2              OSSched();
 193   2              OS_EXIT_CRITICAL();
 194   2              return TRUE;
 195   2          }
 196   1          else
 197   1          {
 198   2              return FALSE;
 199   2          }
 200   1      }
 201          
 202          /*********************************************************************************************************
 203          ** 函数名称: OSTaskResume
 204          ** 功能描述: 恢复任务
 205          ** 输 入: TaskID : 任务ID
 206          ** 输 出: 无
 207          ** 全局变量: OSTaskRuning
 208          ** 调用模块: 无
 209          **
 210          ** 作 者: 陈明计
 211          ** 日 期: 2003年8月3日
 212          **-------------------------------------------------------------------------------------------------------
 213          ** 修改人:
 214          ** 日 期:
 215          **------------------------------------------------------------------------------------------------------
 216          ********************************************************************************************************/
 217                  void OSTaskResume(uint8 TaskID)  small
 218          {
 219   1          if (TaskID < OS_MAX_TASKS)
 220   1          {
 221   2              OS_ENTER_CRITICAL();
 222   2      #if OS_MAX_TASKS < 9
 223   2              OSTaskRuning[0] |= OSMapTbl[TaskID];
 224   2      #else
                      if (TaskID < 8)
                      {
                          OSTaskRuning[0] |= OSMapTbl[TaskID];
                      }
                      else
                      {
                          OSTaskRuning[1] |= OSMapTbl[TaskID & 0x07];
                      }
              #endif
 234   2              OS_EXIT_CRITICAL();
 235   2          }
 236   1          OSSched();                                              //开始任务切换
 237   1      }
 238          
 239          /*********************************************************************************************************
 240          ** 函数名称: OS_TaskSuspend
C51 COMPILER V6.23a  OS_CORE                                                               01/01/2001 02:30:55 PAGE 5   

 241          ** 功能描述: 使指定任务休眠,但不进行任务切换
 242          ** 输 入: TaskID : 任务ID
 243          ** 输 出: 无
 244          ** 全局变量: OSWaitTick
 245          ** 调用模块: 无
 246          **
 247          ** 作 者: 陈明计
 248          ** 日 期: 2003年8月3日
 249          **-------------------------------------------------------------------------------------------------------
 250          ** 修改人:
 251          ** 日 期:
 252          **-------------------------------------------------------------------------------------------------------
 253          ********************************************************************************************************/
 254                  void OS_TaskSuspend(uint8 TaskID)    small
 255          {
 256   1          if (TaskID < OS_MAX_TASKS)
 257   1          {
 258   2              OS_ENTER_CRITICAL();
 259   2      #if OS_MAX_TASKS < 9
 260   2              OSTaskRuning[0] &= ~OSMapTbl[TaskID];
 261   2      #else
                      if (TaskID < 8)
                      {
                          OSTaskRuning[0] &= ~OSMapTbl[TaskID];
                      }
                      else
                      {
                          OSTaskRuning[1] &= ~OSMapTbl[TaskID & 0x07];
                      }
              #endif
 271   2              OS_EXIT_CRITICAL();
 272   2          }
 273   1      }
 274          
 275          
 276          /*********************************************************************************************************
 277          ** 函数名称: OSTaskSuspend
 278          ** 功能描述: 使指定任务休眠
 279          ** 输 入: TaskID : 任务ID
 280          ** 输 出: 无
 281          ** 全局变量: OSWaitTick
 282          ** 调用模块: OS_TaskSuspend,OSSched
 283          **
 284          ** 作 者: 陈明计
 285          ** 日 期: 2003年8月3日
 286          **-------------------------------------------------------------------------------------------------------
 287          ** 修改人:
 288          ** 日 期:
 289          **-------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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