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

📄 os_cpu_c.lst

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


C51 COMPILER V6.23a, COMPILATION OF MODULE OS_CPU_C
OBJECT MODULE PLACED IN .\OS_CPU_C.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\KEILC51\OS_CPU_C.C BROWSE DEBUG OBJECTEXTEND PRINT(.\OS_CPU_C.lst) OBJEC
                    -T(.\OS_CPU_C.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.12.0
   9          **
  10          **
  11          **--------------文件信息--------------------------------------------------------------------------------
  12          **文   件   名: OS_CPU_C.C
  13          **创   建   人: 陈明计
  14          **最后修改日期:  2003年8月17日
  15          **描        述: Small RTOS 51与CPU(既8051系列)相关的C语言代码
  16          **
  17          **--------------历史版本信息----------------------------------------------------------------------------
  18          ** 创建人: 陈明计
  19          ** 版  本: V0.50~v1.00
  20          ** 日 期: 2002年2月22日~2002年6月20日
  21          ** 描 述: 基本完成
  22          **
  23          **------------------------------------------------------------------------------------------------------
  24          ** 修改人: 陈明计
  25          ** 版  本: V1.10~V1.12.0
  26          ** 日 期: 2002年9月1日~002年12月30日
  27          ** 描 述: 完善代码
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ** 修改人: 陈明计
  31          ** 版  本: V1.20.0
  32          ** 日 期: 2003年8月17日
  33          ** 描 述: 根据新版本需要增减了函数
  34          **
  35          **--------------当前版本修订------------------------------------------------------------------------------
  36          ** 修改人:
  37          ** 日 期:
  38          ** 描 述:
  39          **
  40          **------------------------------------------------------------------------------------------------------
  41          ********************************************************************************************************/
  42          
  43          #define  IN_OS_CPU_C
  44          #include "CONFIG.h"
  45          
  46          extern idata uint8 STACK[1];                    /* 堆栈起始位置,在OS_CPU_A定义 */
  47          uint8 idata * data OSTsakStackBotton[OS_MAX_TASKS + 2];/* 任务堆栈底部位置            */
  48          
  49          #if EN_SP2 > 0
              uint8 idata  Sp2[Sp2Space];                     /* 高级中断堆栈           */
              #endif
  52          
  53          #if OS_MAX_TASKS < 9            
  54          uint8 data OSFastSwap[1];                        /* 任务是否可以快速切换 */
C51 COMPILER V6.23a  OS_CPU_C                                                              01/01/2001 02:30:57 PAGE 2   

  55          #else
              uint8 data OSFastSwap[2];
              #endif
  58          
  59          extern data uint16 C_XBP;
  60          
  61          void TaskIdle(void)   small;
  62          /*********************************************************************************************************
  63          ** 函数名称: OSCPUInit
  64          ** 功能描述: Small RTOS 与系统相关的初始化
  65          ** 输 入: 无
  66          ** 输 出 : 无
  67          ** 全局变量: OSTaskID,OSTsakStackBotton,SP
  68          ** 调用模块: LoadCtx
  69          ** 
  70          ** 作 者: 陈明计
  71          ** 日 期: 2002年2月22日
  72          **-------------------------------------------------------------------------------------------------------
  73          ** 修改人:
  74          ** 日 期:
  75          **-------------------------------------------------------------------------------------------------------
  76          ********************************************************************************************************/
  77                  void OSCPUInit(void)  small
  78          {
  79   1          uint8 i;
  80   1      
  81   1          for (i = 0; i < OS_MAX_TASKS + 1; i++)
  82   1          {
  83   2              OSTsakStackBotton[i] = STACK;
  84   2          }
  85   1          OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
  86   1          
  87   1      }
  88          
  89          /*********************************************************************************************************
  90          ** 函数名称: OSTaskStkInit
  91          ** 功能描述: 任务堆栈初始化
  92          ** 输 入: 无
  93          ** 输 出 : 无
  94          ** 全局变量: OSTaskID,OSTsakStackBotton,SP
  95          ** 调用模块: LoadCtx
  96          ** 
  97          ** 作 者: 陈明计
  98          ** 日 期: 2002年2月22日
  99          **-------------------------------------------------------------------------------------------------------
 100          ** 修改人:
 101          ** 日 期:
 102          **-------------------------------------------------------------------------------------------------------
 103          ********************************************************************************************************/
 104          /*
 105          #if EN_REENTRANT > 0
 106          #define SP_ADD_BYTE  5
 107          #else
 108          #define SP_ADD_BYTE  3
 109          #endif
 110          
 111          
 112                  void OSTaskStkInit(void (code * task)(void), void xdata *ptos, uint8 TaskID) small
 113          {
 114              uint8 i;
 115              uint8 idata * cp;
 116              uint8 idata * cp1;
C51 COMPILER V6.23a  OS_CPU_C                                                              01/01/2001 02:30:57 PAGE 3   

 117              
 118          #if OS_MAX_TASKS < 9
 119                  OSFastSwap[1] |= OSMapTbl[TaskID];
 120          #else
 121                  if (TaskID < 8)
 122                  {
 123                      OSFastSwap[1] |= OSMapTbl[TaskID];
 124                  }
 125                  else
 126                  {
 127                      OSFastSwap[0] |= OSMapTbl[TaskID & 0x07];
 128                  }
 129          #endif
 130              
 131              if (TaskID < OSRunningTaskID())
 132              {
 133                  i =  OSRunningTaskID() - TaskID;
 134                  cp = (uint8 idata *)(&(OSTsakStackBotton[TaskID + 1]));
 135                  
 136                  do
 137                  {
 138                      *cp += SP_ADD_BYTE;
 139                      cp++;
 140                  } while (--i != 0);
 141                  
 142                  cp1 = (uint8 idata *)SP;
 143                  SP = SP + SP_ADD_BYTE;
 144                  i = SP - (uint8)(OSTsakStackBotton[TaskID + 1]);
 145                  cp = (uint8 idata *)SP;
 146                  do
 147                  {
 148                      *cp-- = *cp1--;
 149                  } while (--i != 0);
 150              }
 151              else
 152              {
 153                  cp1 = (uint8 idata *)(&(OSTsakStackBotton[OSRunningTaskID() + 1]));
 154                  
 155                  i = TaskID - OSRunningTaskID();
 156                  
 157                  do
 158                  {
 159                      *cp1 -= SP_ADD_BYTE;
 160                      cp1++;
 161                  } while (--i != 0);
 162                  
 163                  cp = OSTsakStackBotton[OSRunningTaskID() + 1];
 164                  i = OSTsakStackBotton[TaskID] - cp - SP_ADD_BYTE;
 165                  cp1 = cp - SP_ADD_BYTE;
 166                  do
 167                  {
 168                      *cp1++ = *cp++;
 169                  } while (--i != 0);
 170              }
 171              cp = OSTsakStackBotton[TaskID];
 172              *cp++ = (uint16)task % 256;
 173              *cp++ = (uint16)task / 256;
 174          #if EN_REENTRANT > 0
 175              *cp++ = (uint16)ptos / 256;
 176              *cp++ = (uint16)ptos % 256;

⌨️ 快捷键说明

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