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

📄 sch51.lst

📁 这是一个合作式内核的实时系统,开发平台式KEIl51.
💻 LST
字号:
C51 COMPILER V7.06   SCH51                                                                 03/13/2007 13:55:51 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SCH51
OBJECT MODULE PLACED IN SCH51.OBJ
COMPILER INVOKED BY: F:\电子\ElectronicsSoftware\KEIL\UV2\C51\BIN\C51.EXE SCH51.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------------------------------*-
   2          
   3             SCH51.C 
   4          -----------------------------------------------------------------*/
   5          
   6          #include "Main.h"
   7          #include "Port.h"
   8          
   9          #include "Sch51.h"
  10          
  11          //数据区
  12          sTask SCH_tasks_G[SCH_MAX_TASKS];  //调度器任务队列
  13          tByte Error_code_G = 0;
  14          //系统休眠函数
  15          static void SCH_Go_To_Sleep(void);
  16          //设置系统报错参数
  17          static tWord Error_tick_count_G; //报错周期
  18          static tByte Last_error_code_G; //上次报错状态
  19          
  20          
  21          /*------------------------------------------------------------------*-
  22          SCH_Dispatch_Tasks()
  23          系统调度执行任务
  24          -*------------------------------------------------------------------*/
  25          void SCH_Dispatch_Tasks(void) 
  26             {
  27   1         tByte Index;
  28   1      
  29   1         for (Index = 0; Index < SCH_MAX_TASKS; Index++)   //查询任务队列,优先级按队列位置排列
  30   1            {
  31   2            if (SCH_tasks_G[Index].RunMe > 0) //任务就绪
  32   2               {
  33   3               (*SCH_tasks_G[Index].pTask)();  //执行任务
  34   3      
  35   3               SCH_tasks_G[Index].RunMe -= 1;   // 任务出列
  36   3      
  37   3               if (SCH_tasks_G[Index].Period == 0) //如果不是周期性任务,则删除
  38   3                  {
  39   4                  SCH_Delete_Task(Index);
  40   4                  }
  41   3               }
  42   2            }
  43   1      
  44   1         // 报告系统状态
  45   1         SCH_Report_Status();  
  46   1      
  47   1         // 系统休眠
  48   1         SCH_Go_To_Sleep();          
  49   1         }
  50          
  51          /*------------------------------------------------------------------*-
  52           SCH_Add_Task()
  53          系统添加任务
  54           参数:
  55             *pFunction--函数名
C51 COMPILER V7.06   SCH51                                                                 03/13/2007 13:55:51 PAGE 2   

  56             DELAY--启动延时,赋0则立刻执行
  57             PERIOD--运行周期,赋0则只执行一次
  58            返回值:任务号或系统报错
  59          -*------------------------------------------------------------------*/
  60          tByte SCH_Add_Task(void (code * pFunction)(), 
  61                             const tWord DELAY, 
  62                             const tWord PERIOD)    
  63             {
  64   1         tByte Index = 0;
  65   1         
  66   1         while ((SCH_tasks_G[Index].pTask != 0) && (Index < SCH_MAX_TASKS))
  67   1            {
  68   2            Index++;
  69   2            } 
  70   1       
  71   1         if (Index == SCH_MAX_TASKS)
  72   1            {
  73   2           
  74   2            Error_code_G = ERROR_SCH_TOO_MANY_TASKS;
  75   2      
  76   2            return SCH_MAX_TASKS;  
  77   2            }
  78   1            
  79   1      
  80   1         SCH_tasks_G[Index].pTask  = pFunction;
  81   1           
  82   1         SCH_tasks_G[Index].Delay  = DELAY;
  83   1         SCH_tasks_G[Index].Period = PERIOD;
  84   1      
  85   1         SCH_tasks_G[Index].RunMe  = 0;
  86   1      
  87   1         return Index; 
  88   1         }
  89          
  90          /*------------------------------------------------------------------*-
  91           SCH_Delete_Task()
  92          系统删除任务
  93            参数:
  94                  TASK_INDEX--任务号
  95            返回值:
  96              1--成功,0--失败
  97          -*------------------------------------------------------------------*/
  98          bit SCH_Delete_Task(const tByte TASK_INDEX) 
  99             {
 100   1         bit Return_code;
 101   1      
 102   1         if (SCH_tasks_G[TASK_INDEX].pTask == 0)   //任务为空时,删除失败
 103   1            {
 104   2            Error_code_G = ERROR_SCH_CANNOT_DELETE_TASK;
 105   2            Return_code = RETURN_ERROR;
 106   2            }
 107   1         else
 108   1            {
 109   2            Return_code = RETURN_NORMAL;
 110   2            }      
 111   1         
 112   1         SCH_tasks_G[TASK_INDEX].pTask   = 0x0000;
 113   1         SCH_tasks_G[TASK_INDEX].Delay   = 0;
 114   1         SCH_tasks_G[TASK_INDEX].Period  = 0;
 115   1      
 116   1         SCH_tasks_G[TASK_INDEX].RunMe   = 0;
 117   1      
C51 COMPILER V7.06   SCH51                                                                 03/13/2007 13:55:51 PAGE 3   

 118   1         return Return_code;       // return status
 119   1         }
 120          
 121          
 122          /*------------------------------------------------------------------*-
 123          
 124            SCH_Report_Status()
 125            报告系统状态
 126          
 127          -*------------------------------------------------------------------*/
 128          void SCH_Report_Status(void)
 129             {
 130   1      #ifdef SCH_REPORT_ERRORS
 131   1         if (Error_code_G != Last_error_code_G)
 132   1            {
 133   2            Error_port = 255 - Error_code_G;
 134   2            
 135   2            Last_error_code_G = Error_code_G;
 136   2      
 137   2            if (Error_code_G != 0)
 138   2               {
 139   3               Error_tick_count_G = 60000;
 140   3               }
 141   2            else
 142   2               {
 143   3               Error_tick_count_G = 0;
 144   3               }
 145   2            }
 146   1         else
 147   1            {
 148   2            if (Error_tick_count_G != 0)
 149   2               {
 150   3               if (--Error_tick_count_G == 0)
 151   3                  {
 152   4                  Error_code_G = 0; 
 153   4                  }
 154   3               }
 155   2            }
 156   1      #endif
 157   1         }
 158          
 159          
 160          /*------------------------------------------------------------------*-
 161          
 162            SCH_Go_To_Sleep()
 163            系统休眠
 164          -*------------------------------------------------------------------*/
 165          void SCH_Go_To_Sleep()
 166             {
 167   1         PCON |= 0x01;   
 168   1        }
 169          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    306    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
C51 COMPILER V7.06   SCH51                                                                 03/13/2007 13:55:51 PAGE 4   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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