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

📄 q.lst

📁 模仿ucos ii和RTX Tiny写的一个小操作系统
💻 LST
字号:
C51 COMPILER V8.08   Q                                                                     05/09/2008 17:57:19 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE Q
OBJECT MODULE PLACED IN q.OBJ
COMPILER INVOKED BY: C:\Keil808\C51\BIN\C51.EXE q.c ROM(COMPACT) DEBUG OBJECTEXTEND

line level    source

   1          #include <AT89X52.H>
   2          
   3          #include "os_core.h"
   4          #include "main.h"
   5          #include "task_switch.h"
   6          #include "sem.h"
   7          #include "q.h"
   8          #include "uart.h"
   9          
  10          uint8   OS_Task_Q_List;
  11          
  12          //////////////////////////////////发送消息//////////////////////////////////////////////////
  13          
  14          uint8 OSSendMsg(void * msg) reentrant 
  15          {
  16   1          uint8  i,tempPrio=255;
  17   1                
  18   1           for(i=0;i<TASK_NUM;i++)                      //查找优先级最高的任务
  19   1          {
  20   2            if(OS_Task_Q_List&OSMapTbl[i]&&OS_TCB[i].Prio<tempPrio)    
  21   2            {
  22   3                  tempPrio=OS_TCB[i].Prio;
  23   3            }
  24   2           }
  25   1      
  26   1           for(i=0;i<TASK_NUM;i++)
  27   1          { 
  28   2             if(OS_Task_Q_List&OSMapTbl[i]&&OS_TCB[i].Prio==tempPrio)    
  29   2            {
  30   3                       break;
  31   3            }
  32   2              }
  33   1      
  34   1          if(i < TASK_NUM)                    //如果有任务需要
  35   1          { 
  36   2                OS_TCB[i].msg=msg;                //传入地址 
  37   2                OS_Task_Q_List&= ~OSMapTbl[i];
  38   2             OSSendSignal(i);
  39   2                 return Q_OK;                             //成功,返回
  40   2          } 
  41   1          else 
  42   1          {  
  43   2              return  NOT_OK;                                                 //没有任务需要,返回
  44   2          }           
  45   1      
  46   1      }
  47          //////////////////////////////////发送消息//////////////////////////////////////////////////
  48          uint8 OSTaskSendMsg(void * msg,uint8 i)  reentrant
  49          {
  50   1      
  51   1        if(i < TASK_NUM)                           //如果有任务需要
  52   1       { 
  53   2           if((OS_Task_Q_List&OSMapTbl[i]))     //判断该任务是否为等待任务
  54   2          {
  55   3                 OS_TCB[i].msg=msg;                      //传入地址
C51 COMPILER V8.08   Q                                                                     05/09/2008 17:57:19 PAGE 2   

  56   3                 OS_Task_Q_List&= ~OSMapTbl[i];
  57   3             OSSendSignal(i);
  58   3                 return  Q_OK;                                       //成功,返回
  59   3          }   
  60   2        }             
  61   1             return   NOT_OK;                                           //没有任务需要,返回
  62   1      }
  63          
  64          //////////////////////////////// 等待消息  /////////////////////////////////////////////////
  65          void *  OSTaskWaitMsg(uint8 * err,uint8  Timeout) reentrant
  66          {
  67   1         void  *msg;
  68   1        if(OS_TCB[OS_Current_ID].msg==0x0000)        //指针为空,无消息
  69   1       {      
  70   2                
  71   2               OS_Task_Q_List|=OSMapTbl[OS_Current_ID];  //加入消息的任务等待表
  72   2        bb:   
  73   2         
  74   2            if(OSWait(K_TMO,Timeout)==TMO_EVENT)         //超时唤醒
  75   2              {  
  76   3                 OS_ENTER_CRITICAL();
  77   3                 OS_Task_Q_List&= ~OSMapTbl[OS_Current_ID];  //从等待表中去除
  78   3                 OS_EXIT_CRITICAL();  
  79   3             *err=Q_TMO;                               //超时
  80   3          }
  81   2      
  82   2            if(OS_Task_Q_List&OSMapTbl[OS_Current_ID])  
  83   2                      goto bb;
  84   2        }
  85   1               msg=OS_TCB[OS_Current_ID].msg;
  86   1               OS_TCB[OS_Current_ID].msg=0;
  87   1               *err=Q_OK;
  88   1               return msg ;
  89   1                              //有消息
  90   1      }


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