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

📄 os_core.lst

📁 一个用在51单片机上的调度器 后续版本将出现可占先式调度
💻 LST
字号:
C51 COMPILER V8.08   OS_CORE                                                               02/04/2008 22:01:36 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN .\OS_core.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\CORE\OS_core.c BROWSE DEBUG OBJECTEXTEND PRINT(.\OS_core.lst) OBJECT(.\O
                    -S_core.obj)

line level    source

   1          /*--------------------------------------------------------------------------------*-
   2           *                                                         ck/OS
   3           *                                                      调度器内核文件
   4           *                                              ------------------------------- 
   5           *
   6           *文件名称:OS_core.c
   7           *
   8           *作    者:冯耿超
   9           *版    本:V1.1.2                                      
  10           *创建日期:2008年01月31日
  11           *
  12           *文件描述:OS_core.c文件主要包括三个内核函数:OS_Add_Task()、OS_Assign_Task()、
  13           *                      OS_Delete_Tasks()、分别为添加任务,任务分配,删除任务。本文件与MCU
  14           *                      的硬件无关。
  15          -*--------------------------------------------------------------------------------*/
  16          #include "..\INC\OS_cfg.h"
  17          #include "..\string.h"
  18          #include "..\INC\OS_core.h"
  19          
  20          //static void *SetMem(void *cPtr,tByte const Contant,int sLen);
  21          
  22          sTask OS_TCB[OS_MAX_TASK];//定义任务结构数组
  23          /*--------------------------------------------------------------------------------*-
  24           *函数原型:OS_Add_Task(void (*pTask)(void),tByte const ID,
  25           *                                                              tWord const tDelay, tPeriod)
  26           *输入参数:*pTask--->任务的入口地址
  27           *                      ID    --->任务控制块地址,在以后版本中会做为任务的优先级
  28           *                      tDelay--->任务延迟时间
  29           *                      tPeriod-->任务周期
  30           *输出参数:无
  31           *返 回 值:ID--->任务添加成功放回任务ID
  32           *                      Error->任务添加不成功返回错误信号
  33           *
  34           *描    述:本程序用于向内核添加用户任务,需要主意任务ID不得大于最大系统任务量
  35           *                      即ID必须小于OS_MAX_TASK。函数调用库函数memset(),来初始化任务控制
  36           *                      块OS_TCB。
  37          -*--------------------------------------------------------------------------------*/
  38          //添加任务
  39          tByte OS_Add_Task(void (code *pTask)(void),const tByte ID,
  40                                                                          const tWord tDelay,const tWord tPeriod)
  41          {
  42   1              if(ID < OS_MAX_TASK)//判断任务ID是否超出最大任务数      
  43   1              {
  44   2              //      memset( &OS_TCB[ID],0,sizeof(sTask));//清零任务指定区域
  45   2                      OS_TCB[ID].aTask   = pTask;//存放任务首地址
  46   2      
  47   2                      OS_TCB[ID].TaskID  = ID;//任务位置,任务优先级
  48   2      
  49   2                      OS_TCB[ID].Period  = tPeriod;//任务周期
  50   2      
  51   2                      OS_TCB[ID].Delay   = tDelay;//任务有效延迟时间初值
  52   2      
  53   2                      OS_TCB[ID].RunMe   = 0;
  54   2      
C51 COMPILER V8.08   OS_CORE                                                               02/04/2008 22:01:36 PAGE 2   

  55   2                      return ID;//任务添加成功返回任务优先级
  56   2              }
  57   1              else
  58   1              {
  59   2                      return Error;//任务添加出错
  60   2              }       
  61   1      }
  62          
  63          /*--------------------------------------------------------------------------------*-
  64           *函数原型:OS_Assign_Task(void)
  65           *
  66           *输入参数:无
  67           *
  68           *输出参数:无
  69           *
  70           *返 回 值:无
  71           *
  72           *描    述:本程序为内核添规划分配任务,必须放在超级循环体中,及必须放在while(1){}
  73           *                      语句中。当任务标志位RUNME有效时执行任务。
  74          -*--------------------------------------------------------------------------------*/
  75          //系统规划分配任务
  76          void OS_Assign_Task(void)
  77          {
  78   1              tByte Index;
  79   1              for(Index = 0;Index < OS_MAX_TASK;Index++)
  80   1              {
  81   2                      if(OS_TCB[Index].RunMe > 0)//运行标志是否有效
  82   2                      {
  83   3                              (*OS_TCB[Index].aTask)();//运行任务
  84   3      
  85   3                              OS_TCB[Index].RunMe -= 1;//任务复位
  86   3                      }
  87   2      
  88   2                      if(OS_TCB[Index].Period == 0)
  89   2                      {
  90   3                              OS_Delete_Tasks(Index);//周期为0时删除任务,任务只被运行一次    
  91   3                      }
  92   2              }               
  93   1      }
  94          
  95          /*--------------------------------------------------------------------------------*-
  96           *函数原型:OS_Delete_Tasks(tByte tID)
  97           *
  98           *输入参数:tID--->需要被删除的任务ID
  99           *
 100           *输出参数:无
 101           *
 102           *返 回 值:无
 103           *
 104           *描    述:删除任务,将原来任务数据结构内存块清零。
 105          -*--------------------------------------------------------------------------------*/
 106          //删除任务,将原来任务数据结构内存块清零
 107          void OS_Delete_Tasks(const tByte tID)
 108          {
 109   1              memset(&OS_TCB[tID],0,sizeof(sTask));//将任务数据块清零,删除内存中的任务
 110   1      }
 111          
 112          /*--------------------------------------------------------------------------------*-
 113           *函数原型:OS_Init(void)
 114           *
 115           *输入参数:无
 116           *
C51 COMPILER V8.08   OS_CORE                                                               02/04/2008 22:01:36 PAGE 3   

 117           *输出参数:无
 118           *
 119           *返 回 值:无
 120           *
 121           *描    述:初始化系统程序,清理系统所有的任务控制块。
 122          -*--------------------------------------------------------------------------------*/
 123          //初始化系统程序
 124          void OS_Init(void)
 125          {
 126   1              memset(&OS_TCB[0],0,(sizeof(sTask)*OS_MAX_TASK));//清零所有任务块
 127   1      
 128   1      }
 129          
 130          /*--------------------------------------------------------------------------------*-
 131           *函数原型:*SetMem(void *cPtr,char const Contant,int sLen)
 132           *
 133           *输入参数:*cPtr--->需要设置的内存区首地址
 134           *                      Contant->需要设置的内容
 135           *                      sLen---->需要设置的内存区长度
 136           *
 137           *输出参数:无
 138           *
 139           *返 回 值:无
 140           *
 141           *描    述:设置内存区域,首地址为cPtr,长度sLen,内容Contant
 142          -*--------------------------------------------------------------------------------*/
 143          /*
 144          //设置内存区域
 145          void *SetMem(void *cPtr,char const Contant,int sLen)
 146          {
 147                  tByte *addPtr;
 148                  addPtr = (tByte *)cPtr;
 149                  if(cPtr != NULL)
 150                  {
 151                          while(sLen > 0)
 152                          {
 153                                  *addPtr++ = Contant;
 154                                  --sLen;
 155                          }
 156                          return cPtr;//返回首地址
 157                  }
 158                  else
 159                  {
 160                          return NULL;
 161                  }
 162          }*/
 163          
 164          /*--------------------------------------------------------------------------------*-
 165          -*-------------------------------End of file--------------------------------------*-
 166          -*--------------------------------------------------------------------------------*/
 167          


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

C51 COMPILER V8.08   OS_CORE                                                               02/04/2008 22:01:36 PAGE 4   


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

⌨️ 快捷键说明

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