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

📄 ex1.lst

📁 ucos移植学习
💻 LST
字号:
C51 COMPILER V7.02a   EX1                                                                  10/16/2006 15:27:51 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE EX1
OBJECT MODULE PLACED IN ex1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ex1.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //任务1、2 试验信号量,可以看出任务切换顺序
   2          //任务3、4 试验邮箱   遗留问题邮箱中的数据如何取出来
   3          #include "..\uc_os_II\includes.h"
   4           
   5          
   6          OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE];
   7          OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE];
   8          OS_STK xdata Task3Stack[CPU_MAX_STK_SIZE];
   9          OS_STK xdata Task4Stack[CPU_MAX_STK_SIZE];
  10           
  11          OS_EVENT    *DispSem;//信号量
  12          OS_EVENT    *TxMbox,*rxmsg;
  13           
  14           void  *temp;
  15           char    err ;
  16           
  17            uint8 const TXMSG      =1;
  18            INT16U   num=0;
  19            INT16U   num1=0;
  20          
  21           
  22          void Task1(void xdata * ppdata); 
  23          void Task2(void xdata * ppdata); 
  24          void Task3(void xdata * ppdata); 
  25          void Task4(void xdata * ppdata); 
  26          
  27          
  28          //---------------------------------------test   OSSem---------------------------------/
  29          void Task1(void xdata * ppdata) 
  30          {
  31   1              ppdata = ppdata;
  32   1      while(1) 
  33   1      {
  34   2      ledd();
  35   2          printf("\nTask1_1:  %d\n",num );   //优先级最高,运行到此处
  36   2          OSSemPend(DispSem, 0,temp);        //再次等待信号量,任务切换到任务2
  37   2          printf("\nTask1:  %d\n",num1); //任务2发送信号量后接着运行
  38   2          num++;
  39   2              if(num>=100){num1++;num=num-100; printf("num=100" ); }
  40   2         OSTimeDly(50);
  41   2      }
  42   1      }
  43          
  44          void Task2(void xdata *yydata)  
  45          {
  46   1          yydata=yydata;
  47   1          for(;;)
  48   1              {    
  49   2             printf("\nTask2:  %d\n",num1 );  //任务运行到此
  50   2                 OSSemPost(DispSem);             //释放信号量,任务切换到更高优先级--任务1
  51   2             printf("\nTask2_2:  %d\n",num );  //高优先级--任务1运行完后,接着运行
  52   2              OSTimeDly(50);    
  53   2          }    
  54   1      }
  55           
C51 COMPILER V7.02a   EX1                                                                  10/16/2006 15:27:51 PAGE 2   

  56          
  57          //------------------------------------------test  OSMbox---------------------------------/
  58          void Task3(void xdata * ppdata)
  59          {  
  60   1              ppdata = ppdata;
  61   1       
  62   1         while(1)
  63   1         {
  64   2            printf("\nTask3_1:  %d\n",num );    //运行机制与信号量基本相同
  65   2           //OSMboxPost(TxMbox,(void*)&TXMSG);  
  66   2          OSMboxPend(TxMbox,100,(void*)&err); 
  67   2           printf("\nTask3:  %d\n",num1 );
  68   2         OSTimeDly(50);
  69   2        } 
  70   1      }
  71          
  72          void Task4(void xdata * ppdata)
  73          {
  74   1              ppdata = ppdata;
  75   1           
  76   1          while(1)
  77   1         {
  78   2          printf("\nTask4_1:  %d\n",num );
  79   2          //OSMboxPend(TxMbox,100,(void*)&err); 
  80   2           OSMboxPost(TxMbox,(void*)&TXMSG); 
  81   2          printf("\nTask4:  %d\n", num1);
  82   2          OSTimeDly(50);
  83   2        } 
  84   1      }
  85           
  86          /*-------------系统初始化----------------------------------------*/
  87          void inti_system(void)
  88            {
  89   1         TMOD = 0X21;/*0010 0001 d7,d3:gate 门控制位
  90   1                                d6,d2:c/t计数器/定时器选择位 1计数,0定时
  91   1                                d5d4,d1d0:工作方式  方式2 常数自动装入的8位定时方式*/
  92   1          TL1 = 0XFC;TH1 = 0XFC;   /*波特率9600,15MHZ*/
  93   1                                  //9600bps,N=256-(2^SMOD*15*10^6)/(9600*32*12)
  94   1              SCON = 0X52; /*0101 0010  d7d6:SM0 SM1串行口工作方式控制位
  95   1                                    d5:SM2多机通讯控制位
  96   1                                    d4:REN串行口接收允许位
  97   1                                    d3:TB8
  98   1                                    d2:RB8
  99   1                                    d1:TI 发送中断标志
 100   1                                    d0:RI接收中断标志*/
 101   1          PCON = 0X00;
 102   1          TL0 = 0x2c; 
 103   1              TH0 = 0xcf;     //10MS
 104   1          // ES = 1;                    //串行口中断,使用printf()函数不能开串口中断
 105   1            ET1 = 0;                  //禁止t1中断
 106   1          ET0 = 1;                 // 允许t0中断
 107   1          EX0 =1;
 108   1          EA = 1;
 109   1          TR0 = 1;
 110   1        TR1 = 1;              /*启动t1*/
 111   1      }
 112          
 113          main()
 114          {
 115   1       
 116   1          OSInit();
 117   1          inti_system();
C51 COMPILER V7.02a   EX1                                                                  10/16/2006 15:27:51 PAGE 3   

 118   1      
 119   1          DispSem= OSSemCreate(0);
 120   1       
 121   1               TxMbox=OSMboxCreate((void*)0);
 122   1      
 123   1          OSTaskCreate(Task1, (void *)0, &Task1Stack[0],2);
 124   1          OSTaskCreate(Task2, (void *)0, &Task2Stack[0],3);
 125   1          OSTaskCreate(Task3, (void *)0, &Task3Stack[0],4);
 126   1          OSTaskCreate(Task4, (void *)0, &Task4Stack[0],5);
 127   1          OSStart();
 128   1      }
 129           
 130          void ledd(void)
 131          {
 132   1        
 133   1      }
 134          
 135           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    417    ----
   CONSTANT SIZE    =    120    ----
   XDATA SIZE       =   2048    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18    ----
   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 + -