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

📄 main.lst

📁 基于51单片机UCOS移植
💻 LST
字号:
C51 COMPILER V9.01   MAIN                                                                  10/31/2012 17:19:08 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Output\main.obj
COMPILER INVOKED BY: D:\keil c51完全版\an_zhuang_51\C51\BIN\C51.EXE APP\main.c LARGE BROWSE INCDIR(.\ucos-ii\inc\) DEBUG
                    - OBJECTEXTEND PRINT(.\Listing\main.lst) OBJECT(.\Output\main.obj)

line level    source

   1          /*
   2          *********************************************************************************************************
   3          *                                                uC/OS-II
   4          *                                          The Real-Time Kernel
   5          *
   6          *                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
   7          *                                           All Rights Reserved
   8          *
   9          *
  10          *                                           uCOS_51 for MCS-51
  11          *
  12          * File : main.c
  13          * By   : Jean J. Labrosse
  14          * Created by : QQ 591881218
  15          *********************************************************************************************************
  16          */
  17          
  18          #include "..\ucos_51\ucos-ii\inc\includes.h"
  19          
  20          // ---------------------------------
  21          
  22          #define APPSTARTPRIO    TASK_START_PRIO 
  23          #define POWERLEDPRIO    OS_LOWEST_PRIO-2
  24          
  25          #define OK                              0
  26          #define ACK                             1
  27          #define ENTER                   0x0D
  28          
  29          // --------------------------------- 
  30          
  31          sbit WorkLedCtrl=P3^4;
  32          
  33          
  34          OS_STK AppStartStk[TASK_STK_SIZE];
  35          OS_STK P1UpStk[TASK_STK_SIZE];
  36          OS_STK P1DownStk[TASK_STK_SIZE];
  37          
  38          
  39          // ---------------------------------
  40          
  41          void AppStart(void *ppdata) REENTRANT;
  42          void P1Up(void *ppdata) REENTRANT; 
  43          void P1Down(void *ppdata) REENTRANT; 
  44          
  45          void Delay(void) REENTRANT
  46          {
  47   1              int i,j;
  48   1              for(i=0;i<200;i++)
  49   1                      for(j=0;j<200;j++);
  50   1      }
  51          
  52          void DelayMS(int x) REENTRANT
  53          {
  54   1              int i,j;
C51 COMPILER V9.01   MAIN                                                                  10/31/2012 17:19:08 PAGE 2   

  55   1              for(i=0;i<x;i++)
  56   1                      for(j=0;j<200;j++);
  57   1      }                       
  58          
  59          // ---------------------------------
  60          
  61          int main(void)
  62          {
  63   1              InitSystem();
  64   1              OSTaskCreate(AppStart, (void *)0, AppStartStk, 4);
  65   1              P1=0xfe;
  66   1              Delay();
  67   1              P1=0x7f;
  68   1              Delay();
  69   1              OSStart();
  70   1              return OK;
  71   1      }
  72          
  73          /*
  74          ********************************************************************************************************* 
  75          *                                             系统开始任务
  76          *
  77          * 描述       : 开定时器T0中断,创建消息邮箱以及所有其他的任务,然后自我删除。
  78          *
  79          * 参数       : ppdata
  80          *
  81          * 注意       : 系统启动后第一时间开定时器中断,否则系统其它任务无法得到执行。                                           
  82          *********************************************************************************************************
  83          */
  84          void AppStart(void *ppdata) REENTRANT
  85          {
  86   1              ppdata=ppdata;
  87   1              ET0=1; /* 谨记:系统启动后第一时间开定时器中断 */
  88   1      
  89   1      //      LogoDisp();
  90   1      //      PrintStr("You can input by the terminal!\n\n\n");
  91   1      
  92   1              
  93   1              OSTaskCreate(P1Up, (void *)0, P1UpStk, 5);
  94   1              OSTaskCreate(P1Down, (void *)0, P1DownStk, 6);
  95   1                      
  96   1              OSTaskDel(OS_PRIO_SELF);
  97   1                      
  98   1      }
  99          
 100          /*
 101          ********************************************************************************************************* 
 102          *                                             工作状态指示任务
 103          *
 104          * 描述       : CPU正常工作时,每秒钟闪烁5次,不工作时不闪烁,控制端口P3.4。
 105          *
 106          * 参数       : ppdata
 107          *
 108          * 注意       : 一个时钟节拍为0.02s,建议优先级设为最低,高于系统空闲任务和系统统计任务。强烈引起您的重视:
 109          *                          ..\ucos_51\ucos-ii\src\ucos_ii.h     
 110          *                                       OS_EXT  DF_IDATA  volatile  INT32U  OSIdleCtr; 
 111          *                          "OSIdleCtr" 变量务必设置为 "idata" 存储类型,否则任务运行节拍变慢。                                          
 112          *********************************************************************************************************
 113          */
 114          void P1Up(void *ppdata) REENTRANT
 115          {
 116   1      #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
C51 COMPILER V9.01   MAIN                                                                  10/31/2012 17:19:08 PAGE 3   

                  OS_CPU_SR  cpu_sr;
              #endif
 119   1      
 120   1              ppdata=ppdata;
 121   1              
 122   1                      while(1)
 123   1              {
 124   2      
 125   2                      OS_ENTER_CRITICAL();
 126   2                      P1=0xfe;
 127   2                      Delay();
 128   2                      P1=0x7f;
 129   2                      Delay();
 130   2                      OS_EXIT_CRITICAL();
 131   2                      OSTimeDly(20);
 132   2              }
 133   1      
 134   1      /*      for(;;)
 135   1              {
 136   1                      OS_ENTER_CRITICAL();
 137   1      
 138   1                       P1=0xfe;
 139   1                      OS_EXIT_CRITICAL();
 140   1                      DelayMS(4);
 141   1      
 142   1      //              OSTimeDlyHMSM(0,0,0,400);
 143   1      //              OSTimeDly(10);   
 144   1      
 145   1              } */
 146   1      }
 147          
 148          void P1Down(void *ppdata) REENTRANT
 149          {
 150   1      #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
                  OS_CPU_SR  cpu_sr;
              #endif
 153   1      
 154   1              ppdata=ppdata;
 155   1      
 156   1                      while(1)
 157   1              {
 158   2      
 159   2                      OS_ENTER_CRITICAL();
 160   2                      P1=253;
 161   2                      Delay();
 162   2                      P1=191;
 163   2                      Delay();
 164   2                      OS_EXIT_CRITICAL();
 165   2                      OSTimeDly(50);
 166   2              }
 167   1              
 168   1      /*      for(;;)
 169   1              {
 170   1                      OS_ENTER_CRITICAL();
 171   1      
 172   1                       P1=0x7f;
 173   1                      DelayMS(4);
 174   1      
 175   1                      OS_EXIT_CRITICAL();
 176   1      
 177   1      //              OSTimeDlyHMSM(0,0,0,200);
 178   1                      OSTimeDly(200);
C51 COMPILER V9.01   MAIN                                                                  10/31/2012 17:19:08 PAGE 4   

 179   1              } */
 180   1      }
 181          
 182          /*
 183          ********************************************************************************************************* 
 184          *                                             串口收发任务
 185          *
 186          * 描述       : UartRcv任务负责从键盘接收,通过消息邮箱发送给UartSend任务处理并在终端打印。
 187          *
 188          * 参数       : ppdata
 189          *
 190          * 注意       : 多任务的并发执行,须妥善处理对临界资源的访问以及多任务之间的通信。                               
             -        
 191          *********************************************************************************************************
 192          */
 193          // ------------------------------------------------------------------------------------------------------
 194          /*void UartRcv(void *ppdata) REENTRANT
 195          {
 196                  static INT8U RxBuf;
 197                  static INT8U err;
 198          
 199                  ppdata=ppdata;
 200                          
 201                  for(;;)
 202                  {
 203                          if(Getch(&RxBuf)) 
 204                          {
 205                                  OSMboxPost(UartMbox, (void *)&RxBuf);
 206                                  OSMboxPend(AckMbox, 0, &err);
 207                          }       
 208                          
 209                          OSTimeDlyHMSM(0,0,0,100);
 210                  }       
 211          }
 212          
 213          void UartSend(void *ppdata) REENTRANT
 214          {
 215                  static INT8U *TxBuf;
 216                  static INT8U err;
 217                  INT16U count=0; 
 218          
 219                  ppdata=ppdata;
 220          
 221                  for(;;)
 222                  {
 223                          TxBuf=(INT8U *)OSMboxPend(UartMbox,0,&err);
 224          
 225                          if(OS_NO_ERR==err)
 226                          {       
 227                                  PrintChar(*TxBuf);
 228          
 229                                  count++;
 230                                  
 231                                  if((*TxBuf == ENTER) || (count == 0xFFFF)) count=1; 
 232                          
 233                                  if(!(count%69))
 234                                  { 
 235                                          PrintStr("\n");
 236                                  }       
 237                          }
 238                          else 
 239                          {
C51 COMPILER V9.01   MAIN                                                                  10/31/2012 17:19:08 PAGE 5   

 240                                  PrintStr("\n\nMboxRcv err!\n\n\n");
 241                          }
 242          
 243                          OSMboxPost(AckMbox,(void *)ACK);
 244                  }
 245          } */
 246          // ------------------------------------------------------------------------------------------------------


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