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

📄 isr.lst

📁 MCS-51的一个小型操作系统,在KeilC中大模式下编译工作
💻 LST
字号:
C51 COMPILER V8.02   ISR                                                                   11/05/2004 10:43:35 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: D:\C51\BIN\C51.EXE ISR.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************
   2                  嵌入式系统 小型操作系统
   3                           作者:汪普宏
   4                      制作日期:2006.9
   5          *********************************************/
   6                  
   7          #include "os.h"
   8          #include "OS_Mail.h"
   9          #include "OS_Memory.h"
  10          /****************************************
  11          模块功能:系统时钟中断函数,中断级任务调度
  12          模块接口:当前任务优先级,任务就绪表
  13          调用者:无
  14          返回值:  无
  15          *****************************************/
  16          
  17          void tiem1(void)interrupt 3     
  18          {  
  19   1       uchar  i;
  20   1       ISR_num++;
  21   1       TH1 = (-SYSCLK*SYTIMEISR/12000) >> 8;                  // set Timer0 to overflow in 1ms
  22   1       TL1 = -SYSCLK*SYTIMEISR/12000;
  23   1       TR1=1;
  24   1       OS_CLOSEISR;
  25   1       for(i=0;i<N;i++)          //任务延迟时间计数
  26   1       {
  27   2            if(OSPCB[i].timedal)
  28   2            {
  29   3                         OSPCB[i].timedal--;
  30   3                     if(!OSPCB[i].timedal)
  31   3                         {
  32   4                                      OS_RdyTask(i);
  33   4                         }
  34   3                }
  35   2                else if(OSPCB[i].flg!=WAIT_MSG)
  36   2                {
  37   3                         OS_RdyTask(i);      //使一个任务就绪
  38   3                }
  39   2        } 
  40   1       if(ISR_num==1)
  41   1       { 
  42   2                OSISR_Task_Sched();            //切换任务调用,关中断
  43   2       }
  44   1       OS_OPENISR;
  45   1       ISR_num--;      
  46   1      }
  47          
  48          /****************************************
  49          函数功能:任务调度
  50          模块接口:当前任务优先级,任务就绪表
  51          调用者:中断函数或任务级调度函数
  52          返回值:  无
  53          *****************************************/
  54          extern uchar xdata Task_Free_Stack[FREE_SP];
  55          void  OSISR_Task_Sched(void)                    
C51 COMPILER V8.02   ISR                                                                   11/05/2004 10:43:35 PAGE 2   

  56          {
  57   1       uchar i,newprio,x,y,len;
  58   1       uchar data *p;
  59   1       uchar xdata *tp;
  60   1       uchar addr_h,addr_l;
  61   1       uchar data *sp_top=SP-1;
  62   1       y=OSUnMapTab[OSRdyGrp];
  63   1       x=OSUnMapTab[OSRdyTab[y]];          //判断任务优先级
  64   1       newprio=(y<<3)+x;
  65   1       if(newprio!=Prio)
  66   1       {        addr_l=*sp_top;
  67   2            addr_h=*(sp_top+1);
  68   2                SP=p=spend;
  69   2                OSPCB[Prio].sp_size=len=sp_top-spend;
  70   2                tp=OSPCB[Prio].sp_start;
  71   2                for(i=0;i<len;i++)
  72   2                {
  73   3                         *(tp+i)=*p++;    //保存当前任务堆栈 
  74   3                         }
  75   2                Prio=newprio;
  76   2                SP=p=spend;
  77   2                SP+=len=OSPCB[newprio].sp_size;
  78   2                tp=OSPCB[newprio].sp_start;
  79   2                 for(i=0;i<len;i++)
  80   2                {
  81   3                         *p++=*(tp+i);        //恢复新任务堆栈
  82   3                         } 
  83   2                sp_top=SP++;
  84   2            *sp_top++=addr_l;
  85   2            *sp_top=addr_h;
  86   2       }
  87   1       
  88   1      }
  89          /****************************************
  90          函数功能:任务就绪表查询
  91          模块接口:需要就绪的任务优先级
  92          调用者:  任务调度函数
  93          返回值:  无
  94          *****************************************/
  95          void OS_RdyTask(uchar prio)             //使一个任务就绪
  96          {
  97   1       OS_CLOSEISR;
  98   1       OSRdyGrp|=OSMapTab[prio>>3];
  99   1       OSRdyTab[prio>>3]|=OSMapTab[prio&0x07];  
 100   1       OSPCB[prio].flg=READY;
 101   1       OS_OPENISR;
 102   1      }
 103          uchar code  OSMapTab[]=
 104          {
 105          0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
 106          };
 107          uchar code OSUnMapTab[]=
 108          { 0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 109           
 110            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 111            5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 112            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 113            6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 114            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 115            5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 116            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 117            7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
C51 COMPILER V8.02   ISR                                                                   11/05/2004 10:43:35 PAGE 3   

 118            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 119            5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 120            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 121            6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 122            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 123            5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 124            4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
 125          };        
 126                                    
 127                                    
 128                                    
 129                                    
 130                                             


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    435    ----
   CONSTANT SIZE    =    264    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       5
   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 + -